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

本文介绍Stagefright框架中音频和视频的同步机制。通过设置主clock并利用AudioPlayer的时间戳进行同步,确保播放流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


size_t AudioPlayer: : fillBuffer( data, size)
{
  . . .

  mSource- > read ( & mInputBuffer, . . . ) ;

  mInputBuffer- > meta_data( ) - > findInt64( kKeyTime, & mPositionTimeMediaUs) ;
  mPositionTimeRealUs = ( ( mNumFramesPlayed + size_done / mFrameSize) * 1000000) / mSampleRate;

  . . .
}


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

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


void AwesomePlayer: : onVideoEvent( )
{
  . . .

  mVideoSource- > read ( & mVideoBuffer, . . . ) ;
  mVideoBuffer- > meta_data( ) - > findInt64( kKeyTime, & timeUs) ;

  mAudioPlayer- > getMediaTimeMapping( & realTimeUs, & mediaTimeUs) ;
  mTimeSourceDeltaUs = realTimeUs - mediaTimeUs;

  nowUs = ts- > getRealTimeUs( ) - mTimeSourceDeltaUs;
  latenessUs = nowUs - timeUs;

  . . .
}


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

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

void AwesomePlayer: : onVideoEvent( )
{
  . . .
  if ( latenessUs > 40000)
  {
    mVideoBuffer- > release( ) ;
    mVideoBuffer = NULL ;

    postVideoEvent_l( ) ;
    return ;
  }
  if ( latenessUs < - 10000)
  {
    postVideoEvent_l( 10000) ;
    return ;
  }

  mVideoRenderer- > render( mVideoBuffer) ;

  . . .
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值