![Android 媒体 HAL 图标](https://source.android.google.cn/static/docs/core/media/images/ape_fwk_hal_media.png?authuser=0000&hl=sl)
Android 包含 Stagefright。Stagefright 是位于原生层的媒体播放引擎,内置了基于软件的编解码器,可用于处理热门媒体格式。
Stagefright 音频和视频播放功能包括集成 OpenMAX 编解码器、会话管理、基于时间的同步渲染、传输控制和 DRM。
Stagefright 还支持集成由您提供的自定义硬件编解码器。要设置编码和解码媒体的硬件路径,您必须将基于硬件的编解码器作为 OpenMax IL(集成层)组件加以实现。
注意:Stagefright 可通过 Android 每月安全更新流程,作为 Android 操作系统版本的一部分进行更新。
架构
媒体应用根据以下架构与 Android 原生多媒体框架进行交互。
![Android 媒体架构](https://source.android.google.cn/static/docs/core/media/images/ape_fwk_media.png?authuser=0000&hl=sl)
图 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 网站。 - 创建一个将您的组件与 Stagefright 服务相连接的 OpenMAX 插件。如需查看用于创建插件的接口,请参阅
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>
元素。