媒体

Android 媒体 HAL 图标

Android 包含 Stagefright。Stagefright 是位于 Native 层的媒体播放引擎,内置了基于软件的编解码器,且适用于热门媒体格式。

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

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

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

架构

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

Android 媒体架构

图 1. 媒体架构

应用框架
应用代码位于应用框架层,可利用 android.media API 与多媒体硬件进行交互。
Binder IPC
Binder IPC 代理用于促进跨越进程边界的通信。它们位于 frameworks/av/media/libmedia 目录中,并以字母“I”开头。
Native 多媒体框架
在 Native 层,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. 创建一个将您的组件与 Stagefright 服务相连接的 OpenMAX 插件。关于创建插件的接口,请参阅 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> 元素。