Stagefright 之 Audio和Video同步
来源:互联网 发布:华为手机查看网络制式 编辑:程序博客网 时间:2024/05/16 05:41
Stagefright之七
——Audio和Video同步
之前分别介绍了audio和video的处理流程,那么audio和video是如何同步的。在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 之 Audio和Video同步
- 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 之 AudioPlayback的流程
- linux中的MBR记录详解
- microstation 中的椭圆旋转参数说明
- HttpClient和HtmlParser简介(转)
- SAP中关于用户IP信息的获取(转载)
- Stagefright 之 Audio和Video同步
- 钩子技术介绍及函数使用
- String,StringBuffer与StringBuilder的区别??
- boost之asio分析
- 鸟哥私房菜——DNS Server (适合小白)
- 上海之春
- 解决安卓手机不能看chm文件的一种思路
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- 用C#调用ffmpeg实现媒体类型转换(1)