Módulos multimedia

Android 10 o superior incluye varios componentes multimedia actualizables que permiten actualizar los componentes del marco a través de la infraestructura de Google Play Store o mediante un mecanismo inalámbrico (OTA) proporcionado por el socio. Los componentes multimedia están empaquetados juntos en módulos que permiten proporcionar actualizaciones de seguridad y actualizaciones 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 detalles sobre cómo agregar extractores y decodificadores personalizados, consulte Personalización de componentes multimedia .

Extractores de medios

En Android 9 y versiones anteriores, los extractores se compilan en un único archivo libstagefright.so . En Android 10 o superior, los extractores de medios son componentes separados. Cada extractor tiene su propio archivo .so con un punto de entrada que proporciona una función de rastreo para determinar si el extractor puede manejar el archivo multimedia determinado y una función de fábrica que crea una instancia del extractor para el archivo multimedia determinado. Cada extractor tiene un nombre (para ayudar en la depuración) y una versión para indicar qué extractor es el más nuevo.

Media Framework carga automáticamente todos los archivos .so de extractor disponibles, por lo que puede crear sus propios extractores agregando un nuevo archivo .so sin necesidad de modificar libstagefright u otras bibliotecas de Media Framework. También puede asegurarse de que se prefiera un extractor personalizado al extractor proporcionado por Google.

API MediaSession2

La API MediaSession2 permite que las aplicaciones multimedia expongan sus controles de transporte e información de reproducción a otros procesos, como el marco de Android y otras aplicaciones. Este componente no se puede personalizar.

API de MediaParser

La API MediaParser permite a ExoPlayer hacer un uso eficiente de los analizadores de contenedores de medios del marco para extraer muestras de medios de los contenedores de medios. MediaParser incluye los siguientes cambios en los límites del código fuente:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java . Implementación de API y capa delgada.

  • external/exoplayer/ . Fuentes textuales de Exoplayer en las que se basa MediaParser.

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

Códecs multimedia

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

  • En Android 11 o superior (específicamente la actualización del sistema Google Play v292100200 ), puede personalizar los parámetros para la asignación de memoria ION (consulte 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 aún puedes usarla en la partición del proveedor.

Asignación de memoria ION

En Android 11 o superior y la actualización del sistema Google Play v292100200 o superior, puede personalizar los siguientes parámetros para la asignación de memoria ION.

Parámetro Valor por defecto Descripción
heapMask 0xFFFFFFFF Se permiten todos los tipos de montón.
allocFlags 0 No se han establecido banderas.
minAlignment 0 Sin alineación.

Para anular los parámetros:

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

  2. Agregue el siguiente código al manifest.xml del dispositivo.

    <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 multimedia ( com.android.media ) y el módulo Media Codec ( com.android.media.swcodec ) están en formato APEX . Los componentes multimedia incluidos dependen únicamente de las API del NDK.

Actualizaciones

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

Actualizaciones de medios

Figura 1. Flujo de actualización del componente multimedia

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