2013-03-28 33 views
7

MediaExtractorMediaCodecのAPIを使用して、単純なオーディオ/ビデオプレーヤーを書きたいと思います。デコードされたオーディオとMediacodecのビデオデータを同期する

私はaudiovideoをデコードしてレンダリングすることができます。 しかし、audio - videoの同期がありません。

audiovideoの間の同期を制御するAPIが見つかりませんでした。 デコードされたaudiovideoのデータを同期する方法を教えていただけますか?

答えて

9

Androidソースでは、MediaCodec APIに基づいてエンジンを実装した例があります。playerframeworks/av/cmds/stagefright/SimplePlayer.cppにあるSimplePlayerを確認することができます。

このプレーヤエンジンの実装では、MediaCodecからの出力はdequeuedであり、hereのようにキューにプッシュされます。完全な画像を得るには、439〜450行目をチェックしてください。

バッファが利用可能になると、hereが実装された単純なAV Syncメカニズムがあります。 508行目〜521行目を参照してください。この例では、1つのトラックしか考慮されていないため、nowUs、つまり現在の時刻はsystemTimeから導き出される。すなわち、ALooper::nowUsである。あなたのコードで

、あなたはfirst-come-first-serve基づいて常にaudioをレンダリング考えることができ、あなたのvideoトラックのために、あなたはaudioトラックからnowUsを導き出すことができます。

単純な実装はgetAudioLastPresentationTimeaudio rendereraudioMediaCodecから送信された最後のpresentationTimeUsを返し、nowUs = getAudioLastPresentationTime()である可能性があります。

+0

動作サンプルを –

+0

@ManojKにしてください。http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508のリンクは、 'アンドロイド'プラットフォームで試してみてください。あなたが何か違うものを探しているかどうかを明確にしてください。 – Ganesh

+0

ありがとう、私はjavaで任意のサンプルコードを望んでいた。とにかく私は上記のサンプルnはあなたが投稿したままにしようとします。 –

関連する問題