首页> 中国专利> 用于网络节点的简单适配抖动缓冲器算法

用于网络节点的简单适配抖动缓冲器算法

摘要

一种对网络节点的适应性抖动缓冲器的缓冲器延迟进行动态调整的方法,所述网络节点从分组交换网络接收媒体流的分组。该方法包括:将到达网络节点的分组插入到抖动缓冲器中;以及每Trepin执行一次抖动缓冲器过程,其中,Trepin等于抖动缓冲器输出间隔。执行抖动缓冲器过程涉及:基于抖动缓冲器中未决分组的数目N的变化,更新抖动保护时间Tjit,其中,Tjit定义了最大缓冲延迟的当前目标值。

著录项

  • 公开/公告号CN101926134A

    专利类型发明专利

  • 公开/公告日2010-12-22

    原文格式PDF

  • 申请/专利权人 艾利森电话股份有限公司;

    申请/专利号CN200880125367.9

  • 发明设计人 阿托·尤哈尼·马孔恩;

    申请日2008-01-25

  • 分类号H04L12/56(20060101);H04L12/26(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人赵伟

  • 地址 瑞典斯德哥尔摩

  • 入库时间 2023-12-18 01:26:38

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-06-19

    授权

    授权

  • 2011-03-02

    实质审查的生效 IPC(主分类):H04L12/56 申请日:20080125

    实质审查的生效

  • 2010-12-22

    公开

    公开

说明书

技术领域

本发明总体涉及根据抖动缓冲器中未决分组的数目变化对该抖动缓冲器的延迟进行适配的简单方法。

背景技术

当诸如媒体网关等网络节点从传输延迟趋向于在很大范围内变化的接口接收在诸如电话业务等常规媒体服务中的媒体流时,在网络节点的输入处将需要抖动缓冲器,以保证从该网络节点到其它接口的输出的连续和恒定的速率,这可能要求极为有限的输出定时的变化。

参考图1对在网络节点中进行抖动缓冲的总体原理进行描述。将理解的是,为简明起见,只有对理解抖动缓冲必要部分才在图中示出,而省略了语音处理功能所必须的其它部分,例如语音编码器和解码器。基于相同的原因,该图仅描述了如何在一个方向上(即,在上行链路中)执行媒体传输,而省略了使得双向对话完整的下行链路传输。

在图1中,被配置为在媒体流中向一个或多个用户传送实时数据的语音源100以恒定时间间隔(Trepin102)产生分组。当通过分组交换网络101对分组进行路由时,将对媒体流引入非恒定的传输延迟。在图中将这种被称为抖动的现象示意为以不规则的间隔103离开网络101的分组。由于在根本没有分组到达的时间间隔之后,可能有很多的分组以很短的时间间隔(即,突发)到达中间网络节点104,分组到达网络节点的模式可能难以预测和掌握。

将抖动保持在控制之下的一般方式是在中间网络节点104处实现抖动缓冲器105。除了网络所导致的传输延迟外,抖动缓冲器105还将引入可以被识别为抖动保护时间Tjit106的另一延迟,因为到达该网络节点的分组被缓冲107到抖动缓冲器中,之后以与Trepin等效的已恢复恒定间隔Trepout109从该网络节点输出108。现在,可以经由对不能容忍抖动的另一传输网络110(典型地,电路交换网络)将分组转发给一个或多个终端实体(未示出)。

如果Tjit 106是预设的常数,抖动缓冲被称为静态缓冲,从而所有被缓冲的分组将经历相同的抖动缓冲延迟。如果另一方面允许Tjit106基于对网络节点的输入处的延迟行为的某种分析而改变,则反之缓冲方法被称为适应性抖动缓冲。

为了避免比绝对必要的延迟更长的延迟,适应性抖动缓冲比静态缓冲更优选。为了正确地进行操作,必须针对最差情况的延迟变化对确定支持抖动缓冲的抖动缓冲器的大小,从而,静态缓冲所引起的延迟将典型地比动态缓冲所需要的延迟高得多,特别是当最差的情况相对地很少出现时尤其如此。

通常针对终端或客户端的接收端来开发适应性抖动缓冲算法,典型地,终端或客户端被分配给单个最终用户。然而,在网络节点中,一个处理单元典型地被数以十计或者甚至数以百计的并发用户或流实例所共享。在这种情况下,为了使运营商将每通道处理开销保持在低水平,缓冲算法的简单性将变成致命的问题。

当确定网络缓冲器大小时,通常在简单性和必须被考虑到的感知质量之间存在着折衷。这意味着,在质量不是必须到达典型的最终用户终端处所必须的质量等级的情况下,在网络节点处实现的缓冲算法应该尽可能地简单,然而在质量上仍然应该足够地好。与在端用户终端处所要求的相比,可缩放输出要求网络节点处相当复杂的功能。在网络节点中,通常通过跳过分组或帧来进行加速或追赶,而通过插帧(即,作为错误隐藏分组)来实现减速。

发明内容

本发明的目的是解决以上所描述的问题中的至少一些。具体地,目的在于,提供可以根据缓冲器中未决分组(pending packets)的数目变化来适应性地进行调整的抖动缓冲器的适应性延迟。

根据第一方面,提供了一种对网络节点的适应性抖动缓冲器的缓冲器延迟进行动态调整的方法,所述网络节点从分组交换网络接收媒体流的分组,其中,所述方法包括以下步骤:

-将到达网络节点的分组插入到抖动缓冲器中,以及

-每Trepin执行一次抖动缓冲过程,Trepin等于抖动缓冲器输出间隔,其中,基于抖动缓冲器中未决分组的数目(N)的变化,更新抖动保护时间(Tjit),抖动保护时间(Tjit)对最大缓冲延迟的当前目标值进行定义。

所述抖动缓冲过程可包括以下初始步骤:

-确定所述媒体流当前是否处于静默期,或者最近接收到的分组是语音分组还是SID,以及

-在最近接收到的分组是语音分组的情况下,在谈话迸发期间执行用于更新Tjit的适配过程,或者

在所述媒体流当前处于静默期的情况下或在最近接收到的分组是SID的情况下,在静默期期间执行用于更新Tjit的适配过程。

用于在对话突发或媒体迸发期间调整Tjit的适配过程可以包括以下步骤:

-监控N,以在适配间隔(ADAPT_INT)期间登记N的最小值(Nmin)以及N的最大值(Nmax),ADAPT_INT定义了适配过程的预定迭代次数,

-基于N的变化,定义Tjit的更新后目标值(Tj),使得:

Tj=(Nmax-Nmin)*Trepin

Tj是Tjit所需调整的指示符,以及

-在自Tjit的最后一次调整起适配过程的迭代次数等于ADAPT_INT的情况下,调整Tjit

此外,所述调整步骤可包括以下步骤:

-在N的变化高于当前Tjit所能处理的变化的情况下,根据Tj增大Tjit,或者在当前Tjit的大小是针对比当前变化大的N的变化而确定的情况下,根据Tj降低Tjit

此外,所述调整步骤还可包括以下步骤:

-在Tj超过Tjit的情况下,立即将Tjit更新为等于Tj,执行快速攻击,或者

将Tjit逐渐降低至当前Tj,执行慢衰减,以及

在当前最大缓冲器延迟时间(N*Trepin)超过预定阈值(catchUpLimit)的情况下,以缓和的速率将最旧的分组从缓冲器逐渐丢弃,直到Tjit与N的当前变化相对应。

在尚未更新Tjit并且当前Tj超过当前Tjit的情况下,catchUpLimit可被定义为:

catchUpLimit=Tj+Trepi

否则,将catchUpLimit定义为:

catchUpLimit=Tjit+Trepin

如果在静默期期间或者在最近接收到的分组是SID的情况下,用于对Tjit进行适配的适配过程可以包括以下步骤:

-如果自所述过程所执行的最后一次Tjit的适配起,谈话迸发期间用于进行适配的过程的迭代次数超过预定静默期适配限制(DTXLimit),更新Tjit

-基于N的变化,定义Tjit的更新后目标值(Tj),使得:

Tj=(Nmax-Nmin)*Trepin

Tj是Tjit所需调整的指示符,其中,Nmax和Nmin分别是已在适配间隔(ADAPT_INT)期间测量的N的最大值和最小值,ADAPT_INT定义了适配过程的预定迭代次数,以及

-在N的变化高于当前Tjit能够处理的变化的情况下,根据Tj增大Tjit

所述调整步骤还可以包括以下步骤:

-在Tj超过Tjit的情况下,立即将Tjit更新为等于Tj,执行快速攻击,以及

-在当前缓冲器延迟时间(N*Trepin)超过预定阈值(catchUpLimit)的情况下,以缓和的速率将最旧的分组从缓冲器逐渐丢弃,直到Tjit与N的当前变化相对应,其中,可以将catchUpLimit定义为:

catchUpLimit=Tj+Trepin

所述媒体流可以是音频流或者视频流。

根据另一方面,提供了一种包括用于从分组交换网络接收媒体流的分组的适应性抖动缓冲器在内的节点,所述节点适于动态调整缓冲器延迟,其中,所述节点包括:

-用于接收到达节点的分组的接收单元,以及

-缓冲单元,用于将到达网络节点的分组插入到抖动缓冲器中,并且每Trepin执行一次抖动缓冲器过程,Trepin等于抖动缓冲器输出间隔,其中,基于抖动缓冲器中未决分组的数目(N)的变化,更新抖动保护时间(Tjit),抖动保护时间(Tjit)对最大缓冲器延迟的当前目标值进行定义。

所述缓冲单元可适于执行以下步骤:

-确定所述媒体流当前是否处于静默期,或者最近接收到的分组是语音分组还是SID,以及

-在最近接收到的分组是语音分组的情况下,在谈话迸发期间执行用于更新Tjit的适配过程,或者

在所述媒体流当前处于静默期的情况下或在最近接收到的分组是SID的情况下,在静默期期间执行用于更新Tjit的适配过程。

在缓冲单元在谈话迸发或媒体迸发期间执行用于更新Tjit的适配过程的情况下,所述缓冲单元还适于执行以下步骤:

-监控N,以更新在适配间隔(ADAPT_INT)期间登记的N的最小值(Nmin)以及N的最大值(Nmax),

-基于N的变化,定义Tjit的更新后目标值(Tj),使得:

Tj=(Nmax-Nmin)*Trepin

Tj是Tjit所需调整的指示符,以及

-在自Tjit的最后一次调整起适配过程迭代次数等于ADAPT_INT的情况下,调整Tjit

当执行所述调整步骤时,所述缓冲单元还可适于执行以下步骤:

-在N的变化高于当前Tjit能够处理的变化的情况下,根据Tj增大Tjit,或者

在当前Tjit的大小是针对比当前变化大的N的变化而确定的情况下,根据Tj降低Tjit

此外,当执行所述调整步骤时,所述缓冲单元可适于进一步包括以下步骤:

-在Tj超过Tjit的情况下,立即将Tjit更新为等于Tj,执行快速攻击,或者

将Tjit逐渐降低至当前Tj,执行慢衰减,以及

在当前最大缓冲器延迟时间(N*Trepin)超过预定阈值(catchUpLimit)的情况下,以缓和的速率来将最旧的分组从缓冲器逐渐丢弃,直到Tjit与N的当前变化相对应。

所述缓冲单元还可适于在尚未更新Tjit并且当前Tj超过当前Tjit的情况下将catchUpLimit定义为:

catchUpLimit=Tj+Trepin

否则,将catchUpLimit定义为:

catchUpLimit=Tjit+Trepin

如果在静默期期间或者如果最近接收到的分组是SID,所述缓冲单元代之还可适于执行以下步骤:

-如果自所述过程所执行的最后一次Tjit的适配起,谈话迸发期间用于进行适配的过程的迭代次数超过预定静默期适配限制(DTXLimit),更新Tjit

-基于N的变化,定义Tjit的更新后目标值(Tj),使得:

Tj=(Nmax-Nmin)*Trepin

Tj是Tjit所需调整的指示符,其中,Nmax和Nmin分别是已在适配间隔(ADAPT_INT)期间测量的N的最大值和最小值,ADAPT_INT定义了适配过程的预定迭代次数,以及

-在N的变化高于当前Tjit能够处理的变化的情况下,根据Tj增大Tjit

在所述调整步骤期间,所述缓冲单元还可适于执行以下步骤:

-在Tj超过Tjit的情况下,立即将Tjit更新为等于Tj,执行快速攻击,以及

-在当前缓冲器延迟时间(N*Trepin)超过预定阈值(catchUpLimit)的情况下,以缓和的速率将最旧的分组从缓冲器逐渐丢弃,直到Tjit与N的当前变化相对应。

附图说明

现在将通过示例性实施例的方式并参考附图来更详细地描述本发明,在附图中:

图1示意了根据现有技术的抖动缓冲的原理的基本总体示意。

图2a-d示意了根据所要求保护的发明、针对缓冲器操作的抖动缓冲水平的可能变化。

图3示意了依照一个实施例的、分组接收和定时的总体原理。

图4示意了依照一个实施例的、总体抖动缓冲算法。

图5示意了依照一个实施例的、可操作于谈话迸发或媒体迸发期间的适配过程。

图6示意了依照一个实施例的、可操作于静默周期期间或在静默周期的起始的适配过程。

图7示出了依照一个实施例的、用于逐渐将缓冲器延迟适配得更小的过程。

图8示意了根据一个实施例的、包括适于依照抖动缓冲算法进行操作的适应性抖动缓冲器在内的典型网络节点。

图9a示意了根据禁用DTX的一个实施例的、抖动缓冲器算法的示例性性能。

图9b示意了根据启用DTX的另一个实施例的、抖动缓冲器算法的另一示例性性能。

具体实施方式

简而言之,本发明涉及简单适应性抖动缓冲算法,并且更具体地,涉及基于抖动缓冲器中未决分组的数目变化,对该抖动缓冲器的延迟进行适配的方法。

诸如媒体网关等网络节点接收从实时流源发送、并经由引入不可预测的传输延迟(即,分组流的抖动)的分组交换网络路由的分组。为了能够处理抖动,从而允许从网络节点以恒定的延迟的输出,并且为了使缓冲所引入的延迟保持在低水平,向节点提供适应性抖动缓冲器。对于这种典型地对数目众多的并发用户进行处理的抖动缓冲器,为了以良好的性能工作,简单的缓冲算法将是令人期望的。

抖动缓冲器所产生的延迟由抖动保护时间Tjit来确定,Tjit是这样的参数,如果经过优化,Tjit将使得缓冲器能够处理该缓冲器中各种数目的未决分组,即对到达的分组进行缓冲,而不必丢弃任何分组,除非是故意丢弃分组的情况(即,在追赶期间,为了根据当前的抖动情况调整延迟而执行分组丢弃)。

从源到输出的总延迟是传输延迟和缓冲引入的延迟之和,即,分组的传输延迟越长,缓冲延迟将会越短,反之亦然。Tjit将为最大缓冲延迟定义目标值。这意味着,仅当传输延迟为其最小值时,所经历的缓冲延迟才逼近Tjit。应该尽可能地将缓冲延迟保持为常数,并同时保持其尽可能小。这些要求是矛盾的并需要折衷。

通过基于抖动缓冲器中未决分组的数目变化来连续地对Tjit进行适配,将可能使抖动缓冲器延迟与在网络节点的输入处所经历的抖动行为相适应,并与上述要求相适应。

根据所要求保护的发明的一个实施例,将对抖动缓冲器中未决分组的数目N进行连续监控,并且将使用监控到的值中的最高值和最低值(即,分别为Nmax和Nmin)来确定未决分组的数目变化。

在携带语音分组的谈话迸发或携带媒体分组(如视频)的媒体并发期间,将在特定的短的适配间隔(定义为ADAPT_INT)内登记未决分组的数目变化,其中,ADAPT_INT是预定的调谐参数,指示将以其对Tjit进行更新的最小间隔。在谈话迸发或媒体迸发期间,将以规则的间隔来执行适配过程,其中,每一次迭代对计数器进行递增。一旦计数器等于ADAPT_INT,将相应地对Tjit进行适配。在对Tjit进行适配之后,将通过追赶来调整抖动缓冲器的内容,即,如果需要,通过从抖动缓冲器丢弃分组来进行调整。由于必须以连续的速率从抖动缓冲器和网络节点传送分组,适配过程后,将取出并处理分组或产生隐藏分组。

取决于所预期的N的变化,另一参数Tj给出对Tjit的新目标值的指示,即,对是否应该将Tjit适配得大些或小些的指示,可将Tj表达为:

Tj=(Nmax-Nmin)*Trepin    (1)

其中,Trepin是标称重复间隔,分组根据Trepin从源发送,Trepin与标称重复间隔Trepout相等,分组是根据Trepout从抖动缓冲器和网络节点传送的。

现在参考图2a-d,对根据一个实施例的、针对适应性抖动缓冲器的不同场景和使用所提出的适应性抖动缓冲算法的缓冲器的效果进行描述。图2a和2b示意了一个典型的场景,其中,图2a示出了抖动缓冲器中未决分组的最小数目Nmin,而图2b示出了在被定义为ADAPT_INT*Trepin的时间间隔中登记的未决分组的最大数目Nmax

在图2a和2b所描述的场景中,未决分组的数目变化相当大。可以将这样的场景表达为:

Tj>Tjit    (2)

显然,未决分组的变化导致超过当前抖动保护时间Tjit的Tj,即,Tj指示为了使抖动缓冲器能够处理当前抖动的变化,必须增大Tjit

另一方面,图2c和2d示出了抖动缓冲器中未决分组的数目变化低的情况。相反,可将该情况描述为:

Tj<Tjit    (3)

在该场景中,当前Tjit具有使缓冲器能够相应地处理所有到达分组的值,但是该值扩大了当前延迟,因而作为结果,通过加速即通过不时地丢弃分组/帧,可以并且将会使得该延迟更小。显然,Tjit也将被适配得更小。

当在网络节点的输入处的传输延迟长时,抖动缓冲器中分组的数目逐渐降低。如果分组被延迟了超过Tjit容忍的当前值,未决分组的数目甚至可以达到零。图2a和2c中示意了示意出长传输延迟的场景。如果缓冲器已经变空,当应该在谈话迸发或媒体迸发期间输出分组时,错误隐藏将被插入到缓冲器中,使得节点能够以恒定的速率连续输出。实际上,这被称为输出的嵌入式变缓。

在典型的后续场景中,传输延迟倾向于不时地针对有限的时段变短,使得在缓冲器输入处的到达间隔时间变得短于源处的分组的标称重复间隔Trepin。抖动缓冲器输出处的输出间隔必须是恒定的(即,等于Trepin),以向一个或多个终端实体提供良好质量的语音这一事实可导致,抖动缓冲器中未决分组的数目逐渐增加的情况。图2b和2d示意了这种情况。

如果在不导致任何分组丢失的情况下出现延迟峰值,在途分组将或者以突发的形式或者以短的到达间隔时间最终到达缓冲器,并且抖动缓冲器中未决分组的数目N甚至可超过先前设置的上限。如图2b中所指示的,这意味着从现在开始,有效抖动保护时间或Tjit的目标值(即,Tj)可能已经增大到高于当前Tjit值的水平。

如果长的延迟峰值和突发间歇地出现,导致抖动缓冲器水平增加到高于Tjit的当前值,所提出的抖动缓冲器算法将调整Tjit,使得Tjit立即增大以满足所监控的Nmax和Nmin之差以及Tj的当前值。典型地,这种场景被称为快速攻击。

如果不再有长的延迟峰值,并且后续突发具有下降的特性,缓冲器中未决分组的数目变化将逐渐地再次变小。然而,如图2d所示,Tjit将保持在相对高的水平。在这种情况下,缓冲算法将开始跳过并以特定的缓和的速率从缓冲器中丢弃最旧的分组,直到Tjit再次到达与Tj相对应的水平。实际上,这被称为输出的嵌入式加速,并且还被称为慢衰减或适配追赶。从而,所描述的适配算法具有快速的攻击,但慢的衰减。

根据本实施例、特别适于在网络节点中操作的适应性抖动缓冲机制依赖于简单的适配算法。现在将参考图3至图7,更详细地对这种算法的总体原理进行解释。

抖动缓冲器将以规则的间隔Trepin对到达网络节点的分组进行处理,从而,将要求抖动缓冲器输入的适当定时。现在将参考图3,对在处理到达语音分组的场景中如何实现适当定时进行描述,所述到达语音分组是从语音源发送的。

图3的框图示出了抖动缓冲器处的分组接收和定时的总体原理。根据附图,当典型地具有变化延迟的分组从传输网络到达时,被放入到抖动缓冲器中,并且将有规律地(即,以时间间隔Trepin,典型地,可以是例如20ms)执行在图中以A来指示的适应性抖动缓冲机制。

在第一步骤3:1中,通过初始化在抖动缓冲器保护时间Tjit的后续适配期间所需的变量,开始缓冲。重置对缓冲器中当前未决分组的数目进行指示的N、Nmax以及两个计数器cntr1和cntr2。在步骤3:1处所执行的初始化期间,还将Nmin设置为预定义的值MAX_VAL,MAX_VAL已经被选择为足够高的值,使得在任何环境下MAX_VAL都不会被抖动缓冲器中未决分组的数目N所超过。从而,可以将MAX_VAL设置为1000,或者设置为处理单元的最大正整数值,如32767。

为了在分组的接收期间提供适当的定时,可以如下定义时间间隔T:

T=currT-prevT(4)

其中,currT表示主机所给出的当前时间,prevT表示执行抖动缓冲器算法A的先前时间。在步骤3:1处,设置prevT等于currT,同时重置时间间隔参数T。还将Tjit设置为适合的初始值,范围在Tjitmin到Tjitmax之间,作为针对Tjit指定的可接受适配范围。典型地,Tjitmin和Tjitmax是根据缓冲器输入接口而选择的配置参数。Tjitmin的典型值可以是例如20ms,而Tjitmax可被设置为例如200ms。从而,可以例如如下获得针对Tjit的适合的初始值:

Tjit=(Tjitmin+Tjitmax)/2  (5)

如步骤3:2以及另一步骤3:3所指示的,只要时段Trepin尚未过去(在步骤3:5处将对此进行连续地检查),到达网络节点的分组便将被放入到抖动缓冲器中。在后续的步骤3:4中,将计数器增1,并在重复对到达分组进行处理的循环(在步骤3:2处再次开始)之前,在另一步骤3:6处对缓冲器的定时T进行更新。

然而,一旦Trepin已过去,将执行适于执行抖动缓冲的过程A。在抖动缓冲过程A的执行之后,如步骤3:7所指示的,将通过设置prevT和currT来重置缓冲器的定时,并且将重复起始于步骤3:2的、将到达分组放入抖动缓冲器的过程。

如步骤3:5所指示的,每个Trepin将执行一次抖动缓冲器过程。现将参考图4的框图,更详细地描述根据一个实施例的这种抖动缓冲过程的示例。

如果启用了语音的非连续发送(DTX),首先应该确定接收到的语音是否在静默期内,或者最近接收到的分组是否是静默描述符,即SID。后一个检查伴随着从抖动缓冲器中查看最近接收到的分组,其中,在还没有实际地从缓冲器取出任何分组的情况下,从缓冲器访问该最近的分组的相关内容。在这种情况下,该相关内容将会是帧类型,即SID或语音。如果满足了这些条件中的任何一项,框图将前进至C分支。下面将参考图6对C所定义的过程进行更详细地描述。

然而,如果这些条件都不满足,或者如果禁用DTX,框图将代之以转向B分支,并且将执行用于处理谈话迸发的抖动缓冲器适配过程。下面将更详细地描述根据一个实施例的这种过程的示例,这次参考图5。

如果在抖动缓冲过程A的初始步骤4:1处识别出正在进行的谈话迸发,方框图将转向B分支,其中,将执行适于处理谈话迸发的适配过程。当导致更新后的Tjit的过程B已终止时,如步骤4:2所指示的,首先确定抖动缓冲器是否为空。

如果发现缓冲器为空,那么仍然必须从其传送某些内容,从而在该过程在最终步骤4:4处终止前,如下一步骤4:3所指示的,将错误隐藏插入到缓冲器中。然而,如果当前在抖动缓冲器中存在一个或多个分组,代之以确定谈话迸发是否位于起始处。在后续的步骤4:5处进行该检查。如果发现谈话迸发并未处于起始处,如步骤4:7所指示的,从缓冲器取出最旧的分组,从而,如步骤4:8所指示的,将N减1,并在分支在步骤4:4处终止之前,在另一步骤4:9中相应地处理最旧的语音分组。

然而,如果在步骤4:5中发现谈话迸发位于起始处,下一步骤是确定抖动缓冲器中最旧的分组是否已被缓冲得久到需要处理,即,比Tjit长或者等于Tjit。这在另一步骤4:6处执行。如步骤4:17所指示的,在该步骤发生之前,不会从抖动缓冲器取出任何东西,并且将代之以将舒适噪声插入到缓冲器中。

在静默期期间,以低于谈话迸发期间的速率来从发送源发送分组或SID帧,并且该过程必须检查何时应该处理SID帧,或何时没有可以从抖动缓冲器中取出的内容。

相反,当在适配过程C处已经对Tjit进行了适配时,如下一步骤4:10所指示的,首先再次检查语音是否处于静默期。这将是必须的,因为当抖动缓冲器中最旧的分组仍在谈话迸发中时,还转至C分支,然而,最新查看的分组已是SID。如果发现语音并非处于静默期时,如步骤4:7至4:9所指示的,将取出最旧的分组并对其进行处理,就像针对谈话迸发的情况一样。与谈话迸发的情况相类似,然后在最后的步骤4:4处终止抖动缓冲过程,并且起始于图3中的定时重置步骤3:7,算法继续处理到达网络节点的分组。

相反,如果在步骤4:10中发现语音处于静默期,仍然必须以Trepin的恒定分组速率从网络节点的抖动缓冲器传送某些内容。在这种情况下,步骤4:11中执行的下一步骤将是,检查是否到了从缓冲器取出SID的时候。该检查基于已知的SID帧间隔,如,在静默期期间,每隔7个帧可以出现一个SID。如果还不是取出SID的时间,将代之以在缓冲器输出插入舒适噪声,以在当静默期期间降低输入速率时,仍保持恒定的输出速率。舒适噪声的特性由SID帧进行更新,并且在步骤4:17处插入该舒适噪声。

相反,如果在步骤4:11中发现到了从抖动缓冲器取出SID的时间,但是在下一步骤4:12中发现抖动缓冲器是空的,将在后续的步骤4:13处产生SID隐藏,而不是执行SID处理。然而,如果在抖动缓冲器中确实有一个或多个未决分组,将如后续步骤4:14所指示的,代之以从抖动缓冲器取出最旧的分组,然后在后续步骤4:15中将N减1,并在下一步骤4:16中处理SID。

在静默期期间,与是否已经取出SID无关,总是将舒适噪声插入至输出。因此,在步骤4:13处执行的SID隐藏以及步骤4:16处执行的SID处理之后,将在后续步骤4:17中将舒适噪声插入到抖动缓冲器中。

接下来,在最终步骤4:4处终止该分支,并且如图3的循环所指示的,算法通过将到达分组放入到网络节点的抖动缓冲器中来继续处理该到达分组。

现将参考图5的框图,更加详细地描述将在谈话迸发期间执行的适配过程(在图4中被称为B)。

在第一步骤5:1中,确定当前在抖动缓冲器中是否有多于该缓冲器所能处理的未决分组,即,是否:

N*Trepin>Tjitmax  (6)

如果所需要的抖动保护时间N*Trepin超过最大抖动保护时间Tjitmax,将如下一步5:2所指示的,从抖动缓冲器取出最旧的分组,并因此在后续步骤5:3中将N减1。只要所要求的抖动保护时间超过Tjitmax,便将迭代地重复该过程。然后,如果需要,在对应的后续步骤5:4和5:5或者步骤5:6和5:7中,更新当连续导出未决分组的数目变化时所使用的两个参数Nmax和Nmin中的任意一个。

在下一步骤5:8中,基于已更新的参数Nmax和Nmin导出Tj。当适配间隔ADAPT_INT的结束处对Tjit进行适配时,将使用等式(1)所定义的当前Tj。ADAPT_INT是基于实验的调谐参数,可被设置为例如16。使用被设置为20ms的Trepin,将ADAPT_INT设置为16将对应于等于320ms的适配周期ADAPT_INT*Trepin。此外,在步骤5:8中,还将被称为cntr1的计数器增1,cntr1用于跟踪何时已经到达适配间隔ADAPT_INT,即,何时是对Tjit进行适配的时间。

在后续的步骤5:9中,将已更新的Tj与当前Tjit相比较,并根据这种比较的结果,将对被称为catchUpLimit的变量进行设置,catchUpLimit指示了抖动缓冲延迟的当前最高的可容忍目标水平。随后,将在追赶过程D中使用变量catchUpLimit,以确定是否作为已更新Tjit的结果为了对抖动缓冲器的输出进行加速(即,追赶),从抖动缓冲器取出分组。

如果在步骤5:9中发现Tj超过Tjit(即Tjit当前太小,并且为了防止与当前所经历的正在增大的抖动相随的缓冲器下溢应当增大Tjit),如步骤510中所指示的,将基于当前的Tj来设置catchUpLimit,而如果发现Tjit的当前值适当,或者甚至太高产生了不必要的高抖动缓冲器延迟,如另一步骤5:11中所指示的,将代之基于Tjit对catchUpLimit进行设置。

在下一步5:12中,确定针对cntr1谈话迸发的持续时间是否已长到足以达到ADAPT_INT,即,是否到了对Tjit进行适配的时间。如果ADAPT_INT尚未届满,通过基于当前的catchUpLimit,执行如图5中的D所示的追赶过程来继续该过程。将追赶过程设置为,通过无论何时只要发现可以应用追赶,就应用追赶(即,在从抖动缓冲器取出最旧的分组)来逐渐地使抖动缓冲器延迟适配得更小。在执行追赶过程D之后,将在最终步骤5:13处终止适配过程B。随后将参考图7对Catchup过程D进行更详细的描述。

然而,如果在步骤5:12中发现ADAPT_INT已届满,将在执行追赶过程D之前相应地对抖动保护时间Tjit进行适配。在步骤5:14中,再次将Tj与Tjit相比较,如果发现Tj超过Tjit,将执行快速攻击,即,在下一步骤5:15中,立即将Tjit增大到当前的Tj值。

另一方面,如果Tjit没有超过Tj,这是应该降低Tjit的指示,并且从而将代之以执行慢衰减,即,如另一步骤5:16中所指示的,通过将Tjit逐渐降低至Tj,将对Tjit进行适配。

在慢衰减期间,通过等式(7)和(8)来缓和适配,即Tjit向下降低。对Tjit进行限制,以使其永远不会降低到Tjitmin。可将这种Tjit的适配表达为:

Tjit=max(Tjit-d,Tjitmin)(7)

其中,参数d是Tjit的适配降低步长,其定义为:

d=max(int((Tjit-Tj)/m),l)(8)

m是预设的经验松弛常数和调谐参数,其中,可以将基于实验的缺省值设置为例如10。

在快速攻击和慢衰减之后,处理继续进行到后续步骤5:17,其中,基于刚更新的Tjit对catchUpLimit进行设置。此外,将适配间隔计数器cntr1重置为0,将Nmin初始化为Nmax的当前值,并且还将Nmax重置为0,以准备针对新的迭代的适配过程,该新的迭代将开始新的适配间隔。

在步骤5:15或5:16中执行的Tjit适配以及后续步骤5:17中执行的针对下一个适配周期的初始化之后,该分支同样继续至追赶过程D,其中,已更新的catchUpLimit将被用于确定是否需要追赶。在已执行追赶过程之后,在步骤5:13将终止适配过程B,抖动缓冲器算法继续图4的缓冲过程A。

相反,如果在图4的步骤4:1处识别出静默期,抖动过程将继续转向适配过程C的分支,适配过程C被配置为在静默期期间或在静默期开始时对Tjit进行适配。现将参考图6的框图,更详细地描述根据一个实施例的这种过程的示例。

在第一步骤6:1中,适配过程确定自先前的适配间隔ADAPT_INT结束起,是否已经过去了足够的时间。因为静默期可在任何时间开始,通常在当前适配间隔届满之前,首先通过将cntr1的当前值与被称为DTXLimit的参数相比较,确定自Tjit最近的适配起是否已经过去了足够长的时段。DTXLimit是预定义常数,并被选择为小于ADAPT_INT的调谐参数。DTXLimit的典型缺省值可以是例如2。

如果在步骤6:1中发现cntr1还没有超过DTXLimit,那么从Tjit先前的适配结束起,尚未过去足够的时间,并且将不会执行Tjit的适配。反之,在步骤6:2中将Nmin设置为MAX_VAL。

然而,如果在步骤6:1中发现cntr1超过DTXLimit,确定将需要Tjit的适配。起初,如下一个步骤6:3中所指示的,将基于从已更新的Nmax和Nmin导出的N的变化,相应地计算当前的Tj。在后续步骤6:4中,将已更新的Tj与当前Tjit相比较,并且如果看起来已经在静默期之前该早期的适配间隔期间,当前目标值Tj指示了需要增大Tjit,则增大Tjit,在后续的步骤6:5中将Tjit设置为Tj的当前值,从而响应于最近经历的N的变化以及Tjit的当前值,执行快速攻击。

在下一步骤6:6中,将Nmin初始化为Nmax的当前值,为起始于下一个谈话迸发的下一个适配间隔作准备。在后续步骤6:7中同样地,将Nmax和cntr1重置为0,为下一个适配间隔做准备。

接下来,在执行过程D的追赶之前,在步骤6:8中基于已更新的Tjit设置新的catchUpLimit。一旦已经执行了追赶过程,在最终的步骤6:9处终止适配过程C,并通过执行图4的抖动缓冲器过程A来继续抖动适配算法。

使用追赶过程D的主要目的是,通过逐渐追赶将抖动缓冲器的当前延迟适配得更小,即,通过在抖动缓冲器中不必要地存在着很多未决分组(即,Tjit不必要大)的情况下,基于在适配过程B或C中设置的变量catchUpLimit,从抖动缓冲器丢弃最旧的分组。

现在将参考图7的框图方案,对根据一个实施例用于通过逐渐地追赶将缓冲器延迟适配得更小的追赶过程进行更详细地描述。

在第一步骤7:1中,基于变量catchUpLimit确定当前缓冲时间是否长于预期时间。如果针对被定义为N*Trepin的时刻的最长缓冲延迟(即,最旧的分组的缓冲延迟)不超过当前的catchUpLimit,那么在抖动缓冲器中将不需要追赶,从而在最终步骤7:4处终止追赶过程D。逐渐追赶的速率将受计数器cntr2的控制,从而在离开追赶过程之前,除非如先前的步骤7:2所指示的cntr2已经到达0,否则如步骤7:3所指示的,cntr2将被减为1。

然而,如果在步骤7:1中发现最旧分组的缓冲延迟目前超过了当前的catchUpLimit,确定将需要进行追赶。计数器cntr2将确保,只要该条件保持有效,将如步骤7:6中所指示的,以每第k次迭代一个的速率丢弃抖动缓冲器中最旧的分组,从而完成在步骤5:16中通过降低Tjit启动的慢衰减。k是预设的调谐参数,对最小追赶周期进行了定义。典型地,基于实验来选择参数k的值。k的典型值可以是8,如果Trepin是20ms,该典型值与20ms/160ms的最大追赶速率相对应。

在步骤7:6中每次发现cntr2等于k,都将执行逐渐追赶,其中,将从抖动缓冲器取出并抛弃该抖动缓冲器中最旧的分组。另一步骤7:7对此进行了示意。在取出最旧的分组后,在下一步骤7:8中更新N,即,将其减1,并将cntr2重置为0,以指示已经执行了追赶。接下来,确定适配间隔ADAPT_INT是否与当前追赶周期刚好同时结束,即,cntr1是否等于0。在步骤7:9中对此进行检验。如果的确如此,将在步骤7:4处终止追赶过程D。然而,如果cntr1超过0,必须更新Nmax和Nmin,即,将其减1,以考虑刚从抖动缓冲器丢弃了最旧的分组。该过程由步骤7:10至7:13进行指示。在执行追赶过程D之后,过程返回相应的适配过程B或C。

虽然参考图3-7介绍的上述实施例涉及用于对语音突发中发送的语音分组进行缓冲的缓冲方法,然而除了语音分组外,同样可以将该方法应用于处理经由分组传送的其它类型的抖动敏感媒体(如视频),在本文档中称之为媒体分组。应该理解,在媒体突发中传送到达缓冲器的媒体分组,而不是在语音突发中进行传送。然而,由于静默期(以及SID)仅针通语音来定义,当处理在媒体迸发中传送的媒体分组时,不得不对该方法进行一些适配。通过在流会话期间保持图4的谈话迸发/媒体迸发分支B,传送媒体突发,同时禁用静默期分支C,可将所描述的方法适配用于还对除语音外的媒体进行缓冲。

现在将参考图8的框图对典型的网络节点进行描述,该网络节点包括适于依照本文档中描述的抖动缓冲器算法进行操作的适应性抖动缓冲器。图8的网络节点800包括接收单元801,接收从该节点所连接到的分组交换网络(未示出)到达的分组。缓冲单元802适于执行用于动态调整缓冲器延迟的方法,该方法已在上面进行了描述。缓冲单元控制经由接收单元801向适应性抖动缓冲器803插入分组,以及经由发送单元804从适应性抖动缓冲器803取出分组。一旦将分组从适应性抖动缓冲器803取出至发送单元804,该分组便被发送至接收网络(未示出)。图9a和9b示出了对所描述的抖动缓冲器算法的示例性性能,将以ms为单位的延迟作为帧索引的函数进行了示意,其中,图9a示意了在禁用语音的非连续发送(即,DTX)的情况下的仿真,而图9b示意了在启用DTX的情况下的仿真。

两种仿真都以相同的音频采样文件来运行,并且都使用了相同的传输延迟简档。在两幅图中,细线表示输入传输延迟,而粗线示意了包括输出处的缓冲器延迟在内的总延迟。每一个粗线向X轴下降的时刻都指示了由延迟尖峰所导致的缓冲器下溢。

本发明涉及在网络节点处提供的复杂度有限的适应性抖动缓冲器。该适应性抖动缓冲器不需要访问时间戳信息,即,不需要访问IP层。与依赖于时间戳信息不同,该抖动缓冲器适于直接处理编码后的语音分组/帧。将监控到的抖动缓冲器中分组的数目变化用于估计所需的抖动保护时间Tjit。通过根据更新后的Tjit来添加错误隐藏分组或从抖动缓冲器移除最旧的语音分组,所经历的抖动缓冲器延迟将能够适于网络节点的输入处分组的当前到达速率。

虽然已参考特定的示例性实施例对本发明进行了描述,该描述一般地仅旨在示意发明性的概念,并且不应被视为对本发明范围的限制,本发明的范围由所附权利要求来限定。

简写列表

DTX不连续发送

SID静默插入描述符。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号