[英]Synchronise Decoded Audio and Video data from Mediacodec
我想使用MediaExtractor
和MediaCodec
API編寫一個簡單的音頻/視頻播放器。
我能夠解碼和渲染audio
和video
。 但是,我錯過了audio - video
同步。
我找不到任何API來控制audio
和video
之間的同步。 有人可以告訴我,如何同步解碼的audio
和video
數據?
在Android源代碼中,有一個基於MediaCodec
API的示例player
引擎實現。 你可以檢查SimplePlayer
位於frameworks/av/cmds/stagefright/SimplePlayer.cpp
。
在這個播放器引擎的實現,從輸出MediaCodec
被dequeued
,如圖所示推入一個隊列這里 。 請查看第439-450行以獲得完整的圖片。
一旦緩沖區可用,有一個簡單的AV Sync
實現機制這里 。 請參閱第508-521行。 在這個例子中,只考慮一個軌道,因此, nowUs
即當前時間是從systemTime
派生的,即ALooper::nowUs
。
在您的代碼中,您可以考慮始終以first-come-first-serve
呈現audio
,對於video
軌道,您可以從audio
軌道中獲取 nowUs
。
一個簡單的實現可以是nowUs = getAudioLastPresentationTime()
,其中, getAudioLastPresentationTime
將返回從audio
MediaCodec
發送到audio renderer
的最后一個presentationTimeUs
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.