Módulos multimedia

Android 10 o versiones posteriores incluyen varios componentes de medios actualizables que permiten actualizar los componentes del framework a través de la infraestructura de Google Play Store o un mecanismo inalámbrico (OTA) proporcionado por un socio. Los componentes multimedia se empaquetan en módulos que permiten proporcionar actualizaciones de seguridad y de funciones sin requerir una actualización completa de la imagen del sistema.

Los componentes de medios actualizables existen en los siguientes módulos.

Para obtener información sobre cómo agregar extractores y decodificadores personalizados, consulta Personaliza componentes de contenido multimedia.

Extractores de contenido multimedia

En Android 9 y versiones anteriores, los extractores se compilan en un solo archivo libstagefright.so. En Android 10 o versiones posteriores, los extractores de contenido multimedia son componentes independientes. Cada extractor tiene su propio archivo .so con un punto de entrada que proporciona una función sniffer para determinar si el extractor puede controlar el archivo multimedia determinado y una función Factory que crea una instancia del extractor para ese archivo multimedia determinado. Cada extractor se llama (para ayudar en la depuración) y tiene una versión para indicar cuál es el más reciente.

El framework multimedia carga automáticamente todos los archivos .so de extractores disponibles, por lo que puedes crear tus propios extractores agregando un nuevo archivo .so sin necesidad de modificar libstagefright ni otras bibliotecas del framework multimedia. También puedes asegurarte de que se prefiera un extractor personalizado en lugar del extractor proporcionado por Google.

API de MediaSession2

La API de MediaSession2 permite que las apps de música expongan sus controles de transporte y la información de reproducción a otros procesos, como el framework de Android y otras apps. Este componente no se puede personalizar.

API de MediaParser

La API de MediaParser permite que ExoPlayer haga un uso eficiente de los analizadores de contenedores de contenido multimedia del framework para extraer muestras de contenido multimedia de los contenedores. MediaParser incluye los siguientes cambios en los límites del código fuente:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java. API y la implementación de capas delgadas.

  • external/exoplayer/: Son las fuentes literales de Exoplayer en las que se compila MediaParser.

La API de MediaParser no se puede personalizar. Para probar MediaParser, usa las pruebas de cts/tests/tests/mediaparser/.

Códecs de archivos multimedia

El módulo Media Codecs incluye componentes de Codec2 de software actualizables. La compatibilidad con la personalización difiere entre las versiones:

  • En Android 11 o versiones posteriores (específicamente, la Actualización del sistema de Google Play v292100200), puedes personalizar los parámetros para la asignación de memoria de ION (consulta a continuación para obtener más detalles).

  • En Android 9 o versiones anteriores, la API del códec OMX no se puede actualizar, pero puedes usarla en la partición del proveedor.

Asignación de memoria ION

En Android 11 o versiones posteriores y la Actualización del sistema de Google Play v292100200 o versiones posteriores, puedes personalizar los siguientes parámetros para la asignación de memoria de ION.

Parámetro Valor predeterminado Descripción
heapMask 0xFFFFFFFF Se permiten todos los tipos de montón.
allocFlags 0 No se establecieron marcas.
minAlignment 0 Sin alineación.

Para anular los parámetros, haz lo siguiente:

  1. Registra un servicio android.hardware.media.c2 predeterminado y proporciona parámetros de uso de ION personalizados.

  2. Agrega el siguiente código al dispositivo manifest.xml.

    <hal format="hidl">
        <name>android.hardware.media.c2</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IComponentStore</name>
            <instance>default</instance>
        </interface>
    </hal>
    

Formato y dependencias

El módulo Media (com.android.media) y el módulo Media Codec (com.android.media.swcodec) están en formato APEX. Los componentes multimedia incluidos solo dependen de las APIs de NDK.

Actualizaciones

Durante una actualización, los componentes del framework en el dispositivo cargan un paquete APEX que contiene Java y código nativo.

Actualizaciones de contenido multimedia

Figura 1: Flujo de actualización de componentes multimedia

Después de que el framework instala el paquete APEX, el dispositivo se reinicia y activa la imagen del disco, y los procesos del sistema multimedia (media.extractor y media.codec) cargan los módulos actualizados desde el punto de activación.