首页> 中国专利> 用于消除IP语音数据抖动的自适应抖动缓存实现方法

用于消除IP语音数据抖动的自适应抖动缓存实现方法

摘要

本发明涉及一种用于消除IP语音数据抖动的自适应抖动缓存实现方法,其中采用具有两级指针队列的抖动缓存,先实时检测每一帧IP数据的时间抖动数值,对于正常接收的数据帧,直接送入第二队列;如果时间抖动过大或有丢包,则将该数据帧送入第一队列,然后在第一队列中进行顺序调整、增加队列长度、或丢包补偿等处理,然后再将第一队列中的数据帧一次性传送到第二队列;如果实际时间抖动在一段时间内一直小于当前处理时延,则每次将第一队列的长度减小一个数据帧;最后将第二队列中的数据匀速输出到下一接口。通过上述步骤,可根据时间抖动的变化对抖动缓存的处理时延进行动态的调整,从而减小时间抖动的不利影响,并可根据丢包情况进行动态调整。

著录项

  • 公开/公告号CN1531276A

    专利类型发明专利

  • 公开/公告日2004-09-22

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN03107196.1

  • 发明设计人 樊荣;陈久松;方卫华;段铎;

    申请日2003-03-13

  • 分类号H04L12/56;H04L29/06;H04L12/24;H04L12/26;H04L27/01;

  • 代理机构

  • 代理人

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 15:30:37

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-05-07

    未缴年费专利权终止 IPC(主分类):H04L12/56 授权公告日:20091014 终止日期:20130313 申请日:20030313

    专利权的终止

  • 2009-10-14

    授权

    授权

  • 2005-08-17

    实质审查的生效

    实质审查的生效

  • 2004-09-22

    公开

    公开

说明书

技术领域

本发明涉及IP技术,更具体地说,涉及一种用于消除IP语音数据抖动的自适应抖动缓存实现方法。

背景技术

由于IP网络的传输特性,会对分组语音数据造成一定程度的时间抖动。延时是直接影响到IP语音质量的重要因素,也是产生抖动的根本原因,在IP网络中的延时主要包括传播延时和处理延时。传播延时是指电流或者光子在网络中以某一速度传送一段距离时所引起的延时;处理延时则是由语音传输过程中各种处理语音的设备所引起的,例如在因特网中使用的路由器、LAN(局域网)交换机、WAN(广域网)交换机等。变化的延时就会产生抖动,即由于各种延时的变化将导致数据帧经过网络到达接收端的速率发生变化。抖动带来的不利影响是可能导致语音质量的严重失真。

因此,在数据接收端必须执行数据缓存操作以消除时间抖动,通过在语音处理设备的接收端加入缓冲区,用于保存足够长的时间的数据,使最慢的数据包也能在语音还原处理之前及时的到达,从而消除抖动的不利影响。缓存的数据数量越多,接收端可以承受的数据抖动程度就越大,接收数据的丢包率就越小。丢包率是指分组语音数据包在IP网络的传输过程中丢失的数据包所占总的数据包的比率。分组语音数据包通常是采用UDP(用户数据报文协议)协议进行传输,由于UDP是一种非可靠的、无连接的数据报服务,它本身不保证服务质量,而且因特网的带宽等资源随用户数和业务量的变化而波动较大,例如拥塞和网络故障这些都是产生丢包的因素。丢包会影响语音复原的质量,当丢包率超过一定程度以后,会导致语音无法复原。

但是对数据进行缓存会产生延时,缓存的数据数量越多,数据的延时也就越大。由于语音数据的延时也同样会影响语音数据回放时的质量,所以数据的延时和丢包率是不可能同时达到最理想指标的。抖动缓存通常称为JitterBuffer,图1是在特定的网络资源情况下,JitterBuffer处理时延与对应的丢包率之间的关系示意图。

从图1中可以看出,处理时延较小时,丢包率很大;丢包率较小时,则处理时延又很大。为了兼顾处理时延和丢包率,最好能针对实际接收数据的时间抖动情况,对JitterBuffer进行实时的动态的调整。然而现有技术中还没有对JitterBuffer进行动态调整的方案,一直未能解决上述问题。

发明内容

针对现有技术的上述缺陷,本发明要对抖动缓存的处理时延进行动态、实时的调整,在维持语音质量的前提下,实现语音延时的最小化。

本发明解决其技术问题所采用的技术方案是:提供一种用于消除IP语音数据抖动的自适应抖动缓存实现方法,其中采用具有两级指针队列的抖动缓存,每次从IP网络中接收一帧IP分组语音数据,并按以下步骤进行动态调整:

(1)根据所收到的每一帧IP数据所携带的参数,实时检测并保存当前的时间抖动数值,再检测当前第一队列中是否有数据帧指针;

(2)如果当前第一队列中没有数据帧指针,则再判断当前数据帧与上一数据帧是否连续;

(2-1)如果不连续则将当前数据帧的指针送入第一队列,等待后续处理;

(2-2)如果连续则直接将该数据帧的指针送入第二队列;

(3)如果当前第一队列中有数据帧指针,则再检测其是否已满,

(3-1)如果第一队列未满,则直接将当前数据帧指针送入第一队列;

(3-2)如果第一队列已满,则将第一、第二队列的长度增加一个数据帧,再插入一个补偿数据帧并将其指针发送到第二队列,然后再将当前数据帧指针送入第一队列;

(3-3)再判断第一队列中的所有数据帧是否连续,如果连续则将第一队列中的所有数据帧指针一次性传送到第二队列,如果不连续则等待下一个数据帧;

(4)对每一帧数据执行上述步骤,并根据第二队列中缓存的数据帧指针,将相应的数据帧匀速输出到下一接口。

在本发明方法的所述步骤(4)之前,还包括以下步骤:

(A)将所测得的实际时间抖动与抖动缓存的当前处理时延进行比较,判断实际时间抖动是否在一段预定长的时间内一直小于抖动缓存的当前处理时延;

(B)如果是则从第二队列中删除一个适当的数据帧指针,并将第一队列的长度减小一个数据帧。

在本发明所述方法的所述步骤(3-2)中,先要检测抖动缓存的当前处理时延是否已达到最大值,

(3-2-1)只有在其未达到最大值时,则才将第一、第二队列的长度增加一个数据帧,再插入一个补偿数据帧并将其指针发送到第二队列,然后再将当前数据帧指针送入第一队列;

(3-2-2)如果其已达到最大值,则插入适当的补偿数据帧并将其指针发送到第一队列,然后将第一队列中的所有数据帧指针一次性传送到第二队列,再将当前数据帧指针送入第二队列,然后跳过步骤(3-3),执行后续步骤。

通过上述方案,可根据每一数据帧的时间抖动的变化或丢包情况的发生,对抖动缓存的处理时延进行动态的自适应调整,将抖动缓存的处理延时合理化,从而减小IP网络语音数据的抖动对语音数据回放质量的不利影响。另外,丢包的检测和处理操作都被嵌入到了抖动缓存的处理过程中,可进一步提高语音数据的回放质量。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是在特定的网络资源情况下,抖动缓存的处理时延与对应的丢包率之间的关系示意图;

图2是本发明中用两级指针队列来调整抖动缓存的处理时延的工作流程图;

图3是本发明中数据帧指针正常传送时的示意图;

图4是本发明中在第一队列内调整数据帧顺序的示意图;

图5是本发明中增大第一、第二队列的长度时的示意图。

具体实施方式

一、JitterBuffer的数据结构

本发明中,JitterBuffer的数据结构采用两级队列实现。队列的结构为指针队列,每一级队列中缓存有IP分组语音数据的当前地址指针,采用指针队列的目的是在数据搬运的过程中只需传送指针而不是每一步都传送IP分组语音数据,从而可避免数据的拷贝。采用两级队列的目的是为了简化JitterBuffer操作控制的复杂度,将数据的输出与输入操作进行分开管理。其中的第一队列负责数据的输入操作,可实现对接收数据的顺序调整、丢包补偿;第二队列负责数据的输出操作,是JitterBuffer处理的对外数据输出接口,可实现数据包之间的时间间隔调整,保证数据的匀速输出。第一队列与第二队列的最大长度也就是JitterBuffer的最大处理时延。

二、JitterBuffer处理时延的动态调整

本发明方法中,对处理时延进行动态调整的基本流程如图2所示。其中JitterBuffer的初始处理时延可设置为3个数据帧的时间长度,以G.729编码数据为例,则其初始处理时延为30ms;

本发明的抖动缓存在接收数据帧时,将实时检测并保存其接收到的每一个数据帧的时间抖动。

1、正常接收处理

从图2中可以看出,正常接收时的流程为步骤1、2、3、4、5、17、以及步骤21,其中:

由步骤3到步骤4,此时第一队列中没有数据帧指针,表示前面的接收一直正常;

由步骤4到步骤5,当前数据帧与上一数据帧连续,表示没有丢包;

由步骤17到步骤21,说明实际时间抖动在一段预定长的时间内为正常,没有一直小于抖动缓存的当前处理时延,不需要减小队列的长度。

如图3所示,正常接收时,所有的数据帧指针会跳过第一队列,直接送到第二队列,再由第二队列匀速输出到下一接口。

2、实际抖动较大或有丢包

从图2中可以看出,由步骤4到步骤6,说明由于抖动较大或丢包的原因,收到了与前一数据帧不连续的数据帧,漏收了其前面的一个或多个数据帧,此时将该数据帧指针送入第一队列,当收到下一帧数据时,第一队列不再为空,将由步骤3跳到步骤7。如图4、5的最左边所示,第1个数据帧为正常接收,其指针放到第一队列中;之后本应收到第2个数据帧,却收到了第3个数据帧,所以将第3个数据帧指针放到第二队列中。

3、第一队列未满但不需要增加队列长度

从图2中可以看出,此时的流程是由步骤7、11、12到步骤13。

由步骤7到步骤11,表示由于前面的抖动较大或丢包的原因,至少有一个与前面不连续的数据帧已被放到第一队列中,且第一队列未满,此时将当前数据帧指针也放入第一队列。如图4、5的第二排所示,当收到第4个数据帧时,其指针也放到第一队列中。

由步骤12到步骤13,表示当前放入第一队列的数据帧指针正好是前面漏收的数据帧,使第一队列中的各个数据帧指针成为连续状态,此时将第一队列中的所有数据帧指针一次性传送到第二队列。如图4的第三、第四排所示,在第4个数据帧之后又收到了第2个数据帧,与第3、第4构成三个连续的数据帧,此时将这三个数据帧指针一次性传送到第二队列。

4、第一队列已满且其长度未达最大值

从图2中可以看出,此时的流程是由步骤7、8、9、10到步骤11。

由步骤7到步骤8,表示由于前面的抖动较大或丢包的原因,至少有一个与前面不连续的数据帧已被放到第一队列中,且第一队列已满。如图5的第二排所示,原来的队列长度为4个数据帧,当收到第5个数据帧时,第一队列已满。

由步骤8到步骤9、10、11,表示第一队列虽然已满,但其长度未达到最大值(本实施例中为200ms),如图5的第三排所示,此时需将第一、第二队列的长度增加一个数据帧,队列长度变为5个数据帧,然后再插入一个补偿数据帧A并将其指针发送到第二队列,再将第5个数据帧指针送入第一队列。

其中,由于未收到第2个数据帧,所以插入的补偿数据帧A用于代替第2个数据帧,该补偿数据帧A是根据第1帧数据进行线性预测所得的结果。如果有多个数据帧丢包时,为了避免在补偿的过程中产生哑音,插入补偿数据帧的总时间长度不应大于60ms,对于大于60ms的JitterBuffer增量,在插入总时间长度为60ms的补偿数据帧后,剩余部分将插入舒适噪音。

在上述过程中,JitterBuffer的处理时延的增加是实时的,从而可以针对IP网络侧突发的数据抖动情况进行处理,以消除其不利影响。

5、第一队列已满且其长度已达最大值,不能增加队列长度

由步骤8到步骤14、15、16,表示第一队列已满,并且其长度已达到最大值,此时不能再增加队列长度。假设未收到第2个数据帧,则在第一队列中第2个数据帧的位置处插入一个补偿数据帧,然后将第一队列中的所有数据帧指针一次性传送到第二队列,再将当前数据帧指针送入第二队列。

6减小JitterBuffer的处理时延

从图2中可以看出,本发明中,每收到一个数据帧,都要用所测得的时间抖动与JitterBuffer的当前处理时延进行比较,同时参考RTCP(RealtimeTransport Control Protocol,实时传输控制协议)数据的参数计算结果,如果发现网络的抖动在预定长的时间段(例如100个数据帧的总时间长度)内一直小于JitterBuffer的当前处理时延,则需要减小JitterBuffer的处理时延,具体方式是先从第二队列中删除一个适当的数据帧指针,再将第一队列的长度减小一个数据帧。

为了保证一定的队列长度,先要检测抖动缓存的当前处理时延是否已达到最小值(本实施例中设为30ms),即3个数据帧的时间长度,只有在其长度未达最小值时,才从第二队列中删除一个适当的数据帧指针,并将第一队列的长度减小一个数据帧。

具体的减小操作应在静音期间对第一队列中的非传输数据帧进行删除来实现,这样做的目的是为了避免删除正常的语音数据对语音质量造成额外的影响,从而可保证不影响正常的语音数据。

本发明中,对每一个数据帧都将执行图2所示的流程,并按其判断结果执行相应的步骤。其中第一队列与第二队列之间的数据帧指针传递是实时的,无时间间隔,即在第一队列处理完毕以后立刻将所以处理完毕的数据帧指针一次性的传递给第二队列。因此,虽然动态调整时接收的数据帧指针将经过两级队列的处理,但是在正常的时候数据帧指针的总体延时只是一个队列的延时。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号