โมดูลสื่อ

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

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

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

เครื่องมือดึงข้อมูลสื่อ

ใน Android 9 และเวอร์ชันเก่ากว่า ระบบจะคอมไพล์โปรแกรมแยกข้อมูลเป็นlibstagefright.soไฟล์เดียว ใน Android 10 ขึ้นไป ตัวแยกสื่อจะเป็นคอมโพเนนต์แยกต่างหาก โดยแต่ละตัวแยกจะมี.soไฟล์ ของตัวเองพร้อมด้วยจุดแรกเข้าที่ให้ฟังก์ชันดมกลิ่นเพื่อพิจารณาว่าตัวแยก สามารถจัดการไฟล์สื่อที่ระบุได้หรือไม่ และฟังก์ชัน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 คอมโพเนนต์สื่อที่รวมไว้จะใช้เฉพาะ NDK API

การอัปเดต

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

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

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

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