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