Stagefright (7) - Audio和Video的同步
来源:互联网 发布:苹果cms采集资源 编辑:程序博客网 时间:2024/05/19 04:05
講完了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);
...
}
- Stagefright (7) - Audio和Video的同步
- Stagefright (7) - Audio和Video的同步
- Stagefright (7) - Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(六)-Audio和Video的同步 .
- stagefright框架(七)-Audio和Video的同步
- stagefright框架(七)-Audio和Video的同步
- StageFright框架(七)Audio和Video的同步
- Stagefright 之 Audio和Video同步
- Exclusive access could not be obtained because the database is in use
- Stagefright (5) - Video Rendering
- 计划要学习和巩固的
- Stagefright (6) - Audio Playback的流程
- linux rtc 接口
- Stagefright (7) - Audio和Video的同步
- Stagefright (7) - Audio和Video的同步
- VS2005 注释模板 快捷注释 注释快捷键
- 使用SqlBulkCopy类加载其他源数据到SQL表
- Activity和任务
- wish list
- 怎样入门 怎样提问 何谓高手
- tcp/ip 同时打开 同时关闭
- 判断字符串的编码类型(GBK / UTF8)