Decodificación de vídeo acelerado por hardware para H.264 en android antes de Jelly Bean

Estoy trabajando en un proyecto de videoconferencia. Utilizábamos codecs de software para codificar y decodificar cuadros de video que harían bien las resoluciones más bajas (hasta 320p). Hemos planeado apoyar nuestra aplicación para resoluciones más altas hasta 720p. Llegué a saber que la aceleración de hardware hará este trabajo bastante bien.

Como el codec de hardware api Media codec está disponible desde Jelly Bean en adelante lo he utilizado para codificar y decodificar y están funcionando bien. Pero mi aplicación es compatible desde 2.3. Así que necesito tener una decodificación de vídeo acelerado por hardware para los fotogramas H.264 de 720p a 30fps.

En la investigación llegó a través de la idea de utilizar el códec OMX mediante la modificación de la estructura de miedo escénico. He leído que el hardware del decodificador H.264 está disponible desde 2.1 y el codificador está allí de 3.0. He ido a través de muchos artículos y preguntas dadas en este sitio y confirmó que puedo seguir adelante.

Había leído sobre la arquitectura del miedo escénico aquí -architecture y aquí- stagefright cómo trabaja

Y he leído sobre el códec OMX aquí-use-android-hardware-decodificador-con-omxcodec-en-ndk .

Estoy teniendo un problema inicial y algunas confusiones sobre su implementation.I me gustaría tener alguna información sobre él.

  1. Para usar codec OMX en mi código debería construir mi proyecto con todo el árbol de origen de Android o puedo hacer agregando algunos archivos de fuente de AOSP (si es así que todos).
  2. ¿Cuáles son los pasos desde cero que debo seguir para lograrlo.

¿Puede alguien darme una pauta en esto

Gracias…

El mejor ejemplo para describir la integración de OMXCodec en la capa nativa es la utilidad de línea de comandos stagefright como se puede observar aquí en GingerBread sí mismo. Este ejemplo muestra cómo se crea un OMXCodec .

Algunos puntos a tener en cuenta:

  1. La entrada a OMXCodec debe ser modelada como un MediaSource y por lo tanto, debe asegurarse de que su aplicación se encarga de este requisito. Un ejemplo para crear una fuente basada en MediaSource se puede encontrar en el archivo de utilidad de record como DummySource .

  2. La entrada al decodificador es decir, MediaSource debe proporcionar los datos a través del método de read y por lo tanto, su aplicación debe proporcionar marcos individuales para cada llamada de read .

  3. El decodificador podría crearse con NativeWindow para la asignación del buffer de salida. En este caso, si desea acceder al búfer desde la CPU, probablemente debería consultar esta consulta para obtener más detalles.

  • Compatibilidad con FFmpeg para descodificación de hardware libstagefright
  • ¿Cómo MediaCodec encuentra el códec dentro del framework en Android?
  • ¿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?
  • Función de ventana de ventana nativa Función de búfer que no produce la salida del decodificador Stagefright
  • Integración de un codec a un marco multimedia de Android
  • Decodificador de vídeo acelerado por hardware para H264
  • FFmpeg en Android
  • Android: Cómo integrar un decodificador al marco multimedia
  • Cómo invocar mi decodificador personalizado en el código fuente de Android
  • Cómo crear un plugin stagefright
  • Arquitectura de Stagefright
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.