文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院工具软件媒体播放浅析DirectShow音视频同步解决完整方案
精品推荐
特别推荐
·卡拉当然OK 录制自己的专辑
·Windows Media Player11使用技巧
·制作有真人视频讲解的幻灯片
·购机必看:主流MP4播放器视频转换全攻略
·Winamp使用指南
·将录像带转为VCD进行保存
·KMPlayer常见问题及解决方法整理
·Nero超刻的详细方法
·KMplayer播放技巧22则
·Windows Media Player专题问答
·用Nero制作音视频光盘
·暴风影音新酷技巧串串烧
·MPEG、RM、WMV电影文件格式转换指南
·APE变成高品质MP3音乐 转换工具介绍
·网络电台DIY
·3GP手机视频转换工具WinAVI
·视频下载不求人 突破封锁保存各类视频资源
·酷我音乐盒独家秘籍偷偷报
·巧设置RealPlayer工作到最佳状态
·轻松化解RealPlayer各种常见问题
热点TOP10
·p8:电影还是边下边看的好
·3GP手机视频转换工具WinAVI
·卡拉当然OK 录制自己的专辑
·MPEG、RM、WMV电影文件格式转换指南
·认识MPEG视频压缩标准及相关编码格式
·转换MP4/3GP格式的至尊法宝---MP4/RM转换专家
·Nero超刻的详细方法
·视频下载不求人 突破封锁保存各类视频资源
·DVD转换MPEG-4三部曲之一
·将你的VP6影片播放出来
·四大网络视频压缩技术大比拼
·趣味变声软件——AV VCS
·从视频文件中提取声音的方法
·亲手打造自动播放的郭德纲相声盘
·将VCD转换成RM格式转换就这么简单
·APE变成高品质MP3音乐 转换工具介绍
·轻松听歌千千静听技巧十七招
·用Nero制作音视频光盘
·Winamp使用指南
·RM,RMVB转VCD全功略

浅析DirectShow音视频同步解决完整方案

日期:2004年9月16日 作者:清风网络学院 查看:[大字体 中字体 小字体]


多媒体处理,不可避免地要解决音视频的同步问题。DirectShow是怎么来实现的呢?我们一起来学习一下。

  大家知道,DirectShow结构最核心的部分是Filter Graph Manager:向下控制Graph中的所有Filter,向上对τ贸绦蛱峁┍喑探涌凇F渲校現ilter Graph Manager实现的很重要一个功能,就是同步音视频的处理。简单地说,就是选一个公共的参考时钟,并且要求给每个Sample都打上时间戳,Video Renderer或Audio Renderer根据Sample的时间戳来控制播放。如果到达Renderer的Sample晚了,则加快Sample的播放;如果早了,则Renderer等待,一直到Sample时间戳的开始时间再开始播放。这个控制过程还引入一个叫Quality Control的反馈机制。

  下面,我们来看一下参考时钟(Reference Clock)。所有Filter都参照于同一个时钟,才能统一步调。DirectShow引入了两种时钟时间:Reference time和Stream time。前者是从参考时钟返回的绝对时间(IReferenceClock::GetTime),数值本身的意义取决于参考时钟的内部实现,利用价值不大;后者是两次从参考时钟读取的数值的差值,实际应用于Filter Graph内部的同步。Stream time在Filter Graph不同状态的取值为:

  1. Filter Graph运行时,取值为当前参考时钟时间减去Filter Graph启动时的时间(启动时间是通过调用Filter上的IMediaFilter::Run来设置的);

  2. Filter Graph暂停时,保持为暂停那一刻的Stream time;

  3. 执行完一次Seek操作后,复位至零;

  4. Filter Graph停止时,取值不确定。

  那么,参考时钟究竟是什么东西呢?其实,它只是一个实现了IReferenceClock接口的对象。也就是说,任何一个实现了IReferenceClock接口的对象都可以成为参考时钟。在Filter Graph中,这个对象一般就是一个Filter。(在GraphEdit中,实现了参考时钟的Filter上会显示一个时钟的图标;如果同一个Graph中有多个Fiter实现了参考时钟,当前被Filter Graph Manager使用的那个会高亮度显示。)而且大多数情况下,参考时钟是由Audio Renderer这个Filter提供的,因为声卡上本身带有了硬件定时器资源。接下来的问题是,如果Filter Graph中有多个对象实现了IReferenceClock接口,Filter Graph Manager是如何做出选择的呢?默认的算法如下:

  1. 如果应用程序设置了一个参考时钟,则直接使用这个参考时钟。(应用程序通过IMediaFilter:: SetSyncSource设置参考时钟,参数即为参考时钟;如果参数值为NULL,表示Filter Graph不使用参考时钟,以最快的速度处理Sample;可以调用IFilterGraph:: SetDefaultSyncSource来恢复Filter Graph Manager默认的参考时钟。值得注意的是,这时候的IMediaFilter接口应该从Filter Graph Manager上获得,而不是枚举Graph中所有的Filter并分别调用Filter上的这个接口方法。)

  2. 如果Graph中有支持IReferenceClock接口的Live Source,则选择这个Live Source。

  3. 如果Graph中没有Live Source,则从Renderer依次往上选择一个实现IReferenceClock接口的Filter。如果连接着的Filter都不能提供参考时钟,则再从没有连接的Filter中选择。这一步算法中还有一个优先情况,就是如果Filter Graph中含有一个Audio Render的链路,则直接选择Audio Renderer这个Filter(原因上面已经提及)。

  4. 如果以上方法都找不到一个适合的Filter,则选取系统参考时钟。(System Reference Clock,通过CoCreateInstance创建,CLSID为CLSID_SystemClock。)

  我们再来看一下Sample的时间戳(Time Stamp)。需要注意的是,每个Sample上可以设置两种时间戳:IMediaSample::SetTime和IMediaSample::SetMediaTime。我们通常讲到时间戳,一般是指前者,它又叫Presentation time,Renderer正是根据这个时间戳来控制播放;而后者对于Filter来说不是必须的,Media time有没有用取决于你的实现,比如你给每个发出去的Sample依次打上递增的序号,在后面的Filter接收时就可以判断传输的过程中是否有Sample丢失。我们再看一下IMediaSample::SetTime的参数,两个参数类型都是REFERENCE_TIME,千万不要误解这里的时间是Reference time,其实它们用的是Stream time。还有一点,就是并不是所有的Sample都要求打上时间戳。对于一些压缩数据,时间戳是很难打的,而且意义也不是很大(不过压缩数据经过Decoder出来之后到达Renderer之前,一般都会打好时间戳了)。时间戳包括两个时间,开始时间和结束时间。当Renderer接收到一个Sample时,一般会将Sample的开始时间和当前的Stream time作比较,如果Sample来晚了或者没有时间戳,则马上播放这个Sample;如果Sample来得早了,则通过调用参考时钟的IReferenceClock::AdviseTime等待Sample的开始时间到达后再将这个Sample播放。Sample上的时间戳一般由Source Filter或Parser Filter来设置,设置的方法有如下几种情况:

[1] [2] 下一页 




上一篇:拯救”被设计字体过度占用的硬盘空间

下一篇:巧让Windows 2000/XP系统急速“瘦”身

浅析DirectShow音视频同步解决完整方案 相关文章:
·笔记本电脑无线上网解决方案大比拼
·不用重装XP系统就可以解决全部故障
·QQ聊天记录偷窥和QQ视频欺骗
·3GP手机视频转换工具WinAVI
·小型办公场合组网方案
·XP系统运行慢?小编自用7招解决
·认识MPEG视频压缩标准及相关编码格式
·施工与工程组织方案
·中小企业整体网络安全解决方案解析
·激情聊天原来有陷阱!快来揭露视频MM的真面目
浅析DirectShow音视频同步解决完整方案 相关软件:
·有关毛泽东的一些问题解答(不完整版)
·黑客视频教程 VMware虚拟机的安装和使用
·刘天礼 吉他视频教程
·SQL Server 2000 基础系列课程视频
·最新PhotoshopCS8.0视频教学
·婚育视频讲座-爱的奇迹
·魔兽世界 视频-亡灵贼号pvp视频1
·婚育视频讲座-新婚ABC
·成功少儿培养方案(上中下)高清晰PDF电子书
·孙鑫VC++从入门到精通开发详解视频教程FLASH版

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot