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 Sync
here. 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 audio
MediaCodec
do audio renderer
.
Czy możesz podać próbną próbkę, proszę –
@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
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. –