2013-03-28 19 views
7

Chcę napisać prosty odtwarzacz audio/wideo za pomocą interfejsów API MediaExtractor i MediaCodec.Synchronizacja dekodowanych danych audio i wideo z Mediacodec

Jestem w stanie dekodować i renderować audio i video. Ale brakuje mi synchronizacji audio - video.

Nie mogę znaleźć żadnego interfejsu API do kontrolowania synchronizacji między audio a video. Czy ktoś może mi powiedzieć, jak zsynchronizować zdekodowane dane audio i video?

Odpowiedz

9

W źródłach Androida istnieje przykład wdrożenia silnika player w oparciu o interfejsy API MediaCodec. Możesz sprawdzić numer SimplePlayer pod adresem frameworks/av/cmds/stagefright/SimplePlayer.cpp.

W tej implementacji silnika odtwarzacza wyjście z MediaCodec to dequeued i wciśnięte do kolejki, jak pokazano here. Proszę sprawdzić linie 439 - 450, aby uzyskać pełny obraz.

Gdy bufor jest dostępny, wdrożony jest prosty mechanizm AV Synchere. Proszę odnieść się do linii 508 -521. W tym przykładzie rozważana jest tylko jedna ścieżka, a zatem, bieżący czas pochodzi od systemTime, tj. ALooper::nowUs.

W kodzie, można rozważyć renderowania audio zawsze na first-come-first-serve podstawie i dla toru video można czerpaćnowUs z toru audio.

Prosta implementacja może być nowUs = getAudioLastPresentationTime() gdzie getAudioLastPresentationTime zwróci ostatnią presentationTimeUs wysłany z audioMediaCodec do audio renderer.

+0

Czy możesz podać próbną próbkę, proszę –

+0

@ManojK .. Link http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508 to działająca próbka, która może być wypróbowanym na platformie "androidowej". Proszę wyjaśnić, jeśli szukasz czegoś innego. – Ganesh

+0

Wielkie dzięki, miałem nadzieję, że każdy przykładowy kod w java. w każdym razie spróbuję powyżej wspomnianej próbki n. –

Powiązane problemy