我想用MediaExtractor
和MediaCodec
API編寫簡單的音頻/視頻播放器。同步從Mediacodec解碼音頻和視頻數據
我能夠解碼並呈現audio
和video
。 但是,我錯過了audio - video
同步。
我找不到任何API來控制audio
和video
之間的同步。 有人可以告訴我,如何同步解碼audio
和video
數據?
我想用MediaExtractor
和MediaCodec
API編寫簡單的音頻/視頻播放器。同步從Mediacodec解碼音頻和視頻數據
我能夠解碼並呈現audio
和video
。 但是,我錯過了audio - video
同步。
我找不到任何API來控制audio
和video
之間的同步。 有人可以告訴我,如何同步解碼audio
和video
數據?
在Android源代碼中,有一個基於MediaCodec
API的示例player
引擎實現。您可以檢查位於frameworks/av/cmds/stagefright/SimplePlayer.cpp
的SimplePlayer
。
在此播放器引擎實現中,MediaCodec
的輸出爲dequeued
,並按here所示推送到隊列中。請查看第439-450行以獲得完整的圖片。
一旦緩衝區可用,有一個簡單的AV Sync
機制實施here。請參閱508-521行。在這個例子中,只考慮一個軌道,因此nowUs
即當前時間從systemTime
導出,即ALooper::nowUs
。
在你的代碼,你可以考慮在first-come-first-serve
基礎,併爲您的video
跟蹤渲染audio
始終,您可以得到的nowUs
從audio
軌道。
一個簡單的實現可能是nowUs = getAudioLastPresentationTime()
其中,getAudioLastPresentationTime
將返回從audio
MediaCodec
發送到audio renderer
最後presentationTimeUs
。
您可以提供一個工作示例請 –
@ManojK ..鏈接http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#508是一個工作示例,它可以在「android」平臺上嘗試。請澄清,如果你正在尋找不同的東西。 – Ganesh
非常感謝,我希望Java中的任何示例代碼。無論如何,我會嘗試上面提到的示例n保持你張貼。 –