โมดูลสื่อ

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

ส่วนประกอบสื่อที่สามารถอัพเดตได้มีอยู่ในโมดูลต่อไปนี้

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

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

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

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

MediaSession2 API

MediaSession2 API ช่วยให้แอปสื่อเปิดเผยการควบคุมการขนส่งและข้อมูลการเล่นไปยังกระบวนการอื่นๆ เช่น เฟรมเวิร์ก 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/

ตัวแปลงสัญญาณสื่อ

โมดูล Media Codecs ประกอบด้วยส่วนประกอบซอฟต์แวร์ Codec2 ที่อัพเดตได้ การรองรับการปรับแต่งจะแตกต่างกันไปในแต่ละรุ่น:

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

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

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

ใน Android 11 ขึ้นไปและ การอัปเดตระบบ Google Play เวอร์ชัน 292100200 ขึ้นไป คุณสามารถปรับแต่งพารามิเตอร์ต่อไปนี้สำหรับการจัดสรรหน่วยความจำ 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 ) และโมดูล Media Codec ( com.android.media.swcodec ) อยู่ในรูปแบบ APEX ส่วนประกอบสื่อที่รวมไว้นั้นอาศัย NDK API เท่านั้น

อัพเดท

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

อัพเดทสื่อ

รูปที่ 1. โฟลว์การอัพเดตคอมโพเนนต์สื่อ

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