媒體

Android Media HAL 圖示

Android 包含 Stagefright,這是原生層級的媒體播放引擎,內建了適用於熱門媒體格式的軟體編碼器。

Stagefright 音訊和影片播放功能包括與 OpenMAX 轉碼器整合、工作階段管理、時間同步轉譯、傳輸控制和 DRM。

Stagefright 也支援與您提供的自訂硬體編解碼整合。如要設定硬體路徑來編碼及解碼媒體,您必須將以硬體為基礎的編碼器設為 OpenMax IL (整合層) 元件。

注意:Stagefright 更新可透過 Android 每月安全性更新程序,以及 Android 作業系統版本發布。

建築

媒體應用程式會根據下列架構與 Android 原生多媒體架構互動。

Android 媒體架構

圖 1. 媒體架構

應用程式架構
應用程式架構層級是應用程式程式碼,可利用 android.media API 與多媒體硬體互動。
Binder IPC
Binder IPC 代理程式可協助處理序間通訊。這些檔案位於 frameworks/av/media/libmedia 目錄,並以字母「I」開頭。
原生多媒體架構
在原生層級,Android 提供多媒體架構,可利用 Stagefright 引擎錄製及播放音訊和視訊。Stagefright 提供支援的軟體編碼器預設清單,您可以使用 OpenMax 整合層標準實作自己的硬體編碼器。如需更多實作詳細資訊,請參閱 frameworks/av/media 中的 MediaPlayer 和 Stagefright 元件。
OpenMAX 整合層 (IL)
OpenMAX IL 提供標準化方式,讓 Stagefright 辨識及使用稱為元件的自訂硬體多媒體編解碼器。您必須以名為 libstagefrighthw.so 的共用程式庫形式提供 OpenMAX 外掛程式。這個外掛程式會將 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.hHardwareAPI.h 標頭檔案。
  3. 在產品 Makefile 中,將外掛程式建構為名為 libstagefrighthw.so 的共用程式庫。例如:
    LOCAL_MODULE := libstagefrighthw
    

    在裝置的 Makefile 中,請務必將模組宣告為產品套件:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

將編解碼公開給架構

Stagefright 服務會剖析 system/etc/media_codecs.xmlsystem/etc/media_profiles.xml,透過 android.media.MediaCodecListandroid.media.CamcorderProfile 類別,向應用程式開發人員公開裝置上支援的編解碼和設定檔。您必須在 device/<company>/<device>/ 目錄中建立這兩個檔案,並將其複製到裝置 Makefile 中的系統映像檔 system/etc 目錄。例如:

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.xmldevice/samsung/tuna/media_profiles.xml

注意:自 Android 4.1 起,系統不再支援媒體編解碼器的 <Quirk> 元素。