สื่อ

ไอคอน Android Media HAL

Android มี Stagefright ซึ่งเป็นเครื่องมือเล่นสื่อในระดับเนทีฟที่มีตัวแปลงรหัสแบบซอฟต์แวร์ในตัวสำหรับรูปแบบสื่อยอดนิยม

ฟีเจอร์การเล่นเสียงและวิดีโอของ Stagefright ประกอบด้วยการผสานรวมกับตัวแปลงสัญญาณ OpenMAX, การจัดการเซสชัน, การแสดงผลที่ซิงค์ตามเวลา, การควบคุมการรับส่ง และ DRM

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

หมายเหตุ: การอัปเดต Stagefright อาจเกิดขึ้นผ่านกระบวนการการอัปเดตความปลอดภัยรายเดือนของ Android และเป็นส่วนหนึ่งของรุ่นระบบปฏิบัติการ 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

วิธีเพิ่มตัวแปลงรหัสของคุณเอง

  1. สร้างคอมโพเนนต์ตามมาตรฐานคอมโพเนนต์ OpenMAX IL อินเทอร์เฟซคอมโพเนนต์อยู่ในไฟล์ frameworks/native/include/media/OpenMAX/OMX_Component.h ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนด OpenMAX IL ได้ที่เว็บไซต์ OpenMAX
  2. สร้างปลั๊กอิน OpenMAX ที่ลิงก์คอมโพเนนต์กับบริการ Stagefright ดูอินเทอร์เฟซในการสร้างปลั๊กอินได้ที่ไฟล์ส่วนหัว frameworks/native/include/media/hardware/OMXPluginBase.h และ HardwareAPI.h
  3. สร้างปลั๊กอินเป็นไลบรารีที่แชร์โดยใช้ชื่อ 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> สำหรับตัวแปลงรหัสสื่ออีกต่อไป