Contenido multimedia

Ícono de HAL de Android Media

Android incluye Stagefright, un motor de reproducción de contenido multimedia a nivel nativo que tiene códecs integrados basados en software para formatos multimedia populares.

Las funciones de reproducción de audio y video de Stagefright incluyen la integración con códecs OpenMAX, la administración de sesiones, la renderización sincronizada con el tiempo, el control de transporte y la DRM.

Stagefright también admite la integración con códecs de hardware personalizados que proporciones. Para establecer una ruta de acceso de hardware para codificar y decodificar contenido multimedia, debes implementar un códec basado en hardware como un componente de IL (capa de integración) de OpenMax.

Nota: Las actualizaciones de Stagefright pueden ocurrir a través del proceso de actualización de seguridad mensual de Android y como parte de una versión del SO Android.

Arquitectura

Las aplicaciones multimedia interactúan con el framework multimedia nativo de Android según la siguiente arquitectura.

Arquitectura multimedia de Android

Figura 1: Arquitectura de medios

Framework de la aplicación
En el nivel del framework de la aplicación, se encuentra el código de la aplicación que usa las APIs de android.media para interactuar con el hardware multimedia.
IPC de Binder
Los proxies de IPC de Binder facilitan la comunicación a través de los límites del proceso. Se encuentran en el directorio frameworks/av/media/libmedia y comienzan con la letra "I".
Framework multimedia nativo
A nivel nativo, Android proporciona un framework multimedia que usa el motor Stagefright para la grabación y reproducción de audio y video. Stagefright incluye una lista predeterminada de códecs de software compatibles, y puedes implementar tu propio códec de hardware con el estándar de la capa de integración OpenMax. Para obtener más detalles sobre la implementación, consulta los componentes MediaPlayer y Stagefright que se encuentran en frameworks/av/media.
Capa de integración (IL) de OpenMAX
OpenMAX IL proporciona una forma estandarizada para que Stagefright reconozca y use códecs multimedia personalizados basados en hardware llamados componentes. Debes proporcionar un complemento OpenMAX en forma de una biblioteca compartida llamada libstagefrighthw.so. Este complemento vincula Stagefright con tus componentes de código personalizado, que se deben implementar según el estándar de componentes de OpenMAX IL.

Cómo implementar códecs personalizados

Stagefright incluye códecs de software integrados para formatos multimedia comunes, pero también puedes agregar tus propios códecs de hardware personalizados como componentes OpenMAX. Para ello, debes crear los componentes OMX y un complemento OMX que vincule tus codecs personalizados con el framework de Stagefright. Para ver ejemplos de componentes, consulta hardware/ti/omap4xxx/domx/. Para ver un ejemplo de complemento para Galaxy Nexus, consulta hardware/ti/omap4xx/libstagefrighthw.

Para agregar tus propios códecs, sigue estos pasos:

  1. Crea tus componentes según el estándar de componentes de IL de OpenMAX. La interfaz del componente se encuentra en el archivo frameworks/native/include/media/OpenMAX/OMX_Component.h. Para obtener más información sobre la especificación de OpenMAX IL, consulta el sitio web de OpenMAX.
  2. Crea un complemento OpenMAX que vincule tus componentes con el servicio de Stagefright. Para que las interfaces creen el complemento, consulta los archivos de encabezado frameworks/native/include/media/hardware/OMXPluginBase.h y HardwareAPI.h.
  3. Compila tu complemento como una biblioteca compartida con el nombre libstagefrighthw.so en el archivo Makefile de tu producto. Por ejemplo:
    .
    LOCAL_MODULE := libstagefrighthw
    

    En el archivo Makefile de tu dispositivo, asegúrate de declarar el módulo como un paquete de producto:

    PRODUCT_PACKAGES += \
      libstagefrighthw \
      ...
    

Expone los códecs al framework

El servicio Stagefright analiza system/etc/media_codecs.xml y system/etc/media_profiles.xml para exponer los códecs y perfiles compatibles en el dispositivo a los desarrolladores de apps a través de las clases android.media.MediaCodecList y android.media.CamcorderProfile. Debes crear ambos archivos en el directorio device/<company>/<device>/ y copiarlos en el directorio system/etc de la imagen del sistema en el archivo Makefile de tu dispositivo. Por ejemplo:

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 \

Para ver ejemplos completos, consulta device/samsung/tuna/media_codecs.xml y device/samsung/tuna/media_profiles.xml .

Nota: A partir de Android 4.1, ya no se admite el elemento <Quirk> para códecs multimedia.