android android-ndk android-mediaplayer android-framework stagefright

Android: cómo integrar un decodificador al marco multimedia



android-ndk android-mediaplayer (1)

En el marco de Android SF, los códecs se registran a través de media_codecs.xml . En la distribución estándar de Android, se puede encontrar un ejemplo de media_codecs.xml aquí . Todos los componentes audiovisuales están registrados como componentes OMX .

1. Registro de códec

Para registrar su decodificador de video, debe agregar una nueva entrada en la lista <Decoders> . Para asegurarse de que su códec siempre se recoja, asegúrese de que su códec aparezca como la primera entrada para el tipo MIME específico. Una entrada de ejemplo para un decodificador H.264 podría ser la siguiente.

<Decoders> <MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" > <Quirk name="requires-allocate-on-input-ports" /> <Quirk name="requires-allocate-on-output-ports" /> </MediaCodec> <MediaCodec name="OMX.google.h264.decoder" type="video/avc" />

Dónde,

a. OMX.ABC.XYZ.H264.Decoder es el nombre de su componente

segundo. video/avc es el tipo MIME de tu componente. En este ejemplo, denota un decodificador de video AVC / H.264 .

c. Las siguientes 2 declaraciones denotan los quirks o requisitos especiales de sus componentes. En el ejemplo dado, requires-allocate-on-input-ports indica al framework Stagefright que el componente prefiere asignar los buffers en todos sus puertos de entrada. Del mismo modo, la otra quirk es informar que el componente también preferirá asignar en sus puertos de salida. Para obtener una lista de quirks admitidas en el sistema, puede consultar la función OMXCodec::getComponentQuirks en el archivo OMXCodec.cpp . Estas peculiaridades se traducen en indicadores que luego el marco lee para crear e inicializar los componentes.

En la ilustración de ejemplo, se muestra que su componente OMX está registrado antes del decodificador de video predeterminado implementado por Google.

NOTA : Si intenta esto en un dispositivo final, deberá asegurarse de que esta entrada se refleje en el archivo final media_codecs.xml .

2. Registro OMX Core

Para crear su componente y asegurarse de que se invoque el método de fábrica correcto, es posible que deba registrar su OMX Core con el marco Stagefright .

Para registrar un nuevo núcleo, deberá crear una nueva biblioteca llamada libstagefrighthw.so que se ubicará en /system/lib en su sistema final. Esta biblioteca tendrá que exponer un símbolo createOMXPlugin que se verá por dlsym .

El registro del núcleo OMX es así: OMXMaster invoca addVendorPlugin que invoca internamente addPlugin("libstagefrighthw.so") . En addPlugin , se makeComponentInstance destroyComponentInstance se inicializarán los otros punteros a funciones para makeComponentInstance , destroyComponentInstance , etc.

Una vez que se inicializa el núcleo de OMX , está listo para ejecutar su propio componente dentro del marco de android. La referencia para OMXMaster se puede encontrar aquí .

Con estos cambios, su decodificador de video está integrado en el framework android stagefright.

Recientemente, he portado un decodificador de video a Android con éxito. También descartó el resultado en una vista de superficie y verificó la salida utilizando API nativas. Ahora la siguiente tarea es implementar reproducción, pausa, transmisión, etc., es decir, las otras funciones del reproductor multimedia. Hacer esto será una repetición ya que todas estas funcionalidades ya están definidas en el marco multimedia de Android. Escuché que podemos hacer nuestro decodificador como un complemento e integrarlo en el marco multimedia de Android. Aunque busqué en Google lo mismo, no pude encontrar ninguna información con respecto a la misma. Por lo tanto, solicito a cualquiera de los lectores que sugiera enlaces o soluciones con respecto al problema anterior. Gracias de antemano, esperando su respuesta.