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

文档序号:9420718阅读:来源:国知局
最小缓冲区时长阈值)之间的差值,这样不会导致缓冲区无数据而卡顿,相反快进之后会减少直播的延迟。
[0077]参考图3,在上述步骤S102中,当判断当前缓冲区不为空的情况下(网络状态比较好),具体通过以下步骤来调整缓冲区数据时长:
[0078]步骤S1021、实时更新当前调整周期内的最大缓冲区数据时长max和最小缓冲区数据时长min ;具体的更新方式是实时采集(采集频率可以预先设置,采集周期远少于调整周期)当前缓冲区数据时长cur_buffer_time,并将当前缓冲区数据时长cur_buffer_time与已经获取到的最大缓冲区数据时长max和最小缓冲区数据时长min进行比较,从而实时更新最大缓冲区数据时长max和最小缓冲区数据时长min的值;
[0079]步骤S1022、判断当前(完整的)调整周期是否到达,若是,则执行步骤S1023 ;否则返回执行步骤S1021 ;
[0080]步骤S1023、当当前(完整的)调整周期到达时(此时可得到当前调整周期的最大缓冲区数据时长max和最小缓冲区数据时长min的值),通过以下公式(1)、(2)计算相关的值:
[0081]Cl1= max-min ; (I)
[0082]d2= min-min_bufTer_time (2)
[0083]其中,max为当前调整周期内的最大缓冲区数据时长,min为当前调整周期内的最大缓冲区数据时长,Cl1为当前调整周期内的最大缓冲区数据时长max与最小缓冲区数据时长min的差值;min_buffer_time为预设的最小缓冲区时长阈值,(12为最小缓冲区数据时长min与预设的最小缓冲区时长阈值min_buffer_time之间的差值。
[0084]步骤S1024、判断步骤S1023计算得到的值山和d 2是否满足以下公式(3),若是,则执行步骤S1025 ;否则不对缓冲区数据时长进行调整。
[0085]d^Th&d^O ⑶
[0086]其中,Th是预设的缓冲区时长抖动阈值。
[0087]步骤S1025、将当前采集到的(即调整周期到达时刻)的当前缓冲区数据时长CUr_bUffer_time缩短(相当于快进)一段时间(数据时长),而且缩短的数据时长少于或等于d2。
[0088]在公式(3)中,当计算出当前调整周期内的最大缓冲区数据时长max与最小缓冲区数据时长min的差值,当该差值小于预设的缓冲区时长抖动阈值Th时表示网络抖动很小,因此,如果此刻最小缓冲区数据时长min比预设的最小缓冲区时长阈值min_buffer_time大,则可以将当前缓冲区数据时长缩短(相当于执行快进操作),这样可以减少时延。另外,缩短的缓冲区数据时长(或快进的数据时长)小于或等于所述最小缓冲区数据时长min和所述预设的最小缓冲区时长阈值min_buffer_time之间的差值,这样不会导致缓冲区无数据而卡顿。
[0089]当网络状态比较差的时候,时延抖动值Jitter的值波动比较大,接收端接收到数据急剧下降,但是播放端依然按照固定的频率取数据进行播放,因此缓冲区的数据会急剧下降直至为零,导致直播卡顿。等到网络恢复正常的时候,在恢复的那一瞬间接收端突然接收到大量的数据,然后网络状态恢复到图2所示情况。如图4所示,图4中最高点记为max(最大缓冲区数据时长),缓冲区为空到再次有数据的时间间隔记为gap。这种情况下理想的缓冲大小为best_buffer_time = max+gap。由于时延抖动值Jitter波动较大导致卡顿,因此需要加大初始缓冲区数据时长(即视频直播卡顿之后到恢复播放所需要的缓冲数据时长)的大小,也就是replay_buffer_time的大小。视频直播系统由于跟用户语音互动少,对语音的时延要求不像其他单纯的语音通讯系统那么高,允许有较高的时延(例如I秒)。
[0090]在上述步骤S103中,当判断当前缓冲区为空的情况下(网络状态比较差),则首先等待直到缓冲区为空到接收到第一个数据包时,立即通过计算以将初始缓冲区数据时长增大,且增大后的初始缓冲区数据时长(即replay_buffer_time)是第二大时延抖动值的增函数。
[0091]具体的,在接收端接收数据包时,会将连续接收到的两个数据包的时间差(时延抖动值Jitter)入桟保存。其中,时延抖动值Jitter是在数据读取线程中计算得到的,保存在一个栈中,因此该栈中存放的总是最近一段时间的时延抖动值Jitter,能反映最近一段时间的网络状态。在本实施例中,当判断当前缓冲区为空到接收到第一个数据包时,即将缓冲区为空前的一段时间(优选为一个完整调整周期的1/3?1/2的时间)到接收到所述第一个数据包的时间内栈中保存的第二大值作为第二大时延抖动值Jitter,并选择该栈中第二大时延抖动值Jitter作为增大后的初始缓冲区数据时长的调整基准,即增大后的初始缓冲区数据时长为所述第二大时延抖动值Jitter的增函数。
[0092]如图5所示,优选的,本实施例调整(增大)后的初始缓冲区数据时长(r印lay_buffer_time)是第二大时延抖动值Jitter的线性增函数。在图4中,sec_jitter表示第二大时延抖动值jitter,如果该值大于max_jitter (期望的最大jitter值),则取值max_jitter ;如果该值小于min_jitter (期望的最小jitter值),则取值min_jitter。图4显示了当线性系数r分别为:r〈l、r = I以及r>l三种情况下增大后的初始缓冲区数据时长(repIay_buffer_time)与第二大时延抖动值sec_jitter的线性关系。另外,增大后的初始缓冲区数据时长(replay_buffer_time)取值在 min_buffer_time 和 max_buffer_time之间。即当所述增大后的初始缓冲区数据时长(r印lay_bUffer_time)大于预设的最大缓冲区时长阈值(max_buffer_time)时,将所述预设的最大缓冲区时长阈值(max_buffer_time)作为所述增大后的初始缓冲区数据时长;当所述增大后的初始缓冲区数据时长(replay_buffer_time)小于预设的最小缓冲区时长阈值(min_buffer_time)时,将所述预设的最小缓冲区时长阈值(min_buffer_time)作为所述增大后的初始缓冲区数据时长。
[0093]可以理解的,增大后的初始缓冲区数据时长(即replay_buffer_time)与第二大时延抖动值secjitter的增函数关系并不是唯一的,也可以采用分段线性函数等其他增函数。
[0094]可见,本实施例的基于TCP直播系统消除时延抖动的控制方法,在自适应抖动缓冲控制方法上,通过判断当前缓冲区是否为空,并在当前缓冲区不为/为空的情况下,根据当前网络状态分别对缓冲区数据时长进行缩短/增大调整,且调整的值为根据网络状态而变化的值。因此,能根据网络状态动态有效调整缓冲区大小,而且在保证平滑、确保播放流畅的前提下使时延尽量小。
[0095]参考图6,是本发明实施例中一种基于TCP直播系统消除时延抖动的控制装置的结构示意图。该控制装置包括:
[0096]判断模块21,用于判断当前缓冲区是否为空;
[0097]第一调整模块22,用于当缓冲区不为空,待当前调整周期到达时,若当前调整周期内的最大缓冲区数据时长与最小缓冲区数据时长的差值小于预设的缓冲区时长抖动阈值,且所述最小缓冲区数据时长大于预设的最小缓冲区时长阈值,则将当前缓冲区数据时长缩短,且缩短的值小于或等于所述最小缓冲区数据时长和所述预设的最小缓冲区时长阈值之间的差值;以及
[0098]第二调整模块23,用于当缓冲区为空,待缓冲区为空到接收到第一个数据包时,则将初始缓冲区数据时长增大,且增大后的初始缓冲区数据时长是第二大时延抖动值的增函数(包括线性增函数、分段线性增函数等);其中,所述初始缓冲区数据时长是缓冲区为空到恢复播放所需要的缓冲数据时长;所述第二大时延抖动值是缓冲区为空前一段时间(优选为一个完整调整周期的1/3?1/2的时间)到接收到所述第一个数据包的时间内所接收到的连续的两个数据包的时间差中的第二大值。
[0099]优选的,本实施例的第二调整模块23还用于:当所述增大后的初始缓冲区数据时长大于预设的最大缓冲区时长阈值时,将所述预设的最大缓冲区时长阈值作为所述增大后的初始缓冲区数据时长;当所述增大后的初始缓冲区数据时长小于预设的最小缓冲区时长阈值时,将所述预设的最小缓冲区时长阈值作为所述增大后的初始缓冲区数据时长。
[0100]优选的,本实施例的第二调整模块23还用于:当所述第二大时延抖动值小于预设的最小时延抖动值时,将所述预设的最小时延抖动值作为所述第二大时延抖动值;当所述第二大时延抖动值大于预设的最大时延抖动值时
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1