
Android 包含 Stagefright,这是一个原生级别的媒体播放引擎,内置了适用于常用媒体格式的基于软件的编解码器。
Stagefright 音频和视频播放功能包括与 OpenMAX 编解码器集成、会话管理、时间同步渲染、传输控制和 DRM。
Stagefright 还支持与您提供的自定义硬件编解码器集成。要设置用于编码和解码媒体的硬件路径,您必须将基于硬件的编解码器实现为 OpenMax IL(集成层)组件。
注意:Stagefright 更新可以通过 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
。
添加您自己的编解码器
- 根据 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>
元素。