2013-03-28 22 views
7

Desidero scrivere un semplice lettore audio/video utilizzando le API MediaExtractor e MediaCodec.Sincronizza i dati audio e video decodificati da Mediacodec

Sono in grado di decodificare e eseguire il rendering di audio e video. Ma mi manca la sincronizzazione audio - video.

Non sono riuscito a trovare alcuna API per controllare la sincronizzazione tra audio e video. Qualcuno può dirmi come sincronizzare i dati decodificati audio e video?

risposta

9

Nelle origini Android, esiste un esempio di implementazione del motore player basata sulle API MediaCodec. È possibile verificare per SimplePlayer situato a frameworks/av/cmds/stagefright/SimplePlayer.cpp.

In questa implementazione del motore del lettore, l'output da MediaCodec è dequeued e inserito in una coda come mostrato in here. Si prega di controllare le linee 439 - 450 per ottenere un'immagine completa.

Una volta disponibile il buffer, è disponibile un semplice meccanismo AV Synchere. Si prega di fare riferimento alle linee 508 -521. In questo esempio, viene considerata solo una traccia e, quindi, nowUs, ovvero l'ora corrente è derivata da systemTime, ovvero ALooper::nowUs.

Nel codice, si può considerare il rendering audio sempre first-come-first-serve base e per la vostra video pista, è possibile ricavare il nowUs dalla pista audio.

Una semplice implementazione potrebbe essere la nowUs = getAudioLastPresentationTime() dove, getAudioLastPresentationTime restituirà l'ultima presentationTimeUs inviata dal audioMediaCodec-audio renderer.

+0

Potete fornire un campione funzionante per favore –

+0

@ManojK .. Il collegamento http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508 è un esempio funzionante che può essere provato su una piattaforma 'android'. Per favore chiarisci se stai cercando qualcosa di diverso. – Ganesh

+0

Grazie mille, speravo qualsiasi codice di esempio in java. comunque proverò il campione sopra menzionato e ti terrò aggiornato. –

Problemi correlati