การแปลงสื่อเป็นรูปแบบที่เข้ากันได้

การแปลงรหัสสื่อที่เข้ากันได้ซึ่งเปิดตัวใน 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

ภาพรวมสถาปัตยกรรม

ส่วนนี้จะอธิบายสถาปัตยกรรมของฟีเจอร์การแปลงรหัสสื่อ

media-transcoding-architecture

รูปที่ 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 ที่เกี่ยวข้องกับการแปลงสื่อเป็นรูปแบบที่เข้ากันได้

การเข้ารหัส 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 เป็นตัวกรองสุดท้ายเพื่อให้บัฟเฟอร์เอาต์พุตของเฟรมเวิร์ก มาจากกลุ่มบล็อกที่คาดไว้

หยุด รีเซ็ต และปล่อย

เมื่อหยุดทำงาน คอมโพเนนต์ที่ห่อหุ้มจะหยุดตัวถอดรหัสและตัวกรองที่เปิดใช้ทั้งหมดซึ่ง เริ่มทำงาน เมื่อรีเซ็ตและเผยแพร่ คอมโพเนนต์ทั้งหมดจะได้รับการรีเซ็ตหรือเผยแพร่ ไม่ว่าจะเปิดใช้หรือไม่ก็ตาม

ติดตั้งใช้งานปลั๊กอินตัวกรองตัวอย่าง

หากต้องการเปิดใช้ปลั๊กอิน ให้ทำดังนี้

  1. ใช้ FilterPlugin อินเทอร์เฟซในไลบรารีและวางไว้ที่ /vendor/lib[64]/libc2filterplugin.so.
  2. เพิ่มสิทธิ์เพิ่มเติมให้กับ mediacodec.te หากจำเป็น
  3. อัปเดตเลเยอร์การดัดแปลงเป็น Android 12 และ สร้างmedia.c2บริการใหม่

ทดสอบปลั๊กอิน

หากต้องการทดสอบปลั๊กอินตัวอย่าง ให้ทำดังนี้

  1. สร้างใหม่และแฟลชอุปกรณ์
  2. สร้างปลั๊กอินตัวอย่างโดยใช้คำสั่งต่อไปนี้

    m sample-codec2-filter-plugin
    
  3. ติดตั้งอุปกรณ์ใหม่และเปลี่ยนชื่อปลั๊กอินของผู้ให้บริการเพื่อให้ บริการตัวแปลงรหัสรู้จัก

    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