Android: Cómo integrar un decodificador al marco multimedia

Recientemente he portado un decodificador de vídeo a Android con éxito. También descartó la salida en una vista de superficie y comprobó la salida usando la API nativa. Ahora la siguiente tarea es implementar la reproducción, pausa, streaming, etc., es decir, las otras características del reproductor multimedia. Hacer esto será una reelaboración ya que todas estas funcionalidades ya están definidas en el marco multimedia de Android. He oído que podemos hacer nuestro decodificador como un plug-in e integrarlo en el marco multimedia de Android. Aunque i googled sobre lo mismo, apenas podría encontrar cualquier información sobre el mismo. Por lo tanto, solicito amablemente a cualquiera de los lectores que sugiera algunos enlaces relavent o solución para el problema anterior. Gracias de antemano, esperando su respuesta.

One Solution collect form web for “Android: Cómo integrar un decodificador al marco multimedia”

En el marco de Android SF, los codecs 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 Codec

Para registrar su decodificador de video, tendría que agregar una nueva entrada en la lista <Decoders> . Para asegurarse de que su códec siempre está recogido, asegúrese de que su códec está listado como la primera entrada para el tipo MIME específico. Un ejemplo de entrada para un decodificador H.264 podría ser como a continuación.

 <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 su componente. En este ejemplo, denota un decodificador de vídeo AVC / H.264 .

C. Las próximas 2 sentencias indican las 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. De manera similar, 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 hacer referencia a la función OMXCodec::getComponentQuirks en el archivo OMXCodec.cpp . Estas peculiaridades se traducen en banderas que luego son leídas por el framework para crear e inicializar los componentes.

En la ilustración de ejemplo, se muestra que su componente OMX está registrado antes del descodificador de vídeo implementado por defecto de Google.

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

2. Registro de OMX Core

Para crear su componente y asegurarse de que se invoca el método de fábrica correcto, puede que tenga que registrar su OMX Core con el framework Stagefright .

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

El registro del núcleo OMX es así: OMXMaster invoca addVendorPlugin que invoca internamente addPlugin("libstagefrighthw.so") . En addPlugin , se addPlugin el createOMXPlugin mediante el cual se inicializarán los otros indicadores de función para makeComponentInstance , destroyComponentInstance etc.

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

Con estos cambios, su decodificador de vídeo se integra en el androide stagefright marco.

  • Cómo utilizar MediaCodec sin MediaExtractor para H264
  • ¿Cómo MediaCodec encuentra el códec dentro del framework en Android?
  • FFmpeg en Android
  • Creación de codificador OMXCodec en modo HW
  • Android: incluye funciones nativas de StageFright en mi propio proyecto
  • Crear un demultiplexor para MPEG 2 TS en android
  • Compatibilidad con FFmpeg para descodificación de hardware libstagefright
  • ¿Por qué estoy recibiendo errores de "formato no admitido", leyendo flujos de rtsp codificados con H.264 con el MediaPlayer de Android?
  • Cómo crear el archivo .s (asm) en el archivo Android.mk
  • Decodificación de vídeo acelerado por hardware para H.264 en android antes de Jelly Bean
  • ¿Para utilizar el decodificador de HW en android a través de libstagefright, qué establecer para kKeyAVCC en metadatos para la descodificación de base de trama en lugar de la reproducción de MP4?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.