Android 10 หรือสูงกว่าประกอบด้วยองค์ประกอบสื่อที่อัปเดตได้หลายรายการ ซึ่งช่วยให้สามารถอัปเดตส่วนประกอบของเฟรมเวิร์กผ่านโครงสร้างพื้นฐานของ Google Play Store หรือผ่านกลไก over-the-air (OTA) ที่พันธมิตรจัดหาให้ ส่วนประกอบสื่อถูกรวมเข้าด้วยกันเป็นโมดูลที่ช่วยให้สามารถอัปเดตความปลอดภัยและอัปเดตคุณสมบัติได้โดยไม่ต้องอัปเดตอิมเมจระบบแบบเต็ม
ส่วนประกอบสื่อที่สามารถอัพเดตได้มีอยู่ในโมดูลต่อไปนี้
สื่อ. โมดูลนี้ประกอบด้วย ตัวแยกสื่อ ,
MediaSession2
API และMediaParser
APIตัวแปลงสัญญาณมีเดีย โมดูลนี้ประกอบด้วยส่วนประกอบ Codec2 ของซอฟต์แวร์ที่สามารถอัพเดตได้
มีเดียโพรไวเดอร์ โมดูลนี้จะเพิ่มประสิทธิภาพข้อมูลเมตาที่จัดทำดัชนีแล้ว (เสียง วิดีโอ และรูปภาพจากการ์ด SD และอุปกรณ์ USB) และทำให้ข้อมูลดังกล่าวพร้อมใช้งานสำหรับแอปต่างๆ ผ่าน ทาง API สาธารณะของ MediaStore
สำหรับรายละเอียดเกี่ยวกับการเพิ่มตัวแยกและตัวถอดรหัสแบบกำหนดเอง โปรดดูที่ การปรับแต่งส่วนประกอบสื่อ
เครื่องแยกสื่อ
ใน 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 | ไม่มีการจัดตำแหน่ง |
หากต้องการแทนที่พารามิเตอร์:
ลงทะเบียนบริการเริ่มต้น
android.hardware.media.c2
และระบุพารามิเตอร์การใช้งาน ION ที่กำหนดเองหากต้องการสร้างบริการใหม่ ให้คัดลอกไฟล์ frameworks/av/media/codec2/hidl/services/vendor.cpp ไปยังที่เก็บของคุณ จากนั้นแก้ไข
StoreImpl::Interface::SetIonUsage()
ตามต้องการหากต้องการใช้กระบวนการ (OMX)
media.codec
ซ้ำ ให้คัดลอกและลงทะเบียนคลาสStoreImpl
จาก frameworks/av/media/codec2/hidl/services/vendor.cpp ไปยังไฟล์mediacodec
ที่มีอยู่ ( frameworks/av/services/mediacodec/main_codecservice.cpp ).
เพิ่มโค้ดต่อไปนี้ลงในอุปกรณ์
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
) โหลดโมดูลที่อัพเดตจากจุดเมานท์