媒体

Android Media HAL icon

Android 包含 Stagefright,这是一个原生级别的媒体播放引擎,内置了适用于常用媒体格式的基于软件的编解码器。

Stagefright 音频和视频播放功能包括与 OpenMAX 编解码器集成、会话管理、时间同步渲染、传输控制和 DRM。

Stagefright 还支持与您提供的自定义硬件编解码器集成。要设置用于编码和解码媒体的硬件路径,您必须将基于硬件的编解码器实现为 OpenMax IL(集成层)组件。

注意:Stagefright 更新可以通过 Android 月度安全更新流程进行,也可以作为 Android 操作系统版本的一部分进行。

架构

媒体应用根据以下架构与 Android 原生多媒体框架进行交互。

Android media architecture

图 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

添加您自己的编解码器

  1. 根据 OpenMAX IL 组件标准创建您的组件。组件接口位于 frameworks/native/include/media/OpenMAX/OMX_Component.h 文件中。要了解有关 OpenMAX IL 规范的更多信息,请参阅 OpenMAX 网站
  2. 创建一个 OpenMAX 插件,将您的组件与 Stagefright 服务链接起来。有关创建插件的接口,请参阅 frameworks/native/include/media/hardware/OMXPluginBase.hHardwareAPI.h 头文件。
  3. 在您的产品 Makefile 中,将您的插件构建为名为 libstagefrighthw.so 的共享库。例如
    LOCAL_MODULE := libstagefrighthw
    

    在您设备的 Makefile 中,确保您将模块声明为产品软件包

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

向框架公开编解码器

Stagefright 服务会解析 system/etc/media_codecs.xmlsystem/etc/media_profiles.xml,以通过 android.media.MediaCodecListandroid.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.xmldevice/samsung/tuna/media_profiles.xml

注意: 自 Android 4.1 起,不再支持媒体编解码器的 <Quirk> 元素。