`
isiqi
  • 浏览: 16483077 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

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

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


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 numbersample 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;

...
}


AwesomePlayerAudioPlayer取得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-plugins-master_stagefright_android_

    Stagefright是Android平台上的核心多媒体框架,负责处理多媒体数据的解码、渲染和传输。本篇将深入探讨Stagefright的工作原理及其在Android系统中的作用。 一、Stagefright概述 Stagefright自Android 2.2(Froyo)...

    stagefright框架2.0.pdf

    Stagefright 框架在 Android 中以 shared library 的形式存在,名为 libstagefright.so,其中的 AwesomePlayer 模块可以用来播放视频和音频。AwesomePlayer 提供了许多 API,可以让上层的应用程序(Java/JNI)来调用...

    stagefright框架2.0

    Stagefright 框架具有简洁的架构和良好的跨平台移植性,是 Android 多媒体架构中的重要组件。 Stagefright 框架的架构 Stagefright 框架由多个模块组成,每个模块负责不同的多媒体处理任务。 AwesomePlayer 是 ...

    StageFright_Audio和Video的同步

    ### StageFright_Audio与Video的同步 #### StageFright框架简介 StageFright是Android系统中的多媒体框架,用于处理音频、视频等媒体文件的播放。该框架支持多种媒体格式,并且提供了高度优化的编解码器。在Stage...

    android多媒体stagefright框架详细分析

    AudioFlinger是Android音频系统的混音器,负责音频的播放和录制,而CodecDriver、DisplayDriver、AudioDriver和Linux Kernel则是底层的驱动和内核支持,为Stagefright框架提供硬件级别的支持。 Stagefright框架提供...

    Android 系统下Stagefright Player框架介绍

    Stagefright是Google为Android平台设计的一套媒体框架,旨在提供高质量的音频、视频解码和播放功能。它位于Android系统的顶层应用与底层硬件之间,充当了桥梁角色,负责解析、解码各种多媒体格式,并将解码后的数据...

    StageFright_Video Playback的流程

    StageFright框架通过精心设计的音频和视频同步机制,实现了流畅的多媒体播放体验。音频由回调函数驱动,而视频则根据音频的时间戳进行精确同步,确保了音画一致。这一流程涉及多个关键时间戳的计算与对比,以及基于...

    stagefright与opencore对比

    在Android系统中,多媒体处理是不可或缺的一部分,而Stagefright和OpenCore是两个重要的多媒体框架。它们各自在不同的时期和环境下承担着Android平台上的多媒体播放和处理任务。下面将详细对比这两个框架,以便理解...

    stagefright awesomeplayer框架

    其中,AwesomePlayer是Stagefright框架中负责视频和音频播放的关键模块,它提供了丰富的API接口,供上层应用程序(Java或JNI)调用进行多媒体操作。 当一个视频播放请求在Java层发起时,通常会执行以下步骤: 1. ...

    android2.3源码解读—stagefright框架

    在Android 2.3版本之前,OpenCORE是主要的多媒体框架,但其复杂的架构和维护成本促使Google引入了更为简洁的Stagefright框架。Stagefright自Android 2.0开始逐渐崭露头角,并在后续版本中逐步取代OpenCORE,成为...

    stagefright + omx小结

    stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结

    stagefright框架

    因此,为了保证系统的安全性,Android开发者不断修复这些漏洞,并加强了对Stagefright框架的审查和安全更新。 总结来说,Stagefright是Android系统中处理多媒体内容的关键组件,它简化了媒体处理流程,提高了性能,...

    stagefright-cve-2015-3864:PoC-CVE-2015-3864的二进制补丁(非生产版本,使用后果自负)

    标题中的"Stagefright-CVE-2015-3864"是一个重要的安全漏洞,它涉及到Android操作系统中的多媒体处理框架Stagefright。在2015年,这个漏洞被公开,它允许攻击者通过恶意MMS( Multimedia Messaging Service,多媒体...

    stageFright_OpenMax系统.doc

    stageFright_OpenMax系统.doc,对Android2.3的 stagefright框架和openMAx的深入分析

    android-stagefright处理httplivestreaming缓冲机制

    在Android系统中,Stagefright框架负责多媒体内容的播放,包括HTTP Live Streaming(HLS)。本文将深入探讨Stagefright处理HLS的缓冲机制,同时也会涉及到Android Binder机制,它是Android系统中进程间通信(IPC)的...

    android stagefright 和 openmax 框架

    简述了android 的stagefright多媒体 框架 和 openmax 框架

    Android多媒体框架下Stagefright的功能扩展.pdf

    本文详细介绍了Android多媒体框架下Stagefright的功能扩展策略,重点阐述了采用桥接设计模式以及整合FFmpeg框架来开发适配Stagefright的解包装和解码插件的过程。这种扩展方法能够使Android多媒体框架支持更多种类的...

Global site tag (gtag.js) - Google Analytics