2013-03-28 136 views
7

我想用MediaExtractorMediaCodec API編寫簡單的音頻/視頻播放器。同步從Mediacodec解碼音頻和視頻數據

我能夠解碼並呈現audiovideo。 但是,我錯過了audio - video同步。

我找不到任何API來控制audiovideo之間的同步。 有人可以告訴我,如何同步解碼audiovideo數據?

回答

9

在Android源代碼中,有一個基於MediaCodec API的示例player引擎實現。您可以檢查位於frameworks/av/cmds/stagefright/SimplePlayer.cppSimplePlayer

在此播放器引擎實現中,MediaCodec的輸出爲dequeued,並按here所示推送到隊列中。請查看第439-450行以獲得完整的圖片。

一旦緩衝區可用,有一個簡單的AV Sync機制實施here。請參閱508-521行。在這個例子中,只考慮一個軌道,因此nowUs即當前時間從systemTime導出,即ALooper::nowUs

在你的代碼,你可以考慮在first-come-first-serve基礎,併爲您的video跟蹤渲染audio始終,您可以得到nowUsaudio軌道。

一個簡單的實現可能是nowUs = getAudioLastPresentationTime()其中,getAudioLastPresentationTime將返回從audioMediaCodec發送到audio renderer最後presentationTimeUs

+0

您可以提供一個工作示例請 –

+0

@ManojK ..鏈接http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508是一個工作示例,它可以在「android」平臺上嘗試。請澄清,如果你正在尋找不同的東西。 – Ganesh

+0

非常感謝,我希望Java中的任何示例代碼。無論如何,我會嘗試上面提到的示例n保持你張貼。 –