
Android มี Stagefright ซึ่งเป็นเครื่องมือเล่นสื่อในระดับเนทีฟที่มีตัวแปลงรหัสแบบซอฟต์แวร์ในตัวสำหรับรูปแบบสื่อยอดนิยม
ฟีเจอร์การเล่นเสียงและวิดีโอของ Stagefright ประกอบด้วยการผสานรวมกับตัวแปลงสัญญาณ OpenMAX, การจัดการเซสชัน, การแสดงผลที่ซิงค์ตามเวลา, การควบคุมการรับส่ง และ DRM
Stagefright ยังรองรับการผสานรวมกับตัวแปลงรหัสฮาร์ดแวร์ที่กำหนดเองซึ่งคุณระบุไว้ด้วย หากต้องการตั้งค่าเส้นทางของฮาร์ดแวร์เพื่อเข้ารหัสและถอดรหัสสื่อ คุณต้องติดตั้งใช้งานตัวแปลงรหัสที่อิงตามฮาร์ดแวร์เป็นคอมโพเนนต์ OpenMax IL (Integration Layer)
หมายเหตุ: การอัปเดต Stagefright อาจเกิดขึ้นผ่านกระบวนการการอัปเดตความปลอดภัยรายเดือนของ Android และเป็นส่วนหนึ่งของรุ่นระบบปฏิบัติการ Android
สถาปัตยกรรม
แอปพลิเคชันสื่อโต้ตอบกับเฟรมเวิร์กมัลติมีเดียเนทีฟของ Android ตามสถาปัตยกรรมต่อไปนี้

รูปที่ 1 สถาปัตยกรรมสื่อ
- เฟรมเวิร์กแอปพลิเคชัน
- ที่ระดับเฟรมเวิร์กแอปพลิเคชันคือโค้ดแอปพลิเคชันที่ใช้ android.media API เพื่อโต้ตอบกับฮาร์ดแวร์มัลติมีเดีย
- Binder IPC
- พร็อกซี Binder IPC ช่วยให้การสื่อสารข้ามขอบเขตโปรเซสง่ายขึ้น
โดยอยู่ในรูปแบบไฟล์ .CSV ในไดเรกทอรี
frameworks/av/media/libmedia
และขึ้นต้นด้วยตัวอักษร "I" - เฟรมเวิร์กมัลติมีเดียเนทีฟ
- ที่ระดับเนทีฟ Android มีเฟรมเวิร์กมัลติมีเดียที่ใช้เครื่องมือ Stagefright ในการบันทึกและเล่นเสียงและวิดีโอ Stagefright มาพร้อมกับรายการตัวแปลงรหัสซอฟต์แวร์ที่รองรับโดยค่าเริ่มต้น และคุณสามารถใช้ตัวแปลงรหัสฮาร์ดแวร์ของคุณเองได้โดยใช้มาตรฐานเลเยอร์การผสานรวม OpenMax ดูรายละเอียดการใช้งานเพิ่มเติมได้ในคอมโพเนนต์ MediaPlayer และ Stagefright ซึ่งอยู่ใน
frameworks/av/media
- เลเยอร์การผสานรวม OpenMAX (IL)
- OpenMAX IL เป็นวิธีที่เป็นมาตรฐานสำหรับ Stagefright ในการจดจำและใช้ตัวแปลงรหัสมัลติมีเดียแบบฮาร์ดแวร์ที่กําหนดเองซึ่งเรียกว่าคอมโพเนนต์ คุณต้องระบุปลั๊กอิน OpenMAX ในรูปแบบไลบรารีที่ใช้ร่วมกันชื่อ
libstagefrighthw.so
ปลั๊กอินนี้จะลิงก์ Stagefright กับคอมโพเนนต์ตัวแปลงรหัสที่กำหนดเอง ซึ่งต้องติดตั้งใช้งานตามมาตรฐานคอมโพเนนต์ OpenMAX IL
ใช้ตัวแปลงรหัสที่กำหนดเอง
Stagefright มาพร้อมกับโปรแกรมเปลี่ยนรหัสซอฟต์แวร์ในตัวสำหรับรูปแบบสื่อทั่วไป แต่คุณยังเพิ่มโปรแกรมเปลี่ยนรหัสฮาร์ดแวร์ที่กำหนดเองเป็นคอมโพเนนต์ OpenMAX ได้ด้วย โดยคุณต้องสร้างคอมโพเนนต์ OMX และปลั๊กอิน OMX ที่เชื่อมโยงโปรแกรมเปลี่ยนรหัสที่กำหนดเองเข้ากับเฟรมเวิร์ก Stagefright ดูตัวอย่างคอมโพเนนต์ได้ที่ hardware/ti/omap4xxx/domx/
และดูตัวอย่างปลั๊กอินสำหรับ Galaxy Nexus ได้ที่ hardware/ti/omap4xx/libstagefrighthw
วิธีเพิ่มตัวแปลงรหัสของคุณเอง
- สร้างคอมโพเนนต์ตามมาตรฐานคอมโพเนนต์ OpenMAX IL อินเทอร์เฟซคอมโพเนนต์อยู่ในไฟล์
frameworks/native/include/media/OpenMAX/OMX_Component.h
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนด OpenMAX IL ได้ที่เว็บไซต์ OpenMAX - สร้างปลั๊กอิน OpenMAX ที่ลิงก์คอมโพเนนต์กับบริการ Stagefright ดูอินเทอร์เฟซในการสร้างปลั๊กอินได้ที่ไฟล์ส่วนหัว
frameworks/native/include/media/hardware/OMXPluginBase.h
และHardwareAPI.h
- สร้างปลั๊กอินเป็นไลบรารีที่แชร์โดยใช้ชื่อ
libstagefrighthw.so
ใน Makefile ของผลิตภัณฑ์ เช่น
LOCAL_MODULE := libstagefrighthw
ใน Makefile ของอุปกรณ์ โปรดตรวจสอบว่าคุณได้ประกาศโมดูลเป็นแพ็กเกจผลิตภัณฑ์แล้ว โดยทำดังนี้
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
แสดงตัวแปลงรหัสต่อเฟรมเวิร์ก
บริการ Stagefright จะแยกวิเคราะห์ system/etc/media_codecs.xml
และ system/etc/media_profiles.xml
เพื่อแสดงตัวแปลงรหัสและโปรไฟล์ที่รองรับในอุปกรณ์แก่นักพัฒนาแอปผ่านคลาส android.media.MediaCodecList
และ android.media.CamcorderProfile
คุณต้องสร้างไฟล์ทั้ง 2 ไฟล์ในไดเรกทอรี device/<company>/<device>/
และคัดลอกไฟล์นี้ไปยังไดเรกทอรี system/etc
ของอิมเมจระบบใน Makefile ของอุปกรณ์ เช่น
PRODUCT_COPY_FILES += \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
ดูตัวอย่างทั้งหมดได้ที่ device/samsung/tuna/media_codecs.xml
และ device/samsung/tuna/media_profiles.xml
หมายเหตุ: ตั้งแต่ Android 4.1 ระบบจะไม่รองรับองค์ประกอบ <Quirk>
สำหรับตัวแปลงรหัสสื่ออีกต่อไป