音/视频直播方法、装置及控制方法、装置的制造方法_2

文档序号:9420718阅读:来源:国知局
根据当前网络状态分别对缓冲区数据时长进行缩短/增大调整,且调整的值为根据网络状态而变化的值。因此,能根据网络状态动态有效调整缓冲区大小,而且在保证平滑、确保播放流畅的前提下使时延尽量小。
【附图说明】
[0041]图1是本发明实施例中一种基于TCP直播系统消除时延抖动的控制方法的流程示意图。
[0042]图2是当前调整周期内不存在缓冲区为空的情况下的缓冲区变化示意图。
[0043]图3是图1所示的步骤S102的具体流程示意图。
[0044]图4是当前调整周期内存在缓冲区为空的情况下的缓冲区变化示意图。
[0045]图5是增大后的初始缓冲区数据时长与第二大时延抖动值呈线性增函数关系的示意图。
[0046]图6是本发明实施例中一种基于TCP直播系统消除时延抖动的控制装置的结构示意图。
[0047]图7是本发明实施例中一种基于TCP直播系统消除时延抖动的视频播放方法的流程不意图。
[0048]图8是本发明实施例中一种基于TCP的音/视频直播接收装置的结构示意图。
【具体实施方式】
[0049]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0050]参见图1,是本发明实施例提供的一种基于TCP直播系统消除时延抖动的控制方法的流程示意图。该控制方法包括步骤:
[0051]S101、判断当前缓冲区是否为空;
[0052]S102、当缓冲区不为空,待当前调整周期到达时,若当前调整周期内的最大缓冲区数据时长与最小缓冲区数据时长的差值小于预设的缓冲区时长抖动阈值,且所述最小缓冲区数据时长大于预设的最小缓冲区时长阈值时,则将当前缓冲区数据时长缩短,且缩短的值小于或等于所述最小缓冲区数据时长和所述预设的最小缓冲区时长阈值之间的差值;
[0053]S103、当缓冲区为空,待缓冲区为空到接收到第一个数据包时,则将初始缓冲区数据时长增大,且增大后的初始缓冲区数据时长是第二大时延抖动值的增函数;其中,所述初始缓冲区数据时长是缓冲区为空到恢复播放所需要的缓冲数据时长;所述第二大时延抖动值是缓冲区为空前一段时间到接收到所述第一个数据包的时间内所接收到的连续的两个数据包的时间差中的第二大值。
[0054]本实施例用于在接收音/视频直播系统的数据以播放时,能够有效消除时延抖动。由于视频直播系统中既有视频又有音频,本实施例以视频直播系统为例,详细说明本实施例的实现过程。对于视频直播系统,音频包比视频包的数据量小,在直播系统中首先要保证交互式语音质量,因此本实施例采用语音数据包在网络中速率变化来定义时延抖动值jitter及控制缓冲区大小。
[0055]视频直播系统中往往创建了三个线程,分别是:读取线程、音频线程、视频线程。读取线程负责从网络接收数据,将音视频数据分别置于音频和视频缓冲区中。音频线程从音频缓冲区中取数据并解码,然后播放声音。视频线程从视频缓冲区中取数据并解码,然后播放视频。因此在视频直播系统中存在两个缓冲区,为简单起见,本实施例采用统一的控制方法来控制两个缓冲区大小。
[0056]由于数据包在发送端和接收端之间没有同步时钟,无法计算数据传输的真正时延,因此本实施例在设计抖动缓冲区大小时,以接收端的的时延为标准来衡量网络状态。
[0057]本实施例的视频直播系统基于TCP协议,该协议是一种可靠协议,不存在网络丢包。网络平稳的情况下在一个时间周期里按顺序到达的数据包数量波动比较小。然而当网络抖动严重的情况下,接收端接收到的数据包数量会迅速下降,导致缓冲区数据迅速减少,甚至为空。当网络恢复正常的时候,接收端在一瞬间会收到大量的数据包,因此缓冲区的数据激增或溢出。
[0058]假设有两个连续的音/视频包,其序号分别是i和i+Ι,则约定如下:
[0059](I)T1, T1+1:数据包i和i+Ι的内部时间戳;
[0060]⑵R1, R1+1:数据包i和i+Ι达到接收端的时间;
[0061](3) P1, P1+1:数据包i和i+Ι在本地播放的时间;
[0062](CJitter1= R 1+1_R1:数据包i和i+Ι达到接收端的时间差,由网络状态决定。
[0063]如果不存在网络时延抖动,则对任意的i和j有Jitteri= Jitter 3? R ^1-Ri =IV1-T1,在这种理想情况下,数据包不需要任何缓冲就可以直接播放,只需要满足Pw-P1 =Jitter。但在实际情况中,由于存在时延抖动,此时如果直接播放就会产生语音失真,视频表现为连续卡顿,所以必须对音/视频包缓存一段时间后播放,这样才可以使语音真实并且视频连贯。由此可知,本实施例进行抖动缓冲的目标就是:使音/视频包的播放时间间隔等于它们的内部时间戳间隔,并尽可能减少卡顿次数和延迟。
[0064]利用本实施例的基于TCP直播系统消除时延抖动的控制方法对缓冲区大小进行调整,首先引入几个参数变量:
[0065](l)min_buffer_time:预设的最小缓冲区时长阈值,即抖动缓冲区最小需要缓冲的时间,首次缓冲该时间即可以播放。但并不代表以后每次缓冲达到最小的时间就可以播放。该参数决定了正常流畅播放的最小时延。
[0066](2)max_buffer_time:预设的最大缓冲区时长阈值,即抖动缓冲区的最大缓冲时间,超出该时间的数据包会被丢弃。该参数决定了可以允许的最大时延。
[0067](3)cur_buffer_time:当前缓冲区数据时长。该变量是反应当前缓冲区中数据时长,这个值是时时刻刻在变化的,因此需要将该值与当前时刻已经获取到的max(最大缓冲区数据时长)和min(最小缓冲区数据时长)进行比较,从而更新max(最大缓冲区数据时长)和min (最小缓冲区数据时长)的值,待这个周期结束之后才能得到最终的max (最大缓冲区数据时长)和min (最小缓冲区数据时长)的值。
[0068](3.l)max: 一个调整周期内的最大缓冲区数据时长。该值反映的是一个调整周期内的时刻变化的缓冲区中数据时长的最大值。可通过上述(3)的方式来获取一个调整周期内的最终的max值。
[0069](3.2)min: 一个调整周期内的最小缓冲区数据时长。该值反映的是一个调整周期内的时刻变化的缓冲区中数据时长的最小值。可通过上述(3)的方式来获取一个调整周期内的最终的min值。
[0070](4)replay_buffer_time:初始缓冲区数据时长,是指视频直播卡顿(即缓冲区为空)之后到恢复播放所需要的缓冲数据时长。该值位于min_bufTer_time和max_buffer_time之间。该值的初始值取min_buffer_time。后续该值的大小由下面将要介绍的jitter值动态决定。
[0071](5) jitter:时延抖动值,即连续的两个音频包达到接收端的时间差,每当计算出一个jitter值即将其入栈保存起来。一段时间内的jitter值可以反映网络的抖动状态。
[0072](6)min_jitter:预设的最小时延抖动阈值,低于此值可以认为网络抖动非常小,网络流畅。
[0073](7)max_jitter:预设的最大时延抖动阈r值,超过该值可以认为网络抖动非常厉害。
[0074](S)Th:预设的缓冲区时长抖动阈值,即一个周期内缓冲区时长抖动的阈值,小于该阈值表示网络抖动很小。
[0075]在定义好以上参数变量后,则可通过本实施例的基于TCP直播系统消除时延抖动的控制方法对缓冲区大小进行调整。本实施例的控制方法根据当前网络状态好/差来对缓冲区大小进行不同的调整,其中,通过判断当前缓冲区是否为空来初步区分当前网络状态为好还是差(上述步骤S101),即当前缓冲区不为空的情况下,可认为网络状态比较好;当前缓冲区为空的情况下,可认为网络状态比较差。
[0076]考虑网络状态比较好的情况,也就是时延抖动值Jitter的值波动很小,这个时候缓冲区数据时长的变化如图2所示:在一个调整周期内缓冲区波动比较小,图2中最高点和最低点分别记为max (最大缓冲区数据时长)和min (最小缓冲区数据时长),在这种情况下缓冲区实际缓冲了过多的数据,导致延迟不低于min (最小缓冲区数据时长)。实际上这种状况下最理想的缓冲大小best_buffer_time = max - min。因此可以执行快进操作,丢弃掉缓冲区中最老的一批数据,丢弃的数据时长不超过min (最小缓冲区数据时长)或min (最小缓冲区数据时长)和min_bUffer_time (预设的
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1