
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.

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:
- 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. - 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
yHardwareAPI.h
. - 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.