专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 软件架构设计

基于RTP的音视频同步方案设计【转载请写明出处】

发布时间:2011-06-20 02:11:35 文章来源:www.iduyao.cn 采编人员:星星草
基于RTP的音视频同步方案设计【转载请注明出处】

注:该文章为上篇图案的同步部分的详述。

 

网络多媒体流是多种媒体类型在网络环境中的集成它既包括文本数据图片等与时间无关的媒体类型又包括语音图像等与时间密切相关的媒体类型不同类型的数据经过发送传输接收等环节后必定会产生不同的时间延迟因此保持媒体流之间的时间关系特别是实时流的连续同步关系是多媒体技术的关键多媒体流同步就是将有一定时间关系的各种媒体类型经过网络传输后在接收端能够保持原有的时间关系接收缓冲区的设计:

具体实施方法如下:对于刚接收到的一个RTP包,直接进入排队解码区,开始进行排队解码,首先根据RTP所携带的分组号,从后到前先找到该分组其他包的位置,然后在该分组内,利用自身携带的序列号在该组内从大到小,开始逐个比较来快速确定自己在该分组的位置,对一些特殊情况做以下处理:1,这个刚到的RTP包是这个分组的第一个包,首先判断自己的帧类型,若不是I帧,直接根据分组号的大小确定自己的分组位置,在比较过程中,发现没有和自己一样的分组号,则它是第一个(开辟新的排队块区)2,判断该帧是否第一I帧,过程:判断自己的帧类型,若是I帧,找到自己分组的块排队区,进行是否有I帧判断,若该块区有已有I帧(完整的I帧)的标记,则这个包自动丢弃。若不是I帧,则是一般情况,正常处理即可。

在一个分组进行解码时,根据次分组是否有完整的分组,若是,进行自然解码即可,侦听口,只需要判断即将结束该分组解码的时间,并在该时刻,判断第一分组是否有完整I帧包标记,若有,准备解码即可,若没有完整I帧包,若没有,将该块区,移动到暂存区等待I帧包及其他包,同时查找下一分组块区,继续进行判断,若有I帧,准备进行解码,若没有,返回上一分组,继续检查等待,同时接受来自显示缓冲区的反馈信息,显示区若仍有未播放帧,继续来回循环等待,若显示缓冲区已进入重复播放帧,则开始继续往下检查块组,同时丢弃第一分组,并将第二分组移动到暂存区。若第二分组有I帧,则准备解码同时接受新来的该分组包(若该分组不完整的话),侦听口,仍然侦听该分组即将解码结束的时刻,若再该分组即将结束时,暂存区还没有完整I帧标记,丢掉该帧,若暂存区有了完整的I帧标记,接受来自显示缓冲区的反馈信息,若显示缓冲区正在播放第二组的数据帧,丢掉该分组,若仍在播放第零帧的数据,开始该分组数据帧解码。

显示缓冲区的设计:

由于显示缓冲区更多地要考虑到音视频的同步问题,这里我们采取通常的做法,对音频进行连续播放,通过对视频处理来达到与音频数据的同步,这里我么采取对接收到的语音媒体采用基于播放时限的同步方法,急用接收端缓存的语音媒体流来补偿网络的时延抖动,通过缓冲区的设计来实现语音回放。缓冲区设定一个门限值M,门限值M的大小通过M=2×(Dmax-Dmin)×r,即开始时,语音数据在缓存中积累,知道达M开始播放。

对于正常的视频帧,解码后直接进入显示缓冲队列准备播放,而对于在第二组之后解码出的第一组,识别标记(在接收缓冲区做的),解码完后进入插队缓冲区,准备插队播放,对于显示缓冲队列大小作如下设计,设置一个正常范围大小,即可以存放12帧视频帧大小的显示队列,上限为15帧,下限为3帧,当达到315帧时,表示下溢或上溢。

整个播放处理过程如下:在第零视频帧正常播放的前提下,有播放的音频帧的时间,利用NTP时间戳和RTP时间戳计算出每个视频对应音频播放的时间,那么可对当前缓冲区的最前面一帧(记为第一帧)数据进行如下判断,若第一帧恰好在Time±△范围内,则正常播放,若第一帧时间标记小于Time-△,说明该帧已过时丢弃,若第一帧时间标记大于Time+△,则说明该帧来早了,则重复播放一次第零帧,再次比较,在范围内正常播放,仍大于则转到抖动区,向前寻找下帧,如此轮询知道第零帧总共重播3次,此时抖动缓冲区已有3帧,在最后一次讯问后,开始切换到以视频为标准,一次性调整音频,之后重新切换回到以音频为标准(这种情况出现的较少)。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: