一种快速缩减抖动缓冲区的方法及装置与流程

文档序号:17429234发布日期:2019-04-17 03:16阅读:217来源:国知局
一种快速缩减抖动缓冲区的方法及装置与流程

本申请涉及通信技术领域,尤其涉及一种快速缩减抖动缓冲区的方法及装置。



背景技术:

随着通信技术的快速发展,使用诸如语音、视频进行实时通信已成必不可少的通信方式。比如,使用语音聊天,使用视频软件召开远程医疗视频会议等等。例如,在利用网络发送实时通话语音数据时,发送端将检测到的语音信号封装为多个语音数据包,并通过网络将该多个语音数据包发送至接收端,接收端在接收到该多个语音数据包时,将其解封装为语音信号提供给用户,从而实现语音通信。由于实时语音通信对时延的敏感性,基本上是采取dup的传送方式,即“尽力服务”,所以就很难对语音数据包传送有很好的控制。在时变的信道中,这种服务将会导致分组丢失和不可预测的时延等,所以语音质量就得不到保证。目前衡量语音质量的参数主要包括:语音数据包传送的时延、时延抖动、语音数据包的丢包率等带宽指标。

抖动是分组延迟的变化程度。如果网络发生拥塞,排队延迟将影响发送端到接收端的延迟,并导致通过同一通讯链路上传输的分组延迟各不相同,而抖动,就是用来描述这样一延迟变化的程度。为了解决此抖动,可在数据包的接收端设置抖动缓冲区,抖动缓冲区的大小由抖动程度决定。

以包序控制抖动缓冲区的长度是在一次性收取到大量数据包时,将所有数据包都进行缓存,则不会发生丢包现象。在网络抖动,造成大量数据包在某一个输出取包间隔内到达的情况下,根据到达数据包的个数,设置抖动缓冲区长度,以此减少丢包。并在网络趋于平稳后,由于在取包间隔内到达的数据包个数减少,因而抖动缓冲区长度相应减小,以此减少抖动缓冲区造成的延迟。

在以包序控制抖动缓冲区长度的方法中,当发现抖动缓冲区长度target_level比当前接收到的数据包总长度current_level要大,需要主动收缩抖动缓冲区。由于连续收缩将会引发语音不连续情况,因此需要间隔一定时间逐渐收缩,考虑到声音连续性需要,所以收缩较慢。

受到抖动影响,若网络严重拥塞后恢复,大量语音数据包涌入抖动缓冲区,将会出现current_level较大的情况,由于current_level将影响target_level值,将造成抖动缓冲区延迟较大。此时网络已经恢复,因此target_level需要迅速减小,但受到抖动缓冲区收缩操作的制约,即使target_level减小,抖动缓冲区的收缩仍然需要大量时间。因此,需要在出现巨大抖动后,网络恢复平稳时,尽可能快速的缩减抖动缓冲区长度,以更快恢复低延迟,达到实时交流的目的。



技术实现要素:

本申请提供了一种快速缩减抖动缓冲区的方法及装置,以解决现有方法在出现巨大抖动后,网络恢复平稳时,抖动缓冲区收缩缓慢的问题。

第一方面,为实现上述目的,本申请提供了一种快速缩减抖动缓冲区的方法,所述方法包括:

检测抖动缓冲区内是否设置监测点,所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包;

如果设置有所述监测点,检测所述监测点前的数据包是否有更新;

如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1;

当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包。

优选地,所述的快速缩减抖动缓冲区的方法还包括:

检测是否设置所述参考点;

如果设置有所述参考点,搜索所述参考点前的第一个丢失的数据包;

判断所述第一个丢失的数据包之前的丢失的数据包总数与抖动缓冲区应接收的数据包总数之比是否大于第一预设比;

如果大于第一预设比,设置所述第一个丢失的数据包后面紧邻的数据包为所述监测点;

如果小于第一预设比,重置所述参考点、所述监测点与所述预设监测次数。

优选地,所述检测是否设置参考点之后,还包括:

如果没有设置所述参考点,判断是否达到使用快速缩减抖动缓冲区的预设条件,所述预设条件包括:所述抖动缓冲区内是否有超过1000ms时间长度的数据包和/或所述抖动缓冲区内丢失的数据包总数与抖动缓冲区应接收的数据包总数之比大于第二预设比;

如果达到所述预设条件,设置抖动缓冲区队列尾的数据包为所述参考点,重置所述监测点与所述预设监测次数。

优选地,所述如果设置有所述监测点,检测所述监测点前的数据包是否有更新之后,还包括:

如果所述监测点前的数据包有更新,则将更新的数据包设置为所述参考点,重置所述监测点与所述预设监测次数。

优选地,如果设置有所述监测点,检测所述监测点前的数据包是否有更新,包括:

如果新接收的数据包插入所述抖动缓冲区的位置在队列尾或在所述监测点之后,则所述监测点前的数据包没有更新;

如果新接收的数据包插入抖动缓冲区的位置在所述监测点前,则所述监测点前的数据包有更新。

第二方面,提供一种快速缩减抖动缓冲区的装置,所述装置包括:

监测点检测模块,用于检测抖动缓冲区内是否设置监测点,所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包;

数据包检测模块,用于如果设置有所述监测点,检测所述监测点前的数据包是否有更新;

数据包监测模块,用于如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1;

数据包清除模块,用于当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包。

优选地,所述快速缩减抖动缓冲区的装置,还包括:

参考点检测模块,用于检测是否设置所述参考点;

数据包搜索模块,用于如果设置有所述参考点,搜索所述参考点前的第一个丢失的数据包;

第一判断模块,用于判断所述第一个丢失的数据包之前的丢失的数据包总数与抖动缓冲区应接收的数据包总数之比是否大于第一预设比;

监测点设置模块,用于如果大于第一预设比,设置所述第一个丢失的数据包后面紧邻的数据包为所述监测点;

重置模块,用于如果小于第一预设比,重置所述参考点、所述监测点与所述预设监测次数。

优选地,所述快速缩减抖动缓冲区的装置,还包括:

第二判断模块,用于如果没有设置所述参考点,判断是否达到使用快速缩减抖动缓冲区的预设条件,所述预设条件包括:所述抖动缓冲区内是否有超过1000ms时间长度的数据包和/或所述抖动缓冲区内丢失的数据包总数与抖动缓冲区应接收的数据包总数之比大于第二预设比;

参考点设置模块,用于如果达到所述预设条件,设置抖动缓冲区队列尾的数据包为所述参考点,重置所述监测点与所述预设监测次数。

优选地,所述重置模块还用于:

如果所述监测点前的数据包有更新,则将更新的数据包设置为所述参考点,重置所述监测点与所述预设监测次数。

优选地,所述数据包检测模块具体用于:

如果新接收的数据包插入所述抖动缓冲区的位置在队列尾或在所述监测点之后,则所述监测点前的数据包没有更新;

如果新接收的数据包插入抖动缓冲区的位置在所述监测点前,则所述监测点前的数据包有更新。

第三方面,为实现上述目的,本申请提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项快速缩减抖动缓冲区的方法的步骤。

第四方面,为实现上述目的,本申请提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面任一项快速缩减抖动缓冲区的方法的步骤。

由以上技术方案可见,本申请实施例提供的一种快速缩减抖动缓冲区的方法及装置,通过检测抖动缓冲区内是否设置监测点,所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包;如果设置有所述监测点,检测所述监测点前的数据包是否有更新;如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1;当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包。通过上述执行步骤,在出现巨大抖动后,网络恢复平稳时,尽可能快速的缩减抖动缓冲区长度,以更快恢复低延迟,达到实时交流的目的。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的快速缩减抖动缓冲区的方法的第一实施例的流程示意图;

图2-3为本申请实施例提供的快速缩减抖动缓冲区的方法的具体实施流程示意图;

图4为本申请实施例提供的快速缩减抖动缓冲区的方法的第二实施例的流程示意图;

图5为本申请实施例提供的快速缩减抖动缓冲区的方法的整体流程示意图;

图6为本申请实施例提供的快速缩减抖动缓冲区的装置的结构示意图。

具体实施方式

下面通过对本申请进行详细说明,本申请的特点和优点将随着这些说明而变得更为清楚、明确。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在本申请的描述中,需要说明的是,术语“上”、“下”、“内”、“外”、“前”、“后”、“左”和“右”等指示的方位或位置关系为基于本申请工作状态下的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。此外,术语“第一”、“第二”、“第三”和“第四”仅用于描述目的,而不能理解为指示或暗示相对重要性。

首先对本发明实施例涉及的几个技术名词进行解释:

包序:语音数据包的顺序编号,一般是自然增长的整数,由发送端定义,从0开始,随后逐个加1。达到溢出临界值后,之前较小的包序值早已过期无意义,可以被复用。因此达到溢出临界值后,通常会复位重置到0,重新开始计数。

抖动缓冲区:接收端为了缓冲语音数据包的抖动,在接收到语音数据包时,先不对其进行播放而是将其保存在一个区域中,这个保存语音数据包的区域就称为抖动缓冲区。

本申请人发现,在利用网络发送语音数据包时,由于通话对时延的敏感性,基本上是采取dup的传送方式,即“尽力服务”,所以就很难对语音数据包传送有很好的控制。在时变的信道中,这种服务将会导致分组丢失和不可预测的时延(即:延迟时间)等,语音的服务质量就得不到保证。由于语音通信的实时性的特点,所以语音通信对语音质量的要求比较严格。目前衡量语音质量的参数主要包括:语音数据包传送的时延、时延抖动、语音数据包的丢包率等带宽指标。因此,在网络中可以通过保证传输的带宽,降低传送的时延、降低数据的丢包率以及时延抖动等措施来提高语音服务质量。

抖动是分组延迟的变化程度。如果网络发生拥塞,排队延迟将影响端到端的延迟,并导致通过同一通讯链路上传输的分组延迟各不相同,而抖动,就是用来描述这样一延迟变化的程度。为了解决此抖动,可在数据包的接收端设置抖动缓冲区,抖动缓冲区的大小由抖动程度决定。

抖动缓冲器是一个共享的数据区域,在这个数据区域中,每隔一段均匀的间隔,语音数据包会被收集、存储并递送到语音处理器。抖动缓冲器置于语音通讯链路的接收端,它有意地延迟、均匀输出到达的语音数据包,如此一来,终端用户就会感受到一个清晰的,没有什么失真的声音。而延迟将会影响用户体验。在严格的音视频通话中,延迟达到400毫秒就很容易被用户感知。如果将音频和视频两种通话的功能结合在一起,音频和视频的通话应该保持同步,并保证音频和视频各自的时延差额低于150毫秒,以保障良好的用户体验。然而,一般来说,保持尽可能低的通讯时延是很重要的。国际电信联盟itu建议网络时延应该保持在100毫秒以下。

抖动缓冲器分为静态抖动缓冲器和自适应抖动缓冲器。静态抖动缓冲器具有固定长度的抖动缓冲区,长度在初始化时进行设置,在工作过程中不会自动更新,其结果是对于不同的网络情况,语音延迟时间固定,语音数据包经过抖动缓冲区的时间固定,在网络抖动较为严重时,存在抖动缓冲区数据溢出而丢包情况,在网络较为优异时,又因为固定的语音处理时间,存在不理想的音频延迟时间。

自适应抖动缓冲器具有较为理想的性能,在网络抖动较大时,根据其算法机制,自动增大缓冲区长度,以减少缓冲区溢出丢包,而在网络趋于平稳时,减小缓冲区长度,以减少语音数据包延迟时间。

自适应缓冲器能够根据当前网络时延变动情况自动增减缓冲区大小,时延变动振幅的直接体现是网络传输时延的变化,也即是不同的语音数据包的接收时间戳与发送时间戳的差值的变化。因而市场上大部分自适应缓冲器均使用时间戳计算方法统计时延差别以控制抖动缓冲区大小。

目前常见的自适应抖动缓冲器一般有一套以数据包传输时延变动振幅算法控制自适应抖动缓冲区的方法。在时延变动较大时,说明网络抖动明显,此时自适应抖动缓冲器会自动扩大抖动缓冲区大小,以容纳更多的数据包排队等待平稳匀速(均匀的时间间隔)输出。而时延变动振幅由大变小时,说明网络抖动趋于平稳,此时自适应抖动缓冲器又会逐步收缩抖动缓冲区大小,同时伴随定时主动丢包过程,让抖动缓冲区长度变成自适应抖动缓冲器评估出的最小值。理论上如果时延变动振幅很小,振幅曲线趋于直线时说明数据传输处理单元运行相当稳定,抖动缓冲区可以只保留一个单位,以满足抖动缓冲器输入/输出接口异步工作时间差的要求,从而实现数据包交换透明转发效果。

前述的以时延变动振幅为依据进行抖动控制的方法中,抖动缓冲器内抖动缓冲区的调整总是以一定步长规律循序渐进地检测并增大或减小,原因就是此类抖动缓冲器是在启动后收到第一个数据包的时间开始计算的数据包传输时延变化来评估网络抖动现象。

例如:发送端匀速生产出5个时长为s的语音片段数据包,即每个数据包发送间隔时间为s,这5个数据包分别定义为p1-p5,接收端收到p1的时刻为t1,收到p2的时刻为t2,p1的网络传输时间评估参考值r1=t2-t1-s。如此往复,能够得到p3-p5到达时的t3-t5,从而总结出单位时间内线路上的语音数据包时延平均抖动时间评估值。这个评估值显然受采样时刻和采用时间区间长短影响较大,且至少滞后一个数据包时长,太短的采样时间内的评估值往往不是相对准确的。因为有可能采样计算的时间正好是网络抖动较大的瞬间,而网络上抖动在几秒内非常剧烈而后又迅速恢复平稳的情况非常常见。如此一来,以上的抖动缓冲区大小评估方法就需要更多的采样点数据收集才能做出相对准确的结果。由于增大抖动缓冲区长度就代表了更大的语音延迟时间的因素,出于对语音通话延迟导致体验下降的谨慎态度,这个缓冲区增大的过程都是周期性计算在一个经验值基础上逐步扩大或缩小的。

但是,在我们日常的实际生产系统中,由于网络限速、拥塞等因素,延迟送达的数据包到达时间并不是完全符合泊松分布的,通常是在一个瞬间收到大量的数据包。在抖动缓冲区自适应处理过程中,如果抖动缓冲区长度增大的速度赶不上因为网络阻塞、抖动等原因造成的数据包单位时间内密集到达的速度与频率,则部分数据包会因为抖动缓冲区溢出而被丢弃,在极端的网络拥塞场景下也还会造成语音卡顿的产品体验效果。

与单纯以时间戳控制抖动缓冲区大小的方法不同,还有一种以存取包次数控制抖动缓冲区大小的装置和方法。

假如在一次性收取到大量数据包时,将所有数据包都进行缓存,则不会发生丢包现象。在网络抖动,造成大量数据包在某一个输出取包间隔内(以语音数据包包为例,一般一个数据包存储40ms时长的语音数据,混音器或者播放器会定时到抖动缓冲器去获取经过抖动缓存控制处理后平稳输出的语音数据)到达的情况下,根据到达数据包的个数,设置抖动缓冲区长度,以此减少丢包。并在网络趋于平稳后,由于在取包间隔内到达的数据包个数减少,因而缓冲区长度相应减小,以此减少缓冲区造成的延迟。

不同于统计时延差别的抖动缓冲器,以包序控制的抖动缓冲器使用同时到达抖动缓冲区的包序差值作为抖动缓冲区长度。例如,有p1-p5五个语音数据包包从发送端到达接收端的抖动缓冲区,在抖动较小、基本可忽略不计时,p1-p5依次到达,此时可将抖动缓冲区缩小至最短即保留1个数据包。而倘若网络出现抖动时,有可能p1-p5接近于同时到达,此时则可设置抖动缓冲区长度为(5–1)+1=5个数据包长度,以保证不会产生丢包现象。

抖动缓冲区伸张:当发现缓冲区长度target_level比当前接收到的数据包总长度current_level要小,则需要伸张抖动缓冲区,抖动缓冲区伸张方法为:设置当前接收到的数据包总长度current_level作为新的缓冲区长度target_level,通过这种方式,抖动缓冲区的伸张很快就能实现。

抖动缓冲区收缩:当发现抖动缓冲区长度target_level比当前接收到的数据包总长度current_level要大,则需要收缩缓冲区。由于连续收缩将会引发语音不连续情况,因此需要间隔一定时间逐渐收缩。收缩方法:

1.计算抖动缓冲区长度:经过一定时间间隔,一般为500ms-1000ms,若是抖动缓冲区长度target_level在此期间持续偏大,则将target_level缩小到一定值,例如减小target_level为target_level=target_level–(target_level–current_level)÷3,即抖动缓冲区大小调整缩小近期长度差值的三分之一。

2.实际收缩操作:经过一定时间间隔(一般为500ms~1000ms),当发现抖动缓冲区中的包个数超过了抖动缓冲区长度target_level,则需要收缩抖动缓冲区,通过计算得到可以丢弃的语音数据包,将该语音数据包丢弃。但是考虑到声音连续性需求,实际收缩较慢。

受到抖动影响,若网络严重拥塞后恢复,大量语音数据包涌入抖动缓冲区,将会出现current_level较大的情况,由于current_level将影响target_level值,将造成抖动缓冲区延迟较大。此时网络已经恢复,因此target_level需要迅速减小,但受到抖动缓冲区收缩操作的制约,即使target_level减小,抖动缓冲区的收缩仍然需要大量时间。

因此,本申请的目的是在出现巨大抖动后,网络恢复平稳时,尽可能快速的缩短抖动缓冲区长度,以更快恢复低延迟,达到实时交流的目的。

下面结合附图,详细介绍本申请的具体实施例。

图1为本申请第一实施例提供的一种快速缩减抖动缓冲区的方法的流程示意图,如图1所示,所述方法包括步骤s101至s104。

s101:检测抖动缓冲区内是否设置监测点。

所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包。

所述抖动缓冲区是一个类似于采用先进先出算法的队列,按接收到的数据包的包序排列数据包。接收端在接收数据包之后,会读取该数据包的包序,然后通过顺序查找法查找到该数据包在所述抖动缓冲区应该存放的位置。大部分情况该数据包插入的位置是在所述抖动缓冲区的队列尾,即最后一个数据包是最近接收的数据包,只需在队列尾追加。部分情况下数据包乱序收到,则需要向前查找到适当的位置插入队列。每一次收到数据包并执行抖动缓冲队列插入动作的同时,都需要遍历一次抖动缓冲队列,以确定当前是否需要设置或修改所述参考点和所述监测点。

所述参考点、所述监测点是整型指针类数值,判定其预设数值是否为0即可确定是否设置所述参考点和所述监测点,是否已经处在快速缩减抖动缓冲区内的处理逻辑中。

另外,所述指针表面是指向所述数据包的包序,实质指向数据包内存地址,在后续的具体实施例中以包序表征所对应的数据包。

其中,所述丢失的数据包是指被暂时标记为丢失的数据包,如果该数据包后续被送到则为有效数据包,取消标记。

例如,所述抖动缓冲区中本应接收10个数据包,实际包序为2、3、4和8的数据包没有被送到,初始时设置包序为10的数据包为所述参考点,从包序为10的数据包开始向前搜索,查找的第一个丢失的数据包为包序为8的数据包,则可设置包序为8的数据包后面紧邻的包序为9的数据包为所述监测点,包序为9的数据包为有效数据包。

s102:如果设置有所述监测点,检测所述监测点前的数据包是否有更新。

每一次接收到数据包并执行插入动作的同时,都需要遍历一次所述抖动缓冲区队列,在此过程中可以确定所述监测点前的数据包是否有更新,具体为:

如果新接收的数据包插入所述抖动缓冲区的位置在队列尾或在所述监测点之后,则所述监测点前的数据包没有更新;

如果新接收的数据包插入抖动缓冲区的位置在所述监测点前,则所述监测点前的数据包有更新。

s103:如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1。

s104:当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包。

在上述步骤中,开始监测抖动缓冲区内数据包的接收前,需要设置一个预设的监测次数,即监测数据包接收情况的一个计数。设置所述预设监测次数之后,所述实际监测次数从0开始随着新接收数据包插入缓冲区队列动作逐渐增加,每入队一次,所述实际监测次数加1,直到所述实际监测次数达到所述预设监测次数后,丢弃所述监测点之前的所有数据包,达到快速缩减抖动缓冲区长度的目的。

在本实施例中,如果所述监测点前的数据包有更新,即有被标记为丢失的数据包被送达,插入所述监测点前的位置,则将更新的数据包设置为所述参考点,重置所述监测点与所述预设监测次数。例如,所述抖动缓冲区中本应接收10个数据包,实际包序为2、3、4和8的数据包没有被送达,初始时设置包序为10的数据包为所述参考点,如果包序为8的数据包被送达,插入到所述抖动缓冲区队列中,则将包序为8的数据包设置为新的参考点,并根据设置规则重置所述监测点和所述预设监测次数。

图2、图3为一具体抖动缓冲区数据包接收情况的流程示意图。接收pack20包导致所述抖动缓冲区的长度突变之后,一直都是pack20后面的数据包到达抖动缓冲区,则可以将在包序pack20之下的那部分抖动缓冲区丢弃,缩减抖动缓冲区的有效数据长度。

如图4所示,在第二实施例中,所述的快速缩减抖动缓冲区的方法,还包括:

s201:检测是否设置所述参考点。

在检测抖动缓冲区内是否设置监测点,如果没有设置有所述监测点后,检测抖动缓冲区内是否设置所述参考点。通过步骤s101可知,所述监测点的设置是以所述参考点的设置为基础的,所以如果没有设置所述监测点,则所述参考点的设置还需进一步的判断。所述参考点是否设置的判断准则如步骤s101中所述,在此不再赘述。

s202:如果设置有所述参考点,搜索所述参考点前的第一个丢失的数据包。

s203:判断所述第一个丢失的数据包之前的丢失的数据包总数与抖动缓冲区应接收的数据包总数之比是否大于第一预设比。所述第一个丢失的数据包之前的丢失的数据包总数统计时包括第一个丢失的数据包本身。

s204:如果大于第一预设比,设置所述第一个丢失的数据包后面紧邻的数据包为所述监测点。

例如,所述抖动缓冲区中本应接收10个数据包,实际包序为2、3、4和8的数据包没有被送到,初始时设置包序为10的数据包为所述参考点,从包序为10的数据包开始向前搜索,查找的第一个丢失的数据包为包序为8的数据包,丢失的数据包为4个,所述所述第一个丢失的数据包之前的丢失的数据包总数与抖动缓冲区应接收的数据包总数之比为4/10,大于第一预设比1/3,则设置包序为9的数据包为所述监测点。所述第一预设比为经验值,优选为1/3。

s205:如果小于第一预设比,重置所述参考点、所述监测点与所述预设监测次数。

图5为本申请实施例提供的完整的快速缩减抖动缓冲区的流程示意图。在另一具体实施例中,所述的快速缩减抖动缓冲区的方法,在检测是否设置参考点之后,还包括:

s301:如果没有设置所述参考点,判断是否达到使用快速缩减抖动缓冲区的预设条件,所述预设条件包括:抖动缓冲区内是否有超过1000ms时间长度的数据包和/或抖动缓冲区内丢失的数据包总数与抖动缓冲区应接收的数据包总数之比大于第二预设比,所述第二预设比为经验值,优选为1/3。

s302:如果达到所述预设条件,设置抖动缓冲区队列尾的数据包为所述参考点,重置所述监测点与所述预设监测次数。

步骤s301中所述的判断否达到使用快速缩减抖动缓冲区的预设条件为一个动态判断的过程,如果已经设置所述监测点或所述参考点,说明已经处于快速收缩的处理逻辑中,如果所述监测点和所述参考点均未设置或网络异常时则需要判断是否到达使用快速缩减抖动缓冲区的预设条件。网络正常传输情况下,数据包基本都是顺序准时送达,即传输时延变化很小,但一般不会是0,此时条件一定不满足,不用做过多的处理。

在步骤s302中,所述参考点首先被设置为当前的队尾,并根据设置规则设置所述监测点。随着新的数据包插入所述抖动缓冲区队列,如果新插入所述抖动缓冲区队列的数据包在队列尾,则所述参考点随着所述抖动缓冲区队列向前移动,不再是队列尾元素;如新插入所述抖动缓冲区队列的数据包在所述监测点前,则所述参考点将会被更新为新插入所述抖动缓冲区队列的数据包。

在网络较大抖动之后,由于大量数据包涌入导致抖动缓冲区长度过大,进而引起音频、视频延迟,受到现有收缩方法的制约,收缩时间较长,不能快速恢复。采用本申请所述的快速缩减抖动缓冲区的方法,可以节省大量收缩时间,更快恢复低延迟,达到实时交流的目的。

例如,所述抖动缓冲区因剧烈抖动涌入50个数据包,每个数据包时长40ms,网络恢复后,抖动缓冲区长度需要缩减为4,那么根据现有的收缩方法,假设每间隔20个数据包之后收缩一个数据包,需要经过shrink_time=(50–4)×20×40=36800ms。

利用本申请所述方法,加入50个包中,从20-45都是丢失的数据包,并且从接收到包序为50的数据包之后,包序为45的数据包之前的数据包均未有更新,那么经过预设监测次数的更新之后,开始快速收缩,总的收缩时间为shrink_time=(50–45+5)×20×40=8000ms,剩余部分则使用正常的收缩方法即可。

与本申请提供的一种快速缩减抖动缓冲区的方法实施例相对应,本申请还提供一种快速缩减抖动缓冲区的装置的实施例。参考图6,为本申请实施例提供的一种快速缩减抖动缓冲区的装置的结构示意图,所述装置包括:

监测点检测模块101,用于检测抖动缓冲区内是否设置监测点,所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包;

数据包检测模块102,用于如果设置有所述监测点,检测所述监测点前的数据包是否有更新;

数据包监测模块103,用于如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1;

数据包清除模块104,用于当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包;

重置模块105,用于如果所述监测点前的数据包有更新,则将更新的数据包设置为所述参考点,重置所述监测点与所述预设监测次数。

所述的快速缩减抖动缓冲区的装置还包括:

参考点检测模块201,用于检测是否设置所述参考点;

数据包搜索模块202,用于如果设置有所述参考点,搜索所述参考点前的第一个丢失的数据包;

第一判断模块203,用于判断所述第一个丢失的数据包之前的丢失的数据包总数与抖动缓冲区应接收的数据包总数之比是否大于第一预设比。

监测点设置模块204,用于如果大于第一预设比,设置所述第一个丢失的数据包后面紧邻的数据包为所述监测点;

重置模块105,还用于如果小于第一预设比,重置所述参考点、所述监测点与所述预设监测次数。

所述的快速缩减抖动缓冲区的装置,还包括:

第二判断模块301,用于如果没有设置所述参考点,判断是否达到使用快速缩减抖动缓冲区的预设条件,所述预设条件包括:所述抖动缓冲区内是否有超过1000ms时间长度的数据包和/或所述抖动缓冲区内丢失的数据包总数与抖动缓冲区应接收的数据包总数之比大于第二预设比;

参考点设置模块302,用于如果达到所述预设条件,设置抖动缓冲区队列尾的数据包为所述参考点,重置所述监测点与所述预设监测次数。

所述数据包检测模块102具体用于:

如果新接收的数据包插入所述抖动缓冲区的位置在队列尾或在所述监测点之后,则所述监测点前的数据包没有更新;

如果新接收的数据包插入抖动缓冲区的位置在所述监测点前,则所述监测点前的数据包有更新。

本申请实施例提供的一种快速缩减抖动缓冲区的方法及装置,通过检测抖动缓冲区内是否设置监测点,所述监测点为从参考点向前搜索到的第一个丢失的数据包后面紧邻的数据包,所述参考点为作为搜索的起始数据包;如果设置有所述监测点,检测所述监测点前的数据包是否有更新;如果所述监测点前的数据包没有更新,开始监测抖动缓冲区内数据包的接收,每监测一次则实际监测次数加1;当实际监测次数达到预设监测次数时,清除所述监测点前的所有数据包。通过上述执行步骤,在出现巨大抖动后,网络恢复平稳时,尽可能快速的缩减抖动缓冲区长度,以更快恢复低延迟,达到实时交流的目的。

根据上述快速缩减抖动缓冲区的方法,本申请实施例还提供一种可读存储介质和一种计算机设备。可读存储介质上存储有可执行程序,该程序被处理器执行时实现上述快速缩减抖动缓冲区的方法的步骤;计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的可执行程序,处理器执行程序时实现上述快速缩减抖动缓冲区的方法的步骤。

以上结合具体实施方式和范例性实例对本申请进行了详细说明,不过这些说明并不能理解为对本申请的限制。本领域技术人员理解,在不偏离本申请精神和范围的情况下,可以对本申请技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本申请的范围内。本申请的保护范围以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1