
Android 包含 Stagefright,這是一個本機等級的媒體播放引擎,具有針對流行媒體格式的內建基於軟體的編解碼器。
Stagefright 音訊和視訊播放功能包括與 OpenMAX 編解碼器整合、會話管理、時間同步渲染、傳輸控制和 DRM。
Stagefright 還支援與您提供的自訂硬體編解碼器整合。若要設定硬體路徑來編碼和解碼媒體,您必須將基於硬體的編解碼器實作為 OpenMax IL(整合層)元件。
注意: Stagefright 更新可以透過 Android每月安全更新流程並作為 Android 作業系統版本的一部分進行。
建築學
媒體應用程式根據以下架構與 Android 原生多媒體框架互動。

圖 1.媒體架構
- 應用框架
- 應用程式框架層級是利用android.media API 與多媒體硬體互動的應用程式程式碼。
- 賓德工控機
- 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
。
要添加您自己的編解碼器:
- 根據 OpenMAX IL 元件標準建立元件。元件介面位於
frameworks/native/include/media/OpenMAX/OMX_Component.h
檔案中。要了解有關 OpenMAX IL 規範的更多信息,請參閱OpenMAX 網站。 - 建立一個 OpenMAX 插件,將您的元件與 Stagefright 服務連結。有關建立插件的接口,請參閱
frameworks/native/include/media/hardware/OMXPluginBase.h
和HardwareAPI.h
頭檔。 - 在產品 Makefile 中將外掛程式建置為共享庫,名稱為
libstagefrighthw.so
。例如:LOCAL_MODULE := libstagefrighthw
在裝置的 Makefile 中,請確保將模組聲明為產品包:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
將編解碼器暴露給框架
Stagefright 服務解析system/etc/media_codecs.xml
和system/etc/media_profiles.xml
透過android.media.MediaCodecList
和android.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.xml
和device/samsung/tuna/media_profiles.xml
。
注意:從 Android 4.1 開始,不再支援媒體編解碼器的<Quirk>
元素。