การแปลงสื่อที่เข้ากันได้ซึ่งเปิดตัวใน Android 12 เป็นฟีเจอร์ที่ช่วยให้อุปกรณ์ใช้รูปแบบสื่อที่ทันสมัยและประหยัดพื้นที่เก็บข้อมูลมากขึ้นสำหรับการจับภาพวิดีโอ เช่น HEVC ในขณะเดียวกันก็ยังคงใช้งานร่วมกับแอปต่างๆ ได้ ฟีเจอร์นี้ช่วยให้ผู้ผลิตอุปกรณ์สามารถใช้ HEVC แทน AVC โดยค่าเริ่มต้นเพื่อปรับปรุงคุณภาพวิดีโอไปพร้อมกับลดข้อกำหนดด้านพื้นที่เก็บข้อมูลและแบนด์วิดท์ สำหรับอุปกรณ์ที่เปิดใช้การแปลงสื่อที่เข้ากันได้ Android จะแปลงวิดีโอ (ความยาวไม่เกิน 1 นาที) ที่บันทึกในรูปแบบต่างๆ เช่น HEVC หรือ HDR โดยอัตโนมัติเมื่อแอปที่ไม่รองรับรูปแบบดังกล่าวเปิดวิดีโอ ซึ่งช่วยให้แอปทำงานได้แม้ว่าจะมีการบันทึกวิดีโอในรูปแบบที่ใหม่กว่าในอุปกรณ์
ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะปิดอยู่โดยค่าเริ่มต้น หากต้องการขอแปลงสื่อ แอปต้องประกาศความสามารถของสื่อ ดูข้อมูลเพิ่มเติมเกี่ยวกับการประกาศความสามารถของสื่อได้ที่การเปลี่ยนรูปแบบสื่อที่เข้ากันได้ในเว็บไซต์ของนักพัฒนาแอป Android
วิธีการทำงาน
ฟีเจอร์การแปลงสื่อที่เข้ากันได้ประกอบด้วย 2 ส่วนหลักดังนี้
- บริการเปลี่ยนรูปแบบในเฟรมเวิร์กสื่อ: บริการเหล่านี้จะแปลงไฟล์จากรูปแบบหนึ่งเป็นรูปแบบอื่นโดยใช้ฮาร์ดแวร์เพื่อให้เกิดความล่าช้าต่ำและการเปลี่ยนรูปแบบที่มีคุณภาพสูง ซึ่งรวมถึง API การแปลง บริการการแปลง ปลั๊กอิน OEM สำหรับฟิลเตอร์ที่กำหนดเอง และฮาร์ดแวร์ ดูรายละเอียดเพิ่มเติมได้ที่ภาพรวมสถาปัตยกรรม
- ฟีเจอร์การเปลี่ยนรูปแบบสื่อที่เข้ากันได้ในผู้ให้บริการสื่อ: คอมโพเนนต์นี้พบในผู้ให้บริการสื่อ ซึ่งจะขัดขวางแอปที่เข้าถึงไฟล์สื่อและแสดงไฟล์ต้นฉบับหรือไฟล์ที่เปลี่ยนรูปแบบตามความสามารถที่ประกาศของแอป หากแอปรองรับรูปแบบของไฟล์สื่อ ก็ไม่จำเป็นต้องมีการจัดการพิเศษ หากแอปไม่รองรับรูปแบบดังกล่าว เฟรมเวิร์กจะแปลงไฟล์เป็นรูปแบบเก่า เช่น AVC เมื่อแอปเข้าถึงไฟล์
รูปที่ 1 แสดงภาพรวมของกระบวนการแปลงสื่อ
รูปที่ 1 ภาพรวมของการแปลงสื่อที่เข้ากันได้
รูปแบบที่รองรับ
ฟีเจอร์การแปลงสื่อที่เข้ากันได้รองรับ Conversion รูปแบบต่อไปนี้
- HEVC (8 บิต) เป็น AVC: การแปลงตัวแปลงรหัสเกิดขึ้นผ่านการเชื่อมต่อตัวถอดรหัสสื่อ 1 ตัวและโปรแกรมเปลี่ยนไฟล์ Mediacode 1 ตัว
- HDR10+ (10 บิต) เป็น AVC (SDR): การแปลง HDR เป็น SDR ดำเนินการโดยใช้อินสแตนซ์ Mediacodec และปลั๊กอินของผู้ให้บริการเชื่อมต่อกับอินสแตนซ์ตัวถอดรหัส ดูข้อมูลเพิ่มเติมได้ที่การเข้ารหัส HDR เป็น SDR
แหล่งที่มาของเนื้อหาที่รองรับ
ฟีเจอร์การแปลงสื่อที่เข้ากันได้จะรองรับสื่อในอุปกรณ์ที่สร้างขึ้นโดยแอปกล้อง OEM ดั้งเดิมซึ่งจัดเก็บไว้ในโฟลเดอร์ DCIM/Camera/
ในวอลุ่มภายนอกหลัก ฟีเจอร์นี้ไม่รองรับสื่อในพื้นที่เก็บข้อมูลรอง
ไม่รองรับเนื้อหาที่ส่งไปยังอุปกรณ์ผ่านอีเมลหรือการ์ด SD
แอปเข้าถึงไฟล์ตามเส้นทางไฟล์ต่างๆ ต่อไปนี้เป็นคำอธิบายเส้นทางไฟล์ที่เปิดใช้หรือข้ามการแปลง
เปิดใช้การแปลงแล้ว
- การเข้าถึงแอปผ่าน MediaStore API
- การเข้าถึงแอปผ่าน API เส้นทางไฟล์โดยตรง รวมถึง Java และโค้ดเนทีฟ
- การเข้าถึงแอปผ่านเฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล (SAF)
- การเข้าถึงแอปผ่าน Intent ของชีตที่แชร์ของระบบปฏิบัติการ (เฉพาะ URI ของ MediaStore)
- การโอนไฟล์ MTP/PTP จากโทรศัพท์ไปยัง PC
ข้ามการแปลง:
- การโอนไฟล์ออกจากอุปกรณ์โดยการนำการ์ด SD ออก
- การโอนไฟล์จากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่งโดยใช้ตัวเลือกต่างๆ เช่น การแชร์ใกล้เคียงหรือการโอนผ่านบลูทูธ
เพิ่มเส้นทางไฟล์ที่กำหนดเองสำหรับการเปลี่ยนรูปแบบ
ผู้ผลิตอุปกรณ์สามารถเพิ่มเส้นทางไฟล์สำหรับการแปลงสื่อได้หากต้องการ โดยเพิ่มลงในไดเรกทอรี DCIM/
ระบบจะปฏิเสธเส้นทางที่อยู่นอกไดเรกทอรี DCIM/
คุณอาจต้องเพิ่มเส้นทางไฟล์ดังกล่าวเพื่อให้เป็นไปตามข้อกำหนดของผู้ให้บริการหรือกฎระเบียบท้องถิ่น
หากต้องการเพิ่มเส้นทางไฟล์ ให้ใช้เส้นทางการแปลง
การวางซ้อนทรัพยากรรันไทม์ (RRO),
config_supported_transcoding_relative_paths
ต่อไปนี้เป็นตัวอย่างวิธีเพิ่มเส้นทางไฟล์
<string-array name="config_supported_transcoding_relative_paths" translatable="false">
<item>DCIM/JCF/</item>
</string-array>
หากต้องการยืนยันเส้นทางไฟล์ที่กําหนดค่าไว้ ให้ใช้
adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20
ภาพรวมสถาปัตยกรรม
ส่วนนี้อธิบายสถาปัตยกรรมของฟีเจอร์การแปลงสื่อ
รูปที่ 2 สถาปัตยกรรมการแปลงสื่อ
สถาปัตยกรรมการแปลงสื่อประกอบด้วยองค์ประกอบต่อไปนี้
- MediaTranscodingManager system API: อินเทอร์เฟซที่อนุญาตให้ไคลเอ็นต์สื่อสารกับบริการ MediaTranscoding โมดูล MediaProvider ใช้ API นี้
- MediaTranscodingService: บริการแบบเนทีฟที่จัดการการเชื่อมต่อของไคลเอ็นต์ กำหนดเวลาคำขอแปลง และจัดการการทำบัญชีสำหรับ
TranscodingSessions
- MediaTranscoder: ไลบรารีแบบเนทีฟที่ทำการแปลง ไลบรารีนี้สร้างขึ้นจากเฟรมเวิร์กสื่อ NDK เพื่อให้ใช้งานร่วมกับโมดูลได้
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้จะบันทึกเมตริกการแปลงทั้งในบริการและเครื่องมือแปลงสื่อ โค้ดฝั่งไคลเอ็นต์และฝั่งบริการอยู่ในโมดูล MediaProvider เพื่อให้แก้ไขข้อบกพร่องและอัปเดตได้ทันท่วงที
สิทธิ์เข้าถึงไฟล์
การแปลงสื่อที่เข้ากันได้สร้างขึ้นจากระบบไฟล์ใน Userspace (FUSE) ซึ่งใช้สำหรับพื้นที่เก็บข้อมูลแบบจำกัด FUSE ช่วยให้โมดูล MediaProvider ตรวจสอบการดำเนินการกับไฟล์ในพื้นที่ผู้ใช้ และควบคุมการเข้าถึงไฟล์ตามนโยบายเพื่ออนุญาต ปฏิเสธ หรือปกปิดการเข้าถึง
เมื่อแอปพยายามเข้าถึงไฟล์ Daemon ของ FUSE จะสกัดกั้นสิทธิ์การอ่านไฟล์จากแอป หากแอปรองรับรูปแบบที่ใหม่กว่า (เช่น HEVC) ระบบจะส่งไฟล์ต้นฉบับกลับมา หากแอปไม่รองรับรูปแบบดังกล่าว ระบบจะเปลี่ยนรูปแบบไฟล์เป็นรูปแบบเก่า (เช่น AVC) หรือแสดงผลจากแคชหากมีเวอร์ชันที่เปลี่ยนรูปแบบแล้ว
ขอไฟล์ที่แปลง
ระบบจะปิดใช้ฟีเจอร์การแปลงไฟล์สื่อที่เข้ากันได้โดยค่าเริ่มต้น ซึ่งหมายความว่าหากอุปกรณ์รองรับ HEVC ทาง Android จะไม่แปลงไฟล์ เว้นแต่แอปจะระบุไว้ในไฟล์ Manifest หรือในรายการการบังคับแปลงไฟล์
แอปขอเนื้อหาที่แปลงได้โดยใช้ตัวเลือกต่อไปนี้
- ประกาศรูปแบบที่ไม่รองรับในไฟล์ Manifest โปรดดูรายละเอียดที่หัวข้อประกาศความสามารถในทรัพยากร และประกาศความสามารถในโค้ด
- เพิ่มแอปลงในรายการบังคับเปลี่ยนรูปแบบที่รวมอยู่ในข้อบังคับของMediaProvider การดำเนินการนี้จะเปิดใช้การแปลงสำหรับแอปที่ยังไม่ได้อัปเดต ไฟล์ Manifest เมื่อแอปอัปเดตไฟล์ Manifest ด้วยรูปแบบที่ไม่รองรับ จะต้องนำไฟล์ดังกล่าวออกจากรายการบังคับแปลง ผู้ผลิตอุปกรณ์สามารถเสนอชื่อแอปที่จะเพิ่มหรือนำออกจากรายการบังคับแปลงได้โดยส่งแพตช์หรือการรายงานข้อบกพร่อง ทีม Android จะตรวจสอบรายการเป็นระยะและอาจนำแอปออกจากรายการ
- ปิดใช้รูปแบบที่รองรับด้วยเฟรมเวิร์กความเข้ากันได้ของแอปในเวลาที่เรียกใช้ (ผู้ใช้ปิดใช้ตัวเลือกนี้สำหรับแต่ละแอปได้ในการตั้งค่า)
- เปิดไฟล์ด้วย
MediaStore
ขณะระบุรูปแบบที่ไม่รองรับอย่างชัดเจนด้วยopenTypedAssetFileDescriptor
API
สำหรับการโอนผ่าน USB (อุปกรณ์ไปยัง PC) ระบบจะปิดใช้การแปลงโดยค่าเริ่มต้น แต่ผู้ใช้สามารถเลือกเปิดใช้การแปลงได้โดยใช้ปุ่มสลับแปลงวิดีโอเป็น AVC ในหน้าจอการตั้งค่าค่ากำหนด USB ดังที่แสดงในรูปที่ 3
รูปที่ 3 สลับเพื่อเปิดใช้การแปลงสื่อในหน้าจอค่ากำหนด USB
ข้อจำกัดในการขอไฟล์ที่แปลงแล้ว
แอปที่ขอเซสชันการแปลงจะมีข้อจำกัดดังนี้เพื่อป้องกันไม่ให้คำขอแปลงข้อมูลล็อกทรัพยากรของระบบเป็นเวลานาน
- 10 เซสชันติดต่อกัน
- รันไทม์ทั้งหมด 3 นาที
หากแอปเกินขีดจำกัดทั้งหมดเหล่านี้ เฟรมเวิร์กจะแสดงข้อบ่งชี้ไฟล์ต้นฉบับ
ข้อกำหนดของอุปกรณ์
อุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้จึงจะรองรับฟีเจอร์การแปลงรหัสสื่อที่เข้ากันได้
- อุปกรณ์เปิดใช้การเข้ารหัส HEVC ในแอปกล้องที่มาพร้อมเครื่องโดยค่าเริ่มต้น
- (อุปกรณ์ที่รองรับการแปลง HDR เป็น SDR) อุปกรณ์รองรับการจับภาพวิดีโอ HDR
คุณต้องเพิ่มประสิทธิภาพการเข้าถึงแบบอ่าน/เขียนของฮาร์ดแวร์และพื้นที่เก็บข้อมูลวิดีโอเพื่อให้อุปกรณ์มีประสิทธิภาพในการแปลงสื่อ เมื่อกำหนดค่าตัวแปลงรหัสสื่อให้มีลําดับความสําคัญเท่ากับ 1
ตัวแปลงรหัสต้องทํางานด้วยอัตราข้อมูลที่สูงที่สุด เราขอแนะนำว่าประสิทธิภาพการแปลงควรอยู่ที่ 200 FPS เป็นอย่างน้อย หากต้องการทดสอบประสิทธิภาพของฮาร์ดแวร์ ให้เรียกใช้การทดสอบประสิทธิภาพของตัวแปลงรหัสสื่อที่ frameworks/av/media/libmediatranscoding/transcoder/benchmark
การตรวจสอบความถูกต้อง
หากต้องการตรวจสอบฟีเจอร์การแปลงสื่อที่เข้ากันได้ ให้ทำการทดสอบ CTS ต่อไปนี้
android.media.mediatranscoding.cts
android.mediaprovidertranscode.cts
เปิดใช้การแปลงสื่อทั่วโลก
หากต้องการทดสอบเฟรมเวิร์กการแปลงสื่อเป็นรูปแบบหรือลักษณะการทํางานของแอปด้วยการแปลง คุณสามารถเปิดหรือปิดใช้ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้ทั่วโลก ในหน้าตัวเลือกสำหรับนักพัฒนาแอป การตั้งค่า > ระบบ > นักพัฒนาแอป > การแปลงสื่อ ให้ตั้งค่าปุ่มสลับลบล้างค่าเริ่มต้นของการแปลงเป็นเปิด แล้วตั้งค่าปุ่มสลับเปิดใช้การแปลงเป็นเปิดหรือปิด หากเปิดใช้การตั้งค่านี้ การแปลงสื่ออาจเกิดขึ้นในเบื้องหลังสำหรับแอปอื่นที่ไม่ใช่แอปที่คุณพัฒนา
ตรวจสอบสถานะการแปลง
ในระหว่างการทดสอบ คุณสามารถใช้คำสั่งเชลล์ ADB ต่อไปนี้เพื่อตรวจสอบสถานะการแปลง รวมถึงเซสชันการแปลงในปัจจุบันและที่ผ่านมา
adb shell dumpsys media.transcoding
ขยายขีดจำกัดความยาววิดีโอ
สำหรับการทดสอบ คุณสามารถขยายขีดจำกัดความยาววิดีโอ 1 นาทีสำหรับการแปลงได้โดยใช้คำสั่งต่อไปนี้ คุณอาจต้องรีบูต หลังจากเรียกใช้คำสั่งนี้
adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>
แหล่งที่มาและการอ้างอิง AOSP
ต่อไปนี้คือซอร์สโค้ด AOSP ที่เกี่ยวข้องกับการแปลงสื่อเป็นรูปแบบที่เข้ากันได้
Transcoding System API (ใช้โดย MediaProvider เท่านั้น)
API ApplicationMediaCapabilities API
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
บริการแปลงสื่อ
frameworks/av/services/mediatranscoding/
frameworks/av/media/libmediatranscoding/
Native MediaTranscoder
frameworks/av/media/libmediatranscoding/transcoder
ปลั๊กอินตัวอย่าง HDR สำหรับ MediaTranscoder
โค้ดการสกัดกั้นและการแปลงไฟล์ MediaProvider
การเปรียบเทียบ MediaTranscoder
frameworks/av/media/libmediatranscoding/transcoder/benchmark
การทดสอบ CTS
cts/tests/tests/mediatranscoding/
การเข้ารหัส HDR เป็น SDR
หากต้องการรองรับการเข้ารหัส HDR เป็น SDR ผู้ผลิตอุปกรณ์สามารถใช้ปลั๊กอินตัวกรอง Codec 2.0 ของ AOSP ตัวอย่างซึ่งอยู่ใน /platform/frameworks/av/media/codec2/hidl/plugin/
หัวข้อนี้จะอธิบายวิธีการทำงานของปลั๊กอินตัวกรอง วิธีใช้งานปลั๊กอิน และวิธีทดสอบปลั๊กอิน
หากอุปกรณ์ไม่มีปลั๊กอินที่รองรับการเข้ารหัส HDR เป็น SDR แอปที่เข้าถึงวิดีโอ HDR จะได้รับคำอธิบายไฟล์ต้นฉบับ โดยไม่คำนึงถึงความสามารถของสื่อของแอปที่ประกาศไว้ในไฟล์ Manifest
วิธีการทำงาน
ส่วนนี้อธิบายลักษณะการทำงานทั่วไปของปลั๊กอินตัวกรอง Codec 2.0
ฉากหลัง
Android มีการใช้งานเลเยอร์การปรับระหว่างอินเทอร์เฟซ Codec 2.0 กับอินเทอร์เฟซ android.hardware.media.c2
HAL ที่ android::hardware::media::c2
สำหรับปลั๊กอินตัวกรอง AOSP จะมีกลไก Wrapper ที่รวมตัวถอดรหัสเข้ากับปลั๊กอินตัวกรอง
MediaCodec
จะจดจำคอมโพเนนต์ที่รวมไว้เหล่านี้เป็นตัวถอดรหัสที่มีฟีเจอร์การกรอง
ภาพรวม
คลาส FilterWrapper
จะนำตัวแปลงรหัสของผู้ให้บริการและแสดงตัวแปลงรหัสที่รวมไว้กลับไปยังเลเยอร์การปรับ media.c2
คลาส FilterWrapper
จะโหลด libc2filterplugin.so
ผ่าน API ของ FilterWrapper::Plugin
และบันทึกตัวกรองที่พร้อมใช้งานจากปลั๊กอิน เมื่อสร้าง FilterWrapper
จะสร้างอินสแตนซ์ของตัวกรองทั้งหมดที่มี เวลาเริ่มต้นเฉพาะกับตัวกรองที่เปลี่ยนแปลงบัฟเฟอร์เท่านั้น
รูปที่ 1 กรองสถาปัตยกรรมปลั๊กอิน
อินเทอร์เฟซปลั๊กอินตัวกรอง
อินเทอร์เฟซ FilterPlugin.h
กำหนด API ต่อไปนี้เพื่อแสดงตัวกรอง
std::shared_ptr<C2ComponentStore>getComponentStore()
แสดงผลออบเจ็กต์
C2ComponentStore
ที่มีตัวกรอง ซึ่งแยกจากสิ่งที่การใช้งาน Codec 2.0 ของผู้ให้บริการแสดง โดยปกติแล้ว ที่จัดเก็บนี้จะมีเฉพาะตัวกรองที่ใช้โดยคลาสFilterWrapper
เท่านั้นbool describe(C2String name, Descriptor *desc)
อธิบายตัวกรองนอกเหนือจากตัวกรองที่มีจาก
C2ComponentStore
คำอธิบายมีคำจำกัดความดังต่อไปนี้controlParam
: พารามิเตอร์ที่ควบคุมลักษณะการทำงานของตัวกรอง ตัวอย่างเช่น พารามิเตอร์การควบคุมคือฟังก์ชันการโอนเป้าหมายสำหรับ HDR เป็น SDRaffectedParams
: พารามิเตอร์ที่ได้รับผลกระทบจากการดำเนินการกรอง ตัวอย่างเช่น สำหรับเครื่องมือแมปโทนสี HDR เป็น SDR พารามิเตอร์ที่ได้รับผลกระทบคือด้านของสี
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)
แสดงผลเป็น
true
หากคอมโพเนนต์ตัวกรองแก้ไขบัฟเฟอร์ ตัวอย่างเช่น ตัวกรองการแมปโทนจะแสดงผลtrue
หากฟังก์ชันการโอนเป้าหมายเป็น SDR และฟังก์ชันการโอนอินพุตเป็น HDR (HLG หรือ PQ)
รายละเอียด FilterWrapper
ส่วนนี้จะอธิบายรายละเอียดของชั้นเรียน FilterWrapper
การสร้างวิดีโอ
คอมโพเนนต์ที่รวมจะสร้างอินสแตนซ์ของโปรแกรมถอดรหัสพื้นฐานและตัวกรองที่กําหนดไว้ทั้งหมดเมื่อสร้าง
การค้นหาและการกําหนดค่า
คอมโพเนนต์ที่ผูกไว้จะแยกพารามิเตอร์ขาเข้าออกจากคำค้นหาหรือคำขอการกำหนดค่าตามคำอธิบายตัวกรอง ตัวอย่างเช่น การกำหนดค่าพารามิเตอร์การควบคุมตัวกรองจะส่งไปยังตัวกรองที่เกี่ยวข้อง และพารามิเตอร์ที่ได้รับผลกระทบจากตัวกรองจะแสดงในการค้นหา (แทนที่จะอ่านจากตัวถอดรหัสซึ่งมีพารามิเตอร์ที่ไม่ได้รับผลกระทบ)
รูปที่ 2 การค้นหาและการกำหนดค่า
เริ่ม
เมื่อเริ่มต้น คอมโพเนนต์ที่รวมไว้จะเริ่มตัวถอดรหัสและตัวกรองทั้งหมดที่เปลี่ยนแปลงบัฟเฟอร์ หากไม่ได้เปิดใช้ตัวกรอง ส่วนประกอบที่รวมไว้จะเริ่มต้นโปรแกรมถอดรหัสและบัฟเฟอร์การส่งผ่าน และส่งคําสั่งไปยังโปรแกรมถอดรหัส
การจัดการบัฟเฟอร์
รูปที่ 3 การจัดการบัฟเฟอร์
บัฟเฟอร์ที่อยู่ในคิวตัวถอดรหัสที่ปกปิดไว้จะไปยังตัวถอดรหัสที่เกี่ยวข้อง คอมโพเนนต์ที่รวมไว้จะรับบัฟเฟอร์เอาต์พุตจากโปรแกรมถอดรหัสผ่านonWorkDone_nb()
callback แล้วจัดคิวไปยังตัวกรอง ระบบจะรายงานบัฟเฟอร์เอาต์พุตสุดท้ายจากตัวกรองสุดท้ายไปยังไคลเอ็นต์
เพื่อให้การจัดการบัฟเฟอร์นี้ทำงานได้ คอมโพเนนต์ที่รวมต้องกำหนดค่า C2PortBlockPoolsTuning
เป็นฟิลเตอร์สุดท้ายเพื่อให้เฟรมเวิร์กเอาต์พุตบัฟเฟอร์จากพูลบล็อกที่คาดไว้
หยุด รีเซ็ต และปล่อย
เมื่อหยุดดำเนินการ คอมโพเนนต์ที่รวมไว้จะหยุดตัวถอดรหัสและตัวกรองที่เปิดใช้ทั้งหมดซึ่งเริ่มทำงานแล้ว เมื่อรีเซ็ตและเผยแพร่ ระบบจะรีเซ็ตหรือเผยแพร่คอมโพเนนต์ทั้งหมดไม่ว่าจะเปิดใช้งานหรือไม่ก็ตาม
ใช้งานปลั๊กอินตัวกรองตัวอย่าง
หากต้องการเปิดใช้ปลั๊กอิน ให้ทําดังนี้
- ใช้อินเทอร์เฟซ
FilterPlugin
ในคลังแล้ววางไว้ที่/vendor/lib[64]/libc2filterplugin.so.
- เพิ่มสิทธิ์ให้กับ
mediacodec.te
หากจำเป็น - อัปเดตเลเยอร์การปรับเปลี่ยนเป็น Android 12 และสร้างบริการ
media.c2
ขึ้นมาใหม่
ทดสอบปลั๊กอิน
หากต้องการทดสอบปลั๊กอินตัวอย่าง ให้ทําดังนี้
- สร้างใหม่และแฟลชอุปกรณ์
สร้างปลั๊กอินตัวอย่างโดยใช้คำสั่งต่อไปนี้
m sample-codec2-filter-plugin
ติดตั้งอุปกรณ์อีกครั้งและเปลี่ยนชื่อปลั๊กอินของผู้ให้บริการเพื่อให้บริการโค้ดค็อกรับทราบ
adb root adb remount adb reboot adb wait-for-device adb root adb remount adb push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \ /vendor/lib64/libc2filterplugin.so adb push /out/target/<...>/lib/sample-codec2-filter-plugin.so \ /vendor/lib/libc2filterplugin.so adb reboot