Sincronizar datos de audio y vídeo descodificados de Mediacodec

Quiero escribir un simple reproductor de audio / video usando MediaExtractor y MediaCodec APIs.

Soy capaz de decodificar y procesar el audio y video . Pero, me falta la sincronización de audio - video .

No pude encontrar ninguna API para controlar la sincronización entre audio y video . ¿Puede alguien por favor decirme, cómo sincronizar los datos de audio y video decodificados?

En fuentes de Android, hay una implementación de motor de player ejemplo basada en API de MediaCodec . Usted puede comprobar si SimplePlayer encuentra en frameworks/av/cmds/stagefright/SimplePlayer.cpp .

En esta implementación de motor de reproductor, la salida de MediaCodec se dequeued y se inserta en una cola como se muestra aquí . Compruebe las líneas 439 – 450 para obtener una imagen completa.

Una vez que el búfer está disponible, hay un simple mecanismo de AV Sync implementado aquí . Consulte las líneas 508-521. En este ejemplo, sólo se considera una pista y, por tanto, nowUs , es decir, la hora actual se deriva de systemTime es decir, ALooper::nowUs .

En su código, puede considerar la posibilidad de reproducir el audio siempre en base al first-come-first-serve nowUs y para su pista de video , puede derivar las nowUs de la pista de audio .

Una implementación sencilla podría ser el nowUs = getAudioLastPresentationTime() donde, getAudioLastPresentationTime devolverá el último presentationTimeUs enviado desde el audio MediaCodec al audio renderer .

  • Obtener la fecha actual en Http Live Streaming Android 3.0+
  • Android MediaPlayer.reset () invoca onCompletion
  • Cómo crear un plugin stagefright
  • Control del reproductor de música en la notificación
  • Sin resolver: grabación de audio de Android con un ejemplo de Google
  • Cómo jugar el sonido predeterminado TICK?
  • ¿Cómo filtrar sólo los archivos multimedia relevantes en Android?
  • Android varios MediaPlayers
  • Android - MediaController pierde la actividad
  • Error de MediaPlayer / VideoView de Android (1, -2147483648)
  • MediaPlayer: utiliza el volumen del tono de llamada en lugar del volumen del medio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.