โมดูลสื่อ

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

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

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

โปรแกรมแยกสื่อ

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

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

MediaSession2 API

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

MediaParser API

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

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java การใช้งาน API และเลเยอร์แบบบาง

  • 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 ไม่ได้ตั้งค่าแฟล็ก
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 คอมโพเนนต์สื่อที่รวมไว้จะใช้เฉพาะ API ของ NDK

อัปเดต

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

การอัปเดตสื่อ

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

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