Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Personalización de componentes de medios

Puede ampliar el extractor de medios y los componentes del códec de medios utilizando extensiones de proveedor. El MediaSession2 y MediaParser API no se puede personalizar (pero se puede aguas arriba cambios para el legado MediaPlayer y MediaSession API).

Para apoyar a los tipos de medios adicionales en el marco de los medios de comunicación de Android, es necesario crear una costumbre extractor y decodificador . Por ejemplo, para añadir soporte para vídeo de Windows Media en archivos AVI, que necesita para crear un AVI Extractor y un Windows Media Video Decoder .

Acerca de las extensiones

Si los extractores de los medios de comunicación por defecto no satisfacen sus necesidades, puede colocar plugins extractor personalizados en /system/lib[64]/extractors/ . El proceso extractor automáticamente cargas extractor plugins desde el paquete APEX proporcionado por Google y desde /system/lib[64]/extractors/ .

Del mismo modo, puede configurar los medios de comunicación personalizados servicios de códecs que utilizan la interfaz de 2.0 Codec definido en frameworks/av/media/codec2/core/ . Para una implementación básica, consulte frameworks/av/media/codec2/hidl/services/ . El punto de entrada de la biblioteca es la C2ComponentStore interfaz. Para ver un ejemplo, consulte el software predeterminado aplicación tienda de códec en frameworks/av/media/codec2/vndk/C2Store.cpp .

Al usar su propia APEX, estructurar el servicio de codec y cargar el archivo de APEX utilizando los mismos procesos como el mediaswcodec servicio. Para hacerlo, defina una biblioteca compartida de nivel superior responsable de registrar todos los componentes C2, luego cree un paquete APEX (con dependencias transitivas) que resida en la partición del proveedor. Cuando se inicia el proceso de servicio del códec del proveedor, puede cargar este punto de entrada de nivel superior.

Creando un extractor

Al agregar un extractor para un nuevo formato, asegúrese de que el extractor dependa solo de API NDK estables y no dependa de ninguna API privada. Extractores deberían aplicar el API definido por frameworks/av/include/media/MediaExtractorPluginApi.h y pueden utilizar las envolturas de C ++ de conveniencia en frameworks/av/include/media/MediaExtractorPluginHelper.h . Debido a que Android 10 o superior solo admite la versión más alta de la API del extractor, asegúrese de modelar su extractor según el extractor con el número de versión de API más alto.

Extractores lugar personalizadas en /system/lib/64/extractors o un proveedor de APEX, que se abre junto con el Google APEX contiene los extractores de Google. Para verificar que el marco cargó su extractor, ejecute el siguiente comando.

adb shell dumpsys media.extractor

Debería obtener una lista de extractores disponibles similar a la siguiente.

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

Si su extractor de encargo soporta un formato que ya está apoyado por un extractor proporcionado por Google, puede forzar el marco de usar el extractor mediante el uso de la Sniff() función para devolver un nivel de confianza mayor que el proporcionado por Google.

Cuando se carga el marco de los medios de su extractor (desde /system/lib/64/extractors o de un proveedor de APEX), que reconoce el archivo y obtiene información acerca de su contenido. El siguiente paso es agregar un decodificador para el formato para que el marco pueda entender cómo analizar el contenido del archivo.

Creando un decodificador personalizado

Necesita un decodificador personalizado para cualquier formato que no sea compatible con un decodificador proporcionado por Google. Por ejemplo:

  • Para agregar soporte de marco de medios para archivos AVI que contienen MP3, necesita un extractor AVI pero no necesita un decodificador MP3 porque ya existe uno.

  • Para agregar soporte de marco de medios para archivos AVI que contengan Windows Media, necesita un extractor de AVI y un decodificador de Windows Media.

Agregar un nuevo decodificador es similar a agregar sus propios decodificadores de hardware para AVC o HEVC.

Si bien el extractor publica el tipo MIME de las pistas multimedia que contiene, los códecs que admiten estos tipos MIME deben estar presentes para que el archivo sea totalmente compatible. La cadena tipo MIME real utilizado es estrictamente un acuerdo entre el extractor y el códec (la cadena no tiene que ser añadido a la MediaDefs.h archivo).

Integración con el escáner de medios

El escáner de medios busca nuevos tipos de archivos y los agrega a la base de datos de medios. Para que el escáner de medios maneje su tipo de archivo personalizado, el escáner debe saberlo. En Android 10 o superior, MimeUtils (en libcore ) mantiene el mapeo-MIME-a extensión. Anteriormente, esta asignación se manejó en el MediaFile.java archivo, que sigue conteniendo una asignación de tipo MIME a las constantes formato MTP.

Un extractor puede exportar una lista de extensiones de nombre de archivo que admite (como MP3 o MP4). Sin embargo, sólo LegacyMediaScanner usos que; no tiene ningún efecto sobre ModernMediaScanner , que utiliza por defecto.