2013-03-28 7 views
7

Ich möchte einen einfachen Audio-/Video-Player mit den APIs MediaExtractor und MediaCodec schreiben.Synchronisieren von dekodierten Audio- und Videodaten von Mediacodec

Ich bin in der Lage, die audio und video zu decodieren und zu rendern. Aber ich vermisse die audio - video Synchronisierung.

Ich konnte keine API zur Steuerung der Synchronisierung zwischen audio und video finden. Kann mir bitte jemand sagen, wie man die dekodierten audio und video Daten synchronisiert?

Antwort

9

In Android-Quellen gibt es ein Beispiel player Engine-Implementierung basierend auf MediaCodec APIs. Sie können nach SimplePlayer unter frameworks/av/cmds/stagefright/SimplePlayer.cpp suchen.

In dieser Player-Engine-Implementierung wird die Ausgabe von dequeued und in eine Warteschlange wie gezeigt here geschoben. Bitte überprüfen Sie die Zeilen 439 - 450, um ein vollständiges Bild zu erhalten. Wenn der Puffer verfügbar ist, ist ein einfacher AV Sync Mechanismus implementiertBitte beachten Sie die Zeilen 508 -521. In diesem Beispiel wird nur eine Spur betrachtet, und daher wird die aktuelle Zeit von systemTime, d. H. ALooper::nowUs, abgeleitet.

In Ihrem Code können Sie Rendering audio immer auf first-come-first-serve Basis betrachten und für Ihre video Spur, können Sie ableiten die nowUs aus der audio Spur.

Eine einfache Implementierung könnte die nowUs = getAudioLastPresentationTime() sein, wo, getAudioLastPresentationTime die letzten presentationTimeUs vom audioMediaCodec-audio renderer gesendet wird zurückkehren.

+0

Können Sie eine funktionierende Probe bitte –

+0

@ManojK .. Der Link http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508 ist ein funktionierendes Beispiel, das kann auf einer Android-Plattform versucht werden. Bitte klären Sie, ob Sie etwas anderes suchen. – Ganesh

+0

Vielen Dank, ich hoffte jeden Beispielcode in Java. auf jeden Fall werde ich versuchen, oben genannten Beispiel n halten Sie auf dem Laufenden. –

Verwandte Themen