การแปลงรหัสสื่อที่เข้ากันได้ซึ่งเปิดตัวใน Android 12 เป็นฟีเจอร์ที่ช่วยให้อุปกรณ์ใช้รูปแบบสื่อที่ทันสมัยและประหยัดพื้นที่เก็บข้อมูลมากขึ้น สำหรับการจับภาพวิดีโอ เช่น HEVC ในขณะที่ยังคงความเข้ากันได้กับ แอป ฟีเจอร์นี้ช่วยให้ผู้ผลิตอุปกรณ์ใช้ HEVC แทน AVC เป็นค่าเริ่มต้นเพื่อปรับปรุงคุณภาพวิดีโอพร้อมทั้งลดข้อกำหนดด้านพื้นที่เก็บข้อมูลและแบนด์วิดท์ได้ สำหรับอุปกรณ์ที่เปิดใช้การแปลงรหัสสื่อที่เข้ากันได้ Android จะ แปลงวิดีโอ (ความยาวไม่เกิน 1 นาที) ที่บันทึกใน รูปแบบต่างๆ เช่น HEVC หรือ HDR โดยอัตโนมัติเมื่อ แอปที่ไม่รองรับรูปแบบดังกล่าวเปิดวิดีโอ ซึ่งจะช่วยให้แอปทำงานได้แม้ว่าจะมีการบันทึกวิดีโอในรูปแบบใหม่กว่าบนอุปกรณ์ก็ตาม
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้จะปิดอยู่โดยค่าเริ่มต้น หากต้องการขอการแปลงรหัสสื่อ แอปต้องประกาศความสามารถด้านสื่อของตน ดูข้อมูลเพิ่มเติมเกี่ยวกับ การประกาศความสามารถของสื่อได้ที่ การแปลงรหัสสื่อที่เข้ากันได้ ในเว็บไซต์ของนักพัฒนาแอป Android
วิธีการทำงาน
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้ประกอบด้วย 2 ส่วนหลักๆ ดังนี้
- บริการการแปลงรหัสในเฟรมเวิร์กสื่อ: บริการเหล่านี้ แปลงไฟล์จากรูปแบบหนึ่งไปยังอีกรูปแบบหนึ่งโดยใช้ฮาร์ดแวร์เพื่อการแปลงที่มีเวลาในการตอบสนองต่ำและ มีคุณภาพสูง ซึ่งรวมถึง Transcoding API, บริการการแปลงรหัส, ปลั๊กอิน OEM สำหรับตัวกรองที่กำหนดเอง และฮาร์ดแวร์ ดูรายละเอียดเพิ่มเติมได้ที่ภาพรวมสถาปัตยกรรม
- ฟีเจอร์การแปลงรหัสสื่อที่เข้ากันได้ในผู้ให้บริการสื่อ: คอมโพเนนต์นี้ที่พบในผู้ให้บริการสื่อจะสกัดกั้นแอปที่เข้าถึงไฟล์สื่อ และแสดงไฟล์ต้นฉบับหรือไฟล์ที่แปลงรหัสแล้วตามความสามารถที่แอปประกาศไว้ หากแอปนั้นรองรับรูปแบบไฟล์สื่อ ก็ไม่จำเป็นต้องดำเนินการใดๆ เป็นพิเศษ หากแอปไม่รองรับรูปแบบดังกล่าว เฟรมเวิร์กจะแปลงไฟล์เป็นรูปแบบที่เก่ากว่า เช่น AVC เมื่อแอป เข้าถึงไฟล์
รูปที่ 1 แสดงภาพรวมของกระบวนการแปลงรหัสสื่อ
รูปที่ 1 ภาพรวมของการแปลงสื่อเป็นรูปแบบที่เข้ากันได้
รูปแบบที่รองรับ
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้รองรับการแปลงรูปแบบต่อไปนี้
- HEVC (8 บิต) เป็น AVC: การแปลงตัวแปลงรหัสจะดำเนินการผ่านการเชื่อมต่อตัวถอดรหัส mediacodec และตัวเข้ารหัส mediacodec
- HDR10+ (10 บิต) เป็น AVC (SDR): การแปลง HDR เป็น SDR จะดำเนินการ โดยใช้อินสแตนซ์ของ MediaCodec และปลั๊กอินของผู้ให้บริการที่เชื่อมต่อกับอินสแตนซ์ของตัวถอดรหัส ดูข้อมูลเพิ่มเติมได้ที่การเข้ารหัส HDR เป็น SDR
แหล่งที่มาของเนื้อหาที่รองรับ
ฟีเจอร์การแปลงรหัสสื่อที่รองรับจะใช้ได้กับสื่อในอุปกรณ์ที่สร้างโดยแอปกล้อง OEM ดั้งเดิมซึ่งจัดเก็บไว้ในโฟลเดอร์ DCIM/Camera/
ใน
วอลุ่มภายนอกหลัก ฟีเจอร์นี้ไม่รองรับสื่อในที่เก็บข้อมูลรอง
ระบบไม่รองรับเนื้อหาที่ส่งไปยังอุปกรณ์ผ่านอีเมลหรือการ์ด SD
แอปจะเข้าถึงไฟล์ตามเส้นทางไฟล์ต่างๆ ต่อไปนี้คือคำอธิบาย เส้นทางไฟล์ที่เปิดใช้หรือข้ามการแปลงรหัส
เปิดใช้การแปลงแล้ว
- การเข้าถึงแอปผ่าน MediaStore API
- การเข้าถึงแอปผ่าน API เส้นทางไฟล์โดยตรง รวมถึงโค้ด Java และโค้ดเนทีฟ
- การเข้าถึงแอปผ่าน Storage Access Framework (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 สถาปัตยกรรมการแปลงสื่อ
สถาปัตยกรรมการแปลงสื่อประกอบด้วยคอมโพเนนต์ต่อไปนี้
- API ของระบบ MediaTranscodingManager: อินเทอร์เฟซที่ช่วยให้ไคลเอ็นต์สื่อสารกับบริการ MediaTranscoding ได้ โมดูล MediaProvider ใช้ API นี้
- MediaTranscodingService: บริการดั้งเดิมที่จัดการการเชื่อมต่อไคลเอ็นต์
กำหนดเวลาคำขอการแปลงรหัส และจัดการการทำบัญชีสำหรับ
TranscodingSessions
- MediaTranscoder: ไลบรารีแบบเนทีฟที่ทำการแปลงรหัส ไลบรารีนี้สร้างขึ้นบน NDK ของเฟรมเวิร์กสื่อเพื่อให้เข้ากันได้กับโมดูล
ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้จะบันทึกเมตริกการแปลงในทั้ง บริการและตัวแปลงสื่อ โค้ดฝั่งไคลเอ็นต์และฝั่งบริการอยู่ ในโมดูล MediaProvider เพื่อให้แก้ไขข้อบกพร่องและอัปเดตได้ทันท่วงที
การเข้าถึงไฟล์
การแปลงรหัสสื่อที่เข้ากันได้สร้างขึ้นบนระบบไฟล์ Filesystem in Userspace (FUSE) ซึ่งใช้สำหรับพื้นที่เก็บข้อมูลที่จำกัดขอบเขต FUSE ช่วยให้โมดูล MediaProvider สามารถ ตรวจสอบการดำเนินการกับไฟล์ในพื้นที่ของผู้ใช้และควบคุมการเข้าถึงไฟล์ตาม นโยบายเพื่ออนุญาต ปฏิเสธ หรือปกปิดข้อมูลการเข้าถึง
เมื่อแอปพยายามเข้าถึงไฟล์ Daemon FUSE จะสกัดกั้นการเข้าถึงการอ่านไฟล์ จากแอป หากแอปนั้นรองรับรูปแบบที่ใหม่กว่า (เช่น HEVC) ระบบจะส่งคืน ไฟล์ต้นฉบับ หากแอปไม่รองรับรูปแบบดังกล่าว ระบบจะแปลงรหัสไฟล์เป็นรูปแบบที่เก่ากว่า (เช่น AVC) หรือจะแสดงไฟล์จากแคชหากมีไฟล์เวอร์ชันที่แปลงรหัสแล้ว
ขอไฟล์ที่แปลงรหัส
ระบบจะปิดใช้ฟีเจอร์การแปลงสื่อเป็นรูปแบบที่เข้ากันได้โดยค่าเริ่มต้น แอปสามารถ ขอเนื้อหาที่แปลงรหัสแล้วได้โดยใช้ตัวเลือกต่อไปนี้
- ประกาศรูปแบบที่ไม่รองรับในไฟล์ Manifest โปรดดูรายละเอียดที่ ประกาศความสามารถในทรัพยากร และ ประกาศความสามารถในโค้ด
- ปิดใช้รูปแบบที่รองรับด้วยเฟรมเวิร์กความเข้ากันได้ของแอปที่รัน ไทม์ (ผู้ใช้ยังปิดใช้การตั้งค่านี้สำหรับแต่ละแอปในการตั้งค่าได้ด้วย)
- เปิดไฟล์ด้วย
MediaStore
ขณะที่ระบุรูปแบบที่ไม่รองรับอย่างชัดเจนด้วยopenTypedAssetFileDescriptor
API
สำหรับการโอนผ่าน USB (อุปกรณ์ไปยังพีซี) ระบบจะปิดใช้การแปลงรหัสโดยค่าเริ่มต้น แต่ผู้ใช้ สามารถเลือกเปิดใช้การแปลงรหัสได้โดยใช้ปุ่มเปิด/ปิดแปลงวิดีโอเป็น 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 Shell ต่อไปนี้เพื่อตรวจสอบสถานะการแปลงรหัส รวมถึงเซสชันการแปลงรหัสปัจจุบันและที่ผ่านมา
adb shell dumpsys media.transcoding
ขยายข้อจำกัดความยาววิดีโอ
คุณขยายข้อจำกัดความยาววิดีโอ 1 นาทีสำหรับการแปลงรหัสได้โดยใช้คำสั่งต่อไปนี้เพื่อวัตถุประสงค์ในการทดสอบ คุณอาจต้องรีบูตหลังจาก เรียกใช้คำสั่งนี้
adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>
แหล่งที่มาและการอ้างอิงของ AOSP
ต่อไปนี้คือซอร์สโค้ด AOSP ที่เกี่ยวข้องกับการแปลงสื่อเป็นรูปแบบที่เข้ากันได้
API ระบบการแปลงรหัส (ใช้โดย MediaProvider เท่านั้น)
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 ผู้ผลิตอุปกรณ์สามารถใช้ปลั๊กอินตัวอย่าง AOSP
Codec 2.0 filter ที่อยู่ใน
/platform/frameworks/av/media/codec2/hidl/plugin/
ส่วนนี้จะอธิบายวิธีการทำงานของปลั๊กอินตัวกรอง วิธีติดตั้งใช้งานปลั๊กอิน
และวิธีทดสอบปลั๊กอิน
หากอุปกรณ์ไม่มีปลั๊กอินที่รองรับการเข้ารหัส HDR เป็น SDR แอปที่เข้าถึงวิดีโอ HDR จะได้รับตัวอธิบายไฟล์ต้นฉบับไม่ว่าความสามารถด้านสื่อของแอปจะประกาศไว้ใน Manifest อย่างไรก็ตาม
วิธีการทำงาน
ส่วนนี้จะอธิบายลักษณะการทำงานทั่วไปของปลั๊กอินตัวกรอง Codec 2.0
ฉากหลัง
Android มีการติดตั้งเลเยอร์การปรับตัวระหว่างอินเทอร์เฟซ Codec 2.0
กับอินเทอร์เฟซ HAL ที่ android.hardware.media.c2
android::hardware::media::c2
สำหรับปลั๊กอินตัวกรอง AOSP มีกลไก Wrapper
ที่รวมตัวถอดรหัสเข้ากับปลั๊กอินตัวกรอง
MediaCodec
จะจดจำคอมโพเนนต์ที่ห่อหุ้มเหล่านี้เป็นตัวถอดรหัสที่มีฟีเจอร์การกรอง
ภาพรวม
คลาส FilterWrapper
จะใช้ตัวแปลงรหัสของผู้ให้บริการและส่งคืนตัวแปลงรหัสที่ห่อหุ้มแล้วไปยังmedia.c2
เลเยอร์การดัดแปลง FilterWrapper
คลาสจะโหลดlibc2filterplugin.so
ผ่าน FilterWrapper::Plugin
API และ
บันทึกตัวกรองที่มีจากปลั๊กอิน เมื่อสร้างแล้ว FilterWrapper
จะสร้างอินสแตนซ์ของตัวกรองที่มีทั้งหมด เฉพาะตัวกรองที่แก้ไขบัฟเฟอร์เท่านั้นที่จะ
เริ่มต้นเมื่อเริ่ม
รูปที่ 4 สถาปัตยกรรมปลั๊กอินตัวกรอง
อินเทอร์เฟซปลั๊กอินตัวกรอง
อินเทอร์เฟซ
FilterPlugin.h
กำหนด API ต่อไปนี้เพื่อแสดงตัวกรอง
std::shared_ptr<C2ComponentStore>getComponentStore()
แสดงผล
C2ComponentStore
ออบเจ็กต์ที่มีตัวกรอง ซึ่งแยกจาก สิ่งที่การใช้งาน Codec 2.0 ของผู้ให้บริการแสดง โดยปกติแล้ว ที่เก็บนี้จะมีเฉพาะตัวกรองที่ใช้โดยคลาสFilterWrapper
bool describe(C2String name, Descriptor *desc)
อธิบายตัวกรองนอกเหนือจากตัวกรองที่มีให้ใช้งานจาก
C2ComponentStore
คำอธิบายต่อไปนี้ได้รับการกำหนดไว้controlParam
: พารามิเตอร์ที่ควบคุมลักษณะการทำงานของตัวกรอง ตัวอย่างเช่น สำหรับการแปลง HDR เป็น SDR ตัวควบคุมพารามิเตอร์คือ ฟังก์ชันการโอนเป้าหมายaffectedParams
: พารามิเตอร์ที่ได้รับผลกระทบจากการกรอง ตัวอย่างเช่น สำหรับการแมปโทน HDR เป็น SDR พารามิเตอร์ที่ได้รับผลกระทบคือลักษณะสี
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)
แสดง
true
หากคอมโพเนนต์ตัวกรองแก้ไขบัฟเฟอร์ เช่น ฟิลเตอร์ การแมปโทนจะแสดงผลtrue
หากฟังก์ชันการโอนเป้าหมายเป็น SDR และฟังก์ชันการโอนอินพุตเป็น HDR (HLG หรือ PQ)
รายละเอียด FilterWrapper
ส่วนนี้จะอธิบายรายละเอียดของคลาส FilterWrapper
การสร้างวิดีโอ
คอมโพเนนต์ที่ห่อหุ้มจะสร้างอินสแตนซ์ของตัวถอดรหัสพื้นฐานและตัวกรองทั้งหมดที่กำหนดไว้เมื่อสร้าง
การค้นหาและการกำหนดค่า
คอมโพเนนต์ที่ห่อหุ้มจะแยกพารามิเตอร์ขาเข้าออกจากคำค้นหาหรือ คำขอการกำหนดค่าตามคำอธิบายตัวกรอง เช่น การกำหนดค่าพารามิเตอร์การควบคุมตัวกรองจะกำหนดเส้นทางไปยัง ตัวกรองที่เกี่ยวข้อง และพารามิเตอร์ที่ได้รับผลกระทบจากตัวกรองจะอยู่ในคําค้นหา (แทนที่จะอ่านจากตัวถอดรหัสที่มีพารามิเตอร์ที่ไม่ได้รับผลกระทบ)
รูปที่ 5 การค้นหาและการกำหนดค่า
เริ่ม
เมื่อเริ่มต้น คอมโพเนนต์ที่ห่อหุ้มจะเริ่มตัวถอดรหัสและตัวกรองทั้งหมดที่ แก้ไขบัฟเฟอร์ หากไม่ได้เปิดใช้ตัวกรอง คอมโพเนนต์ที่ห่อหุ้มจะเริ่มตัวถอดรหัสและบัฟเฟอร์ส่งผ่าน รวมถึงส่งคำสั่งไปยังตัวถอดรหัสเอง
การจัดการบัฟเฟอร์
รูปที่ 6 การจัดการบัฟเฟอร์
บัฟเฟอร์ที่จัดคิวไว้สำหรับตัวถอดรหัสที่ห่อหุ้มจะไปที่ตัวถอดรหัสพื้นฐาน คอมโพเนนต์ที่ห่อหุ้ม
จะดึงบัฟเฟอร์เอาต์พุตจากตัวถอดรหัสผ่านonWorkDone_nb()
การเรียกกลับ แล้วจัดคิวไปยังตัวกรอง ระบบจะรายงานบัฟเฟอร์เอาต์พุตสุดท้ายจาก
ตัวกรองสุดท้ายไปยังไคลเอ็นต์
การจัดการบัฟเฟอร์นี้จะทำงานได้เมื่อคอมโพเนนต์ที่ห่อหุ้มกำหนดค่า
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