ปรับแต่งคอมโพเนนต์สื่อ

คุณสามารถขยายเครื่องมือแยกสื่อและคอมโพเนนต์ตัวแปลงรหัสสื่อได้โดยใช้ผู้ให้บริการ ส่วนขยาย MediaSession2 และ MediaParser API ไม่สามารถปรับแต่งได้ (แต่คุณ สามารถอัปสตรีมการเปลี่ยนแปลงสำหรับ MediaPlayer และ MediaSession API เดิมได้)

หากต้องการรองรับสื่อประเภทอื่นๆ ในเฟรมเวิร์กสื่อของ Android คุณต้องทำดังนี้ สร้างเครื่องมือแตกข้อมูลและตัวถอดรหัสที่กำหนดเอง ตัวอย่างเช่น ถ้าต้องการเพิ่มการสนับสนุนวิดีโอ Windows Media ในไฟล์ AVI คุณต้องสร้าง AVI Extractor และตัวถอดรหัสวิดีโอของ Windows Media

เกี่ยวกับส่วนขยาย

หากเครื่องมือแยกสื่อเริ่มต้นไม่เป็นไปตามข้อกำหนด คุณสามารถวาง ปลั๊กอินเครื่องมือแยกข้อมูลที่กำหนดเองใน /system/lib[64]/extractors/ กระบวนการแยกข้อมูล โหลดปลั๊กอินสำหรับดึงข้อมูลจากแพ็กเกจ APEX ที่ Google จัดเตรียมไว้ให้โดยอัตโนมัติ จาก /system/lib[64]/extractors/

ในทำนองเดียวกัน คุณสามารถตั้งค่าบริการตัวแปลงรหัสสื่อแบบกำหนดเองที่ใช้ตัวแปลงรหัส 2.0 อินเทอร์เฟซที่กำหนดไว้ใน frameworks/av/media/codec2/core/ สำหรับข้อมูลเบื้องต้น การนำไปใช้ โปรดดู frameworks/av/media/codec2/hidl/services/ จุดแรกเข้าของไลบรารีคืออินเทอร์เฟซ C2ComponentStore ตัวอย่างเช่น โปรดอ้างอิง การตั้งค่าเริ่มต้นของที่จัดเก็บตัวแปลงรหัสซอฟต์แวร์ที่ frameworks/av/media/codec2/vndk/C2Store.cpp

เมื่อใช้ APEX ของคุณเอง ให้จัดโครงสร้างบริการตัวแปลงรหัสและโหลดไฟล์ APEX โดยใช้กระบวนการเดียวกับบริการ mediaswcodec วิธีการคือ ให้กำหนด ไลบรารีที่ใช้ร่วมกันระดับบนสุดซึ่งมีหน้าที่ลงทะเบียนคอมโพเนนต์ C2 ทั้งหมด จากนั้น สร้างแพ็กเกจ APEX (พร้อมทรัพยากร Dependency แบบทรานซิทีฟ) ที่อยู่ในผู้ให้บริการ พาร์ติชัน เมื่อกระบวนการของบริการตัวแปลงรหัสของผู้ให้บริการเริ่มขึ้น ก็จะโหลดโค้ดนี้ได้ จุดแรกเข้าระดับบนสุด

สร้างเครื่องมือแยกข้อมูล

เมื่อเพิ่มเครื่องมือแยกสำหรับรูปแบบใหม่ เครื่องมือแยกข้อมูลจะขึ้นอยู่กับว่า NDK API ที่เสถียรและไม่ต้องอาศัย API ส่วนตัวใดๆ เครื่องมือแยกข้อมูลควร ใช้ API ที่กำหนดโดย frameworks/av/include/media/MediaExtractorPluginApi.h และสามารถใช้ C++ ซองใส่สะดวกสำหรับ frameworks/av/include/media/MediaExtractorPluginHelper.h เนื่องจาก Android 10 ขึ้นไปจะรองรับเฉพาะ เวอร์ชันสูงสุด API ตัวแยกข้อมูล โปรดสร้างโมเดลเครื่องมือแยกข้อมูลหลังเครื่องมือแยกข้อมูลด้วย หมายเลขเวอร์ชัน API สูงสุด

วางเครื่องมือแยกข้อมูลที่กำหนดเองใน /system/lib/64/extractors หรือ APEX ของผู้ให้บริการ ซึ่งเปิดพร้อมกับ Google APEX ที่มีเครื่องมือแยกข้อมูลของ Google ถึง ตรวจสอบว่าเฟรมเวิร์กที่โหลดเครื่องมือแยกข้อมูลของคุณแล้วเรียกใช้คำสั่งต่อไปนี้

adb shell dumpsys media.extractor

คุณควรเห็นรายการเครื่องมือแยกข้อมูลที่ใช้ได้ซึ่งคล้ายกับรายการด้านล่างนี้

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

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

เมื่อเฟรมเวิร์กสื่อโหลดเครื่องมือแยก (จาก /system/lib/64/extractors) หรือจากผู้ให้บริการ APEX) ก็จะจำไฟล์ดังกล่าวได้และได้รับข้อมูลเกี่ยวกับ เนื้อหา ขั้นตอนถัดไปคือการเพิ่มตัวถอดรหัสสำหรับรูปแบบเพื่อให้เฟรมเวิร์กสามารถ เข้าใจวิธีแยกวิเคราะห์เนื้อหาของไฟล์

สร้างตัวถอดรหัสที่กำหนดเอง

คุณต้องใช้ตัวถอดรหัสที่กำหนดเองสำหรับรูปแบบที่ ตัวถอดรหัสที่ Google มีให้ เช่น

  • หากต้องการเพิ่มการรองรับเฟรมเวิร์กสื่อสำหรับไฟล์ AVI ที่มี MP3 คุณต้องมี AVI แต่ไม่จำเป็นต้องใช้ตัวถอดรหัส MP3 เนื่องจากมีอยู่แล้ว

  • หากต้องการเพิ่มการสนับสนุนเฟรมเวิร์กสื่อสำหรับไฟล์ AVI ที่มี Windows Media คุณต้อง จำเป็นต้องใช้ทั้งเครื่องมือแยก AVI และตัวถอดรหัสของ Windows Media

การเพิ่มตัวถอดรหัสใหม่จะคล้ายกับการเพิ่มตัวถอดรหัสฮาร์ดแวร์สำหรับ AVC หรือ HEVC

ขณะที่เครื่องมือแยกข้อมูลเผยแพร่ประเภท MIME ของสื่อแทร็กที่เครื่องมือแยกข้อมูล ที่มีอยู่ ตัวแปลงรหัสที่สนับสนุนประเภท MIME เหล่านี้จะต้องแสดง ไฟล์จะได้รับการสนับสนุนอย่างสมบูรณ์ สตริงประเภท MIME จริงที่ใช้คือ ความสอดคล้องระหว่างเครื่องมือแยกและตัวแปลงรหัส (สตริงไม่จำเป็นต้องเป็น เพิ่มลงในไฟล์ MediaDefs.h แล้ว)

ผสานรวมกับเครื่องมือสแกนสื่อ

เครื่องมือสแกนสื่อจะค้นหาไฟล์ประเภทใหม่และเพิ่มลงในฐานข้อมูลสื่อ หากต้องการให้เครื่องสแกนสื่อจัดการประเภทไฟล์ที่กำหนดเอง เครื่องมือสแกนต้อง เกี่ยวกับเรื่องนี้ ใน Android 10 ขึ้นไป MimeUtils (ใน libcore) จะรักษาการแมป MIME เป็นส่วนขยาย ก่อนหน้านี้การแมปนี้คือ ในไฟล์ MediaFile.java ซึ่งยังคงมีการแมปจาก ประเภท MIME เป็นค่าคงที่ของรูปแบบ MTP

เครื่องมือแยกข้อมูลสามารถส่งออกรายการนามสกุลไฟล์ที่ระบบรองรับ (เช่น MP3 หรือ MP4) อย่างไรก็ตาม มีเพียง LegacyMediaScanner เท่านั้นที่ใช้ข้อมูลดังกล่าว จะไม่มีผลต่อ ModernMediaScanner ซึ่งใช้โดยค่าเริ่มต้น