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