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

คุณสามารถขยายคอมโพเนนต์โปรแกรมแยกสื่อและโปรแกรมเปลี่ยนรหัสสื่อได้โดยใช้ส่วนขยายของผู้ให้บริการ 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++ Wrapper ที่สะดวกใน 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 ซึ่งระบบจะใช้โดยค่าเริ่มต้น