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.