织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

stagefright框架(七)-Audio和Video的同步

落鹤生 发布于 2013-01-29 22:31 点击:次 
講完了audio和video的處理流程,接下來要看的是audio和video同步化(synchronization)的問題。
TAG:

講完了audio和video的處理流程,接下來要看的是audio和video同步化(synchronization)的問題。OpenCORE的做法是設置一個主clock,而audio和video就分別以此作為輸出的依據。而在Stagefright中,audio的輸出是透過callback函式來驅動,video則根據audio的timestamp來做同步。以下是詳細的說明:

(1) 當callback函式驅動AudioPlayer讀取解碼後的資料時,AudioPlayer會取得兩個時間戳 -- mPositionTimeMediaUs和mPositionTimeRealUs

  1. size_t AudioPlayer::fillBuffer(data, size) 
  2.   ... 
  3.  
  4.   mSource->read(&mInputBuffer, ...); 
  5.  
  6.   mInputBuffer->meta_data()->findInt64(kKeyTime, &mPositionTimeMediaUs); 
  7.   mPositionTimeRealUs = ((mNumFramesPlayed + size_done / mFrameSize) * 1000000) / mSampleRate; 
  8.  
  9.   ... 

mPositionTimeMediaUs是資料裡面所載明的時間戳(timestamp);mPositionTimeRealUs則是播放此資料的實際時間(依據frame number及sample rate得出)。

(2) Stagefright中的video便依據從AudioPlayer得出來之兩個時間戳的差值,作為播放的依據

  1. void AwesomePlayer::onVideoEvent() 
  2.   ... 
  3.  
  4.   mVideoSource->read(&mVideoBuffer, ...); 
  5.   mVideoBuffer->meta_data()->findInt64(kKeyTime, &timeUs); 
  6.  
  7.   mAudioPlayer->getMediaTimeMapping(&realTimeUs, &mediaTimeUs); 
  8.   mTimeSourceDeltaUs = realTimeUs - mediaTimeUs; 
  9.  
  10.   nowUs = ts->getRealTimeUs() - mTimeSourceDeltaUs; 
  11.   latenessUs = nowUs - timeUs; 
  12.  
  13.   ... 

AwesomePlayer從AudioPlayer取得realTimeUs(即mPositionTimeRealUs)和mediaTimeUs(即mPositionTimeMediaUs),並算出其差值mTimeSourceDeltaUs。

(3) 最後我們將該video資料做排程

  1. void AwesomePlayer::onVideoEvent() 
  2.   ... 
  3.   if (latenessUs > 40000) 
  4.   { 
  5.     mVideoBuffer->release(); 
  6.     mVideoBuffer = NULL; 
  7.  
  8.     postVideoEvent_l(); 
  9.     return
  10.   } 
  11.   if (latenessUs < -10000) 
  12.   { 
  13.     postVideoEvent_l(10000); 
  14.     return
  15.   } 
  16.  
  17.   mVideoRenderer->render(mVideoBuffer); 
  18.  
  19.   ... 
(zjc0888)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201301/16496.html]
本文出处:CSDN博客 作者:zjc0888
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容