
Android包括Stagefright,這是一種本機級別的媒體播放引擎,具有用於流行媒體格式的內置基於軟件的編解碼器。
Stagefright音頻和視頻播放功能包括與OpenMAX編解碼器的集成,會話管理,時間同步的呈現,傳輸控制和DRM。
Stagefright還支持與您提供的自定義硬件編解碼器集成。要設置用於編碼和解碼媒體的硬件路徑,必須將基於硬件的編解碼器實現為OpenMax IL(集成層)組件。
注意: Stagefright更新可以通過Android每月安全更新過程進行,也可以作為Android OS版本的一部分進行。
建築
媒體應用程序根據以下架構與Android本機多媒體框架進行交互。

圖1.媒體架構
- 應用框架
- 在應用程序框架級別上是利用android.media API與多媒體硬件進行交互的應用程序代碼。
- 活頁夾IPC
- 活頁夾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組件和一個將您的自定義編解碼器與Stagefright框架掛鉤的OMX插件。有關組件的示例,請參閱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
插件構建為共享庫,名稱為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>
元素。