โมดูลสื่อ

Android 10 ขึ้นไปมีคอมโพเนนต์สื่อที่อัปเดตได้หลายรายการ ซึ่งช่วยให้อัปเดตคอมโพเนนต์เฟรมเวิร์กผ่านโครงสร้างพื้นฐานของ Google Play Store หรือผ่านกลไกการอัปเดตผ่านอากาศ (OTA) ที่ได้จากพาร์ทเนอร์ คอมโพเนนต์สื่อจะจัดรวมเป็นโมดูลที่ให้คุณอัปเดตความปลอดภัยและการอัปเดตฟีเจอร์ได้โดยไม่ต้องอัปเดตอิมเมจระบบแบบเต็ม

คอมโพเนนต์สื่อที่อัปเดตได้มีอยู่ในโมดูลต่อไปนี้

โปรดดูรายละเอียดการเพิ่มเครื่องมือแยกและตัวถอดรหัสที่กำหนดเองที่หัวข้อการปรับแต่งคอมโพเนนต์สื่อ

เครื่องมือแยกสื่อ

ใน Android 9 และเวอร์ชันที่ต่ำกว่า ระบบจะคอมไพล์โปรแกรมแยกไฟล์เป็นไฟล์เดียว libstagefright.so ใน Android 10 ขึ้นไป ตัวแยกสื่อจะเป็นคอมโพเนนต์แยกต่างหาก เครื่องมือแยกแต่ละรายการจะมีไฟล์ .so ของตนเองที่มีจุดแรกเข้าซึ่งให้ฟังก์ชัน sniffer เพื่อระบุว่าเครื่องมือแยกสามารถจัดการไฟล์สื่อที่ระบุได้หรือไม่ และฟังก์ชัน factory ที่สร้างอินสแตนซ์ของเครื่องมือแยกสำหรับไฟล์สื่อที่ระบุ เครื่องมือแยกข้อมูลแต่ละตัวจะมีชื่อว่า (เพื่อช่วยในการแก้ไขข้อบกพร่อง) และมีเวอร์ชันเพื่อระบุว่าเครื่องมือแยกข้อมูลใดเป็นเวอร์ชันล่าสุด

เฟรมเวิร์กสื่อจะโหลดไฟล์เครื่องมือแยกข้อมูล .so ที่มีอยู่ทั้งหมดโดยอัตโนมัติ คุณจึงสร้างเครื่องมือแยกข้อมูลของคุณเองได้โดยเพิ่มไฟล์ .so ใหม่โดยไม่ต้องแก้ไข libstagefright หรือไลบรารีเฟรมเวิร์กสื่ออื่นๆ นอกจากนี้ คุณยังเลือกได้ว่าจะใช้เครื่องมือแยกข้อมูลที่กำหนดเองแทนเครื่องมือแยกข้อมูลที่ Google มีให้

API ของ MediaSession2

MediaSession2 API อนุญาตให้แอปสื่อเปิดเผยตัวควบคุมการรับส่งข้อมูลและข้อมูลการเล่นแก่กระบวนการอื่นๆ เช่น เฟรมเวิร์ก Android และแอปอื่นๆ ปรับแต่งคอมโพเนนต์นี้ไม่ได้

MediaParser API

MediaParser API ช่วยให้ ExoPlayer ใช้โปรแกรมแยกวิเคราะห์คอนเทนเนอร์สื่อของเฟรมเวิร์กได้อย่างมีประสิทธิภาพเพื่อดึงตัวอย่างสื่อจากคอนเทนเนอร์สื่อ MediaParser มีการเปลี่ยนแปลงต่อไปนี้ในขอบเขตซอร์สโค้ด

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java. การใช้งาน API และ Thin Layer

  • external/exoplayer/. แหล่งที่มาของ Exoplayer แบบข้อความทั้งหมดที่ใช้สร้าง MediaParser

คุณปรับแต่ง MediaParser API ไม่ได้ หากต้องการทดสอบ MediaParser ให้ใช้การทดสอบใน cts/tests/tests/mediaparser/

ตัวแปลงรหัสสื่อ

โมดูลตัวแปลงรหัสสื่อมีองค์ประกอบของซอฟต์แวร์ Codec2 ที่อัปเดตได้ การรองรับการปรับแต่งจะแตกต่างกันในแต่ละรุ่นดังนี้

  • ใน Android 11 ขึ้นไป (โดยเฉพาะการอัปเดตระบบ Google Play v292100200) คุณสามารถปรับแต่งพารามิเตอร์สำหรับการจัดสรรหน่วยความจำ ION ได้ (ดูรายละเอียดด้านล่าง)

  • ใน Android 9 หรือต่ำกว่า คุณจะอัปเดต OMX Codec API ไม่ได้ แต่ยังคงใช้ API ดังกล่าวได้ในพาร์ติชันของผู้ให้บริการ

การจัดสรรหน่วยความจำ ION

ใน Android 11 ขึ้นไปและการอัปเดตระบบ Google Play v292100200 ขึ้นไป คุณจะปรับแต่งพารามิเตอร์ต่อไปนี้สำหรับการจัดสรรหน่วยความจำ ION ได้

พารามิเตอร์ ค่าเริ่มต้น คำอธิบาย
heapMask 0xFFFFFFFF อนุญาตฮีปทุกประเภท
allocFlags 0 ไม่ได้ตั้งค่า Flag
minAlignment 0 ไม่มีการจัดแนว

วิธีลบล้างพารามิเตอร์

  1. ลงทะเบียนบริการ android.hardware.media.c2 เริ่มต้นและระบุพารามิเตอร์การใช้งาน ION ที่กำหนดเอง

  2. เพิ่มรหัสต่อไปนี้ลงในอุปกรณ์ manifest.xml

    <hal format="hidl">
        <name>android.hardware.media.c2</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IComponentStore</name>
            <instance>default</instance>
        </interface>
    </hal>
    

รูปแบบและการอ้างอิง

โมดูลสื่อ (com.android.media) และโมดูลตัวแปลงรหัสสื่อ (com.android.media.swcodec) อยู่ในรูปแบบ APEX คอมโพเนนต์สื่อที่รวมไว้จะใช้ NDK API เท่านั้น

การอัปเดต

ในระหว่างการอัปเดต คอมโพเนนต์เฟรมเวิร์กในอุปกรณ์จะโหลดแพ็กเกจ APEX ที่มีโค้ด Java และโค้ดเนทีฟ

ข้อมูลอัปเดตเกี่ยวกับสื่อ

รูปที่ 1 ขั้นตอนการอัปเดตคอมโพเนนต์สื่อ

หลังจากเฟรมเวิร์กติดตั้งแพ็กเกจ APEX แล้ว อุปกรณ์จะรีบูตและต่อเชื่อมรูปภาพดิสก์ รวมถึงกระบวนการของระบบสื่อ (media.extractor และ media.codec) จะโหลดข้อบังคับที่อัปเดตแล้วจากจุดต่อเชื่อม