Android 10 ขึ้นไปมีคอมโพเนนต์สื่อหลายรายการที่อัปเดตได้ ซึ่งช่วยให้อัปเดตคอมโพเนนต์เฟรมเวิร์กผ่านโครงสร้างพื้นฐานของ Google Play Store หรือผ่านกลไกการอัปเดตผ่านอากาศ (OTA) ที่พาร์ทเนอร์จัดหาให้ คอมโพเนนต์สื่อ จะรวมอยู่ในโมดูลที่ช่วยให้สามารถมอบการอัปเดตด้านความปลอดภัย และการอัปเดตฟีเจอร์ได้โดยไม่ต้องอัปเดตรูปภาพระบบทั้งหมด
คอมโพเนนต์สื่อที่อัปเดตได้อยู่ในโมดูลต่อไปนี้
สื่อ โมดูลนี้มีตัวแยกสื่อ
MediaSession2
API และMediaParser
APIตัวแปลงสัญญาณสื่อ โมดูลนี้มีคอมโพเนนต์ซอฟต์แวร์ Codec2 ที่อัปเดตได้
MediaProvider โมดูลนี้ จะเพิ่มประสิทธิภาพข้อมูลเมตาที่จัดทำดัชนี (เสียง วิดีโอ และรูปภาพจากการ์ด SD และอุปกรณ์ USB ) และทำให้ข้อมูลดังกล่าวพร้อมใช้งานในแอปผ่าน API สาธารณะของ MediaStore
ดูรายละเอียดเกี่ยวกับการเพิ่มตัวแยกและตัวถอดรหัสที่กำหนดเองได้ที่การปรับแต่งคอมโพเนนต์สื่อ
เครื่องมือดึงข้อมูลสื่อ
ใน 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 |
ไม่มีการจัดแนว |
วิธีลบล้างพารามิเตอร์
ลงทะเบียน
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
) และโมดูลตัวแปลงรหัสสื่อ
(com.android.media.swcodec
) อยู่ในรูปแบบ APEX
คอมโพเนนต์สื่อที่รวมไว้จะใช้เฉพาะ NDK API
การอัปเดต
ในระหว่างการอัปเดต คอมโพเนนต์เฟรมเวิร์กในอุปกรณ์จะโหลดแพ็กเกจ APEX ที่มีโค้ด Java และโค้ดเนทีฟ
รูปที่ 1 ขั้นตอนการอัปเดตคอมโพเนนต์สื่อ
หลังจากที่เฟรมเวิร์กติดตั้งแพ็กเกจ APEX แล้ว อุปกรณ์จะรีบูตและติดตั้งอิมเมจดิสก์ รวมถึงกระบวนการระบบสื่อ (media.extractor
และ media.codec
) จะโหลดโมดูลที่อัปเดตจากจุดติดตั้ง