MediaExtractor
APIとAPIを使用して、単純なオーディオ/ビデオ プレーヤーを作成したいと考えていMediaCodec
ます。
audio
とをデコードしてレンダリングできますvideo
。しかし、私はaudio - video
同期を逃しています。
audio
との間の同期を制御する API が見つかりませんでしvideo
た。デコードされたデータaudio
とvideo
データを同期する方法を教えてください。
MediaExtractor
APIとAPIを使用して、単純なオーディオ/ビデオ プレーヤーを作成したいと考えていMediaCodec
ます。
audio
とをデコードしてレンダリングできますvideo
。しかし、私はaudio - video
同期を逃しています。
audio
との間の同期を制御する API が見つかりませんでしvideo
た。デコードされたデータaudio
とvideo
データを同期する方法を教えてください。
Android ソースには、 APIplayer
に基づくエンジン実装の例があります。にある をMediaCodec
確認できます。SimplePlayer
frameworks/av/cmds/stagefright/SimplePlayer.cpp
このプレーヤー エンジンの実装では、 からの出力は、MediaCodec
ここにdequeued
示すようにキューにプッシュされます。全体像を把握するには、439 ~ 450 行を確認してください。
バッファが利用可能になると、ここに簡単なメカニズムAV Sync
が実装されます。508 ~ 521 行を参照してください。この例では、1 つのトラックのみが考慮されるため、現在の時刻はieから導出されます。nowUs
systemTime
ALooper::nowUs
audio
コードでは、常にfirst-come-first-serve
ベースでレンダリングすることを検討できます。また、トラックについては、トラックからを派生させるvideo
ことができます。nowUs
audio
単純な実装はnowUs = getAudioLastPresentationTime()
where であり、 toから最後に送信されたものgetAudioLastPresentationTime
を返します。presentationTimeUs
audio
MediaCodec
audio renderer