Android 10 o superior incluye varios componentes de medios actualizables que permiten actualizar los componentes del marco a través de la infraestructura de Google Play Store o a través de un mecanismo inalámbrico (OTA) proporcionado por un socio. Los componentes de medios se empaquetan juntos en módulos que permiten proporcionar actualizaciones de seguridad y actualizaciones de funciones sin necesidad de una actualización completa de la imagen del sistema.
Existen componentes multimedia actualizables en los siguientes módulos.
Medios de comunicación. Este módulo incluye extractores de medios ,
MediaSession2
deMediaParser
y API de MediaParser.Códecs multimedia . Este módulo incluye componentes de Codec2 de software actualizables.
proveedor de medios . Este módulo optimiza los metadatos indexados (audio, video e imágenes de tarjetas SD y dispositivos USB) y pone esos datos a disposición de las aplicaciones a través de las API públicas de MediaStore .
Para obtener detalles sobre cómo agregar extractores y decodificadores personalizados, consulte Personalización de componentes de medios .
extractores de medios
En Android 9 y versiones anteriores, los extractores se compilan en un solo 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 sniffer para determinar si el extractor puede manejar el archivo multimedia dado y una función de fábrica que crea una instancia del extractor para el archivo multimedia dado. Cada extractor tiene un nombre (para ayudar en la depuración) y una versión para indicar qué extractor es el más nuevo.
El marco de medios 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 marco de medios. También puede asegurarse de que se prefiera un extractor personalizado al extractor proporcionado por Google.
API MediaSession2
La API de MediaSession2 permite que las aplicaciones de medios expongan sus controles de transporte y la información de reproducción a otros procesos, como el marco de trabajo de Android y otras aplicaciones. Este componente no se puede personalizar.
API de análisis de medios
La API de MediaParser permite que ExoPlayer haga 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 fina.external/exoplayer/
. Fuentes textuales de Exoplayer en las que se basa MediaParser.
La API de MediaParser no se puede personalizar. Para probar MediaParser, use las pruebas en cts/tests/tests/mediaparser/
.
Códecs multimedia
El módulo Media Codecs incluye componentes de Codec2 de software actualizables. El soporte para la personalización difiere entre las versiones:
En Android 11 o superior (específicamente Google Play System Update v292100200 ), puede personalizar los parámetros para la asignación de memoria ION (consulte los detalles a continuación).
En Android 9 o versiones anteriores, la API del códec OMX no se puede actualizar, pero aún puede usarla en la partición del proveedor.
Asignación de memoria ION
En Android 11 o superior y Google Play System Update 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 almacenamiento dinámico. |
allocFlags | 0 | No hay banderas establecidas. |
minAlignment | 0 | Sin alineación. |
Para anular los parámetros:
Registre un servicio
android.hardware.media.c2
predeterminado y proporcione parámetros de uso de ION personalizados.Para crear un nuevo servicio, copie el archivo frameworks/av/media/codec2/hidl/services/vendor.cpp en su repositorio y luego modifique
StoreImpl::Interface::SetIonUsage()
según sea necesario.Para reutilizar el proceso
media.codec
(OMX), copie y registre la claseStoreImpl
de frameworks/av/media/codec2/hidl/services/vendor.cpp al archivomediacodec
existente ( frameworks/av/services/mediacodec/main_codecservice.cpp ).
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 multimedia ( com.android.media
) y el módulo Media Codec ( com.android.media.swcodec
) están en formato APEX . Los componentes multimedia incluidos se basan únicamente en las API de NDK.
Actualizaciones
Durante una actualización, los componentes del marco en el dispositivo cargan un paquete APEX que contiene Java y código nativo.
Figura 1. El 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.