Android 包括 Stagefright,這是一個原生級別的媒體播放引擎,內置基於軟件的編解碼器,適用於流行的媒體格式。
Stagefright 音頻和視頻播放功能包括與 OpenMAX 編解碼器的集成、會話管理、時間同步渲染、傳輸控制和 DRM。
Stagefright 還支持與您提供的自定義硬件編解碼器集成。要設置對媒體進行編碼和解碼的硬件路徑,您必須將基於硬件的編解碼器實現為 OpenMax IL(集成層)組件。
注意: Stagefright 更新可以通過 Android每月安全更新流程進行,也可以作為 Android 操作系統版本的一部分。
建築學
媒體應用程序根據以下架構與 Android 原生多媒體框架交互。
- 應用框架
- 在應用程序框架級別是利用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>
元素。