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