CN101719808B - 数据包输出处理方法和设备 - Google Patents
数据包输出处理方法和设备 Download PDFInfo
- Publication number
- CN101719808B CN101719808B CN2009102229423A CN200910222942A CN101719808B CN 101719808 B CN101719808 B CN 101719808B CN 2009102229423 A CN2009102229423 A CN 2009102229423A CN 200910222942 A CN200910222942 A CN 200910222942A CN 101719808 B CN101719808 B CN 101719808B
- Authority
- CN
- China
- Prior art keywords
- packet
- time stamp
- output
- rtp packet
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种数据包输出处理方法,该方法为:接收端确定连续输出的补偿数据包数是否超过预先设定的门限值;在确定所述补偿数据包数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的RTP数据包是否为待调整数据包;所述待调整数据包是指所述RTP数据包是未按照预先设定的时间顺序到达的数据包;在确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。本发明实施例还公开了一种数据包输出处理设备。采用本发明,能够有效降低接收端的丢包率。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种数据包输出处理方法和设备。
背景技术
目前,语音承载因特网协议(Voice over Internet Protocol,VoIP)技术得到了越来越广泛的应用,VoIP简而言之就是将数据封装成报文的形式在因特网协议(Internet Protocol,IP)网络上做实时传递。和传统的电路语音业务相比,VoIP最大的优势是能广泛利用IP互联资源,从而提供比传统业务更多、更好的服务。在VoIP的语音通讯应用中,实时传输协议(Real-time TransportProtocol,RTP)是被广泛采用的一种网络传输技术,它为语音数据在IP网络中传输提供了实时性保证。
在IP网络中,语音数据通常先封装成RTP报文,RTP报头中提供用于标识装载数据的标示符PT、序列号SEQ、时戳TS和语音段标识M等特征,再打包成用户数据报协议(User Datagram Protocol,UDP)报文进行传输。由于语音业务的实时性要求强,为了尽量减少时延,语音数据的打包单元都很短,话音分成若干个RTP数据包进行传输,每个RTP数据包包含同样长度的语音数据,例如一个典型的RTP数据包通常包含20-40毫秒(ms)的语音数据。在发送端,RTP数据包的发送时间间隔相等,等于一个RTP数据包所包含语音数据的时间长度。
语音数据在IP网络中进行传输引入了诸多问题,如抖动(Jitter),即由于网络原因造成的RTP数据包到达接收端的间隔时间的变化,例如发送端每20ms发出一个RTP数据包,由于网络原因,这些RTP数据包抵达接收端的时间间隔不是准确的20ms。另外还存在RTP数据包的乱序和丢包等问题。因此在发送端顺序发送的RTP数据包,在接收端会产生乱序、重复、丢包和抖动等问题。如果在接收端对接收到的RTP数据包不进行处理,而是直接输出接收到的RTP数据包,其产生的语音效果将是难以忍受的。
序列号是用于标识RTP数据包顺序的一个属性值,第一个生成的RTP数据包随机选取一个初始值作为其序列号,后续RTP数据包的序列号按照发送顺序依次递增;时戳是该时戳所在RTP数据包装载的语音数据的第一个样本的采样时刻标记。RTP接收端根据序列号和时戳,可以对其收到的RTP数据包进行排序、整理,以确定RTP数据包合适的输出顺序,确保RTP序列输出的实时性。
而对于消除网络抖动对语音造成的影响,通常RTP接收端会采用抖动缓冲区(Jitter Buffer)的方式,通过在接收端延迟输出RTP数据包来消除抖动。在现有的接收端对RTP数据包的输出方法中,延迟处理分成自适应延迟和固定延迟两种方式。当采用固定延迟时,典型的延迟输出时间在20~60ms;自适应延迟则是根据抖动情况实时计算延迟时间,进而实时调整每包的延迟输出时间。一般来说,延迟越大,对抖动的平滑效果就越好,但过长的延迟会导致语音效果变差。在交互式的应用场景中,延迟越小越好。
自适应延迟可以分成逐包调整和逐段调整。逐包调整是将计算得到的延迟时间应用于每一个RTP数据包,但是这样的抗抖动缓冲会引起语音输出的不连续,导致客户的不满意。通常,在IP网络中传输语音数据包时,会采用话音激活检测(Voice Active Detection,VAD)/不连续发送(DiscontinuousTransmission,DTX)技术,语音数据在VAD检测标识为静音期间不进行传输,当VAD检测到有新的语音段激活时,发送端开始发送语音RTP数据包,并将第一个发送的数据包中的RTP头的M标记置为1。对采用DTX技术传输的RTP序列,会采用自适应的方式,因为它可以在静音期间进行延迟调整,从而减轻自适应带来的负面影响,这就是逐段调整,也即是在同一段语音期间的所有RTP数据包采用同一个延迟时间,也即是其输出保持同一个时间间隔,如果需要调整,在语音段的第一个数据包进行,也即是RTP数据包头中标识M=1的包。
在实现本发明的过程中,发明人发现现有技术中存在以下技术问题:
现有技术中接收端将接收到的RTP数据包送入输出队列,并在每次的RTP数据包输出周期到达时,若时戳变量L_TS的值与位于输出队列队首的RTP包的时戳值相等,则将位于输出队列队首的RTP数据包即最早进入队列的RTP数据包进行输出,并将L TS的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值ΔT。
若由于数据包迟到使得输出队列中没有RTP数据包或由于数据包乱序使得L_TS小于位于输出队列队首的RTP数据包的时戳值,则输出一个补偿数据包,并将L_TS的当前值加上ΔT。后续在迟到的RTP数据包或乱序的RTP数据包到达时,L_TS大于该迟到的RTP数据包或乱序的RTP数据包,说明该RTP数据包已经过期或补偿过,需要丢弃该RTP数据包。在数据包迟到或乱序较为严重时,会造成接收端大量丢包,影响语音的输出效果。
发明内容
本发明实施例提供一种数据包输出处理方法和设备,用于降低接收端的丢包率。
一种数据包输出处理方法,该方法包括:
A、接收端确定连续输出的补偿数据包的个数是否超过预先设定的门限值,该门限值为正整数;
B、在确定所述补偿数据包的个数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的实时传输协议RTP数据包是否为待调整数据包;所述待调整数据包是指所述RTP数据包是未按照预先设定的时间顺序到达的数据包;
C、在确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。
一种数据包输出处理设备,该设备包括:
门限确定单元,用于确定连续输出的补偿数据包数是否超过预先设定的门限值,该门限值为正整数;
调整确定单元,用于在所述门限确定单元确定所述补偿数据包数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的RTP数据包是否为待调整数据包;所述待调整数据包是指所述RTP数据包是未按照预先设定的时间顺序到达的数据包;
数据包输出单元,用于在所述调整确定单元确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。
本发明中,在接收端输出的补偿数据包的个数超过预先设定的门限值时,若当前接收端最早接收到的、并且还未输出的RTP数据包,是未按照预先设定的时间顺序到达的数据包,则选择输出该RTP数据包,而不是丢弃该RTP数据包或输出补偿数据包,能够有效的降低接收端的丢包率。
附图说明
图1为本发明实施例提供的方法流程示意图;
图2为本发明实施例中的状态转换示意图;
图3为本发明实施例中的初始状态到正常状态的转换流程示意图;
图4为本发明实施例中的正常状态到静音状态的转换流程示意图;
图5为本发明实施例中的静音状态到正常状态的转换流程示意图;
图6为本发明实施例提供的设备结构示意图。
具体实施方式
为了降低接收端的丢包率,本发明实施例提供一种数据包输出处理方法,本方法中,在接收端连续输出的补偿数据包的个数超过预先设定的门限值时,若当前接收端最早接收到的、并且还未输出的RTP数据包是未在正常到达时间到达接收端的待调整数据包,则选择输出该RTP数据包,而不是丢弃该RTP数据包或输出补偿数据包。
参见图1,本发明实施例提供的数据包输出处理方法,具体包括以下步骤:
步骤10:确定接收端输出的补偿数据包的个数是否超过预先设定的门限值,该门限值为正整数,补偿数据包是指包含静音数据的数据包;
步骤11:在确定接收端输出的补偿数据包的个数超过预先设定的门限值时,确定当前接收端最早接收到的、并且还未输出的RTP数据包是否为待调整数据包;待调整数据包是指RTP数据包是未按照预先设定的时间顺序到达接收端的数据包;
步骤12:在确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包时,输出该RTP数据包。
本发明中未按照预先设定的时间顺序到达接收端的RTP数据包,是指在晚于或早于该RTP数据包的正常到达时间的时间到达接收端的RTP数据包,该RTP数据包的正常到达时间根据发送端发送该RTP数据包的时间确定,例如,发送端发送第一个RTP数据包的时间为0ms,发送端发送RTP数据包的时间间隔为20ms,发送端与接收端之间的传输时延为5ms,则发送端发出的第一个RTP数据包的正常到达时间为0+5=5ms,第二个RTP数据包的正常到达时间为5+20=25ms,第三个RTP数据包的正常到达时间为25+20=45ms,后续RTP数据包的正常到达时间以此类推;当然,发送端与接收端之间的传输时延可以忽略为0,则发送端发出的第一个RTP数据包的正常到达时间为0ms,第二个RTP数据包的正常到达时间为0+20=20ms,第三个RTP数据包的正常到达时间为20+20=40ms,后续RTP数据包的正常到达时间以此类推。
在步骤10之前,可以包括以下步骤:
步骤100:在数据包输出周期到达时,若当前接收端不存在未被输出的RTP数据包,或者当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值大于预先设定的时戳变量的当前值,则输出补偿数据包,并到步骤10。
本发明中,时戳变量的取值按照如下方法设置:接收端每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包携带的时戳值加上RTP序列的时戳间隔值,接收端每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值。
本发明中,数据包输出周期的时间大小可以等于发送端发送RTP数据包的时间间隔大小。
步骤11中确定RTP数据包是否为待调整数据包的具体方法可以如下:
首先,将当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值与预先设定的时戳变量的当前值进行比较;
然后,在比较结果为时戳变量的当前值大于RTP数据包携带的时戳值时,确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包;具体的,若比较结果为时戳变量的当前值大于RTP数据包携带的时戳值,说明该RTP数据包为迟到的数据包,若比较结果为时戳变量的当前值小于RTP数据包携带的时戳值,说明该RTP数据包为早到的数据包。
在比较结果为时戳变量的当前值小于RTP数据包携带的时戳值时,可以进一步判断当前接收端接收到的、并且还未输出的RTP数据包的数目是否小于预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;并在判断为否时,确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包。在判断为是时,可以输出补偿数据包,并将时戳变量的当前值加上RTP序列的时戳间隔值。
步骤12中在输出RTP数据包之后,还可以包括以下按照正常方式处理数据包的步骤:
步骤13:在数据包输出周期到达时,若判断当前接收端不存在未被输出的RTP数据包,或者当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值大于时戳变量的当前值,则输出补偿数据包,并将时戳变量的当前值加上RTP序列的时戳间隔值;若判断当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值等于时戳变量的当前值,则输出该RTP数据包,并将时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值;若当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值小于时戳变量的当前值,则丢弃该RTP数据包。
在步骤100之前,还可以包括以下接收端初始延迟输出数据包以消除抖动的步骤:
步骤1000:在预先设定的周期定时器到时时,判断接收端接收到的、并且还未输出的RTP数据包的数目是否超过预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;若是,则到步骤1001;否则,返回步骤1000;周期定时器的定时时长小于发送端发送RTP数据包的时间间隔;
步骤1001:输出接收端最早接收到的、并且还未输出的RTP数据包,并到步骤100。
本发明中,若接收端将接收到的RTP数据包保存在遵循先进先出原则的队列中时,接收端最早接收到的、并且还未输出的RTP数据包,是指位于该队列队首的RTP数据包。
下面以具体实施例对本发明进行具体说明:
本发明实施例的实现包括以下步骤:
步骤S01:初始化系统参数设置。具体内容主要包括以下八点:
第一,设置抗抖动缓冲最小深度常量MIN_DEPTH。MIN_DEPTH越小延迟越小,可以要求MIN_DEPTH>1。
第二,设置周期定时器T1,以ms为单位。T1越小延迟越小,设RTP序列输出时间间隔为tms,则T1需要能被t整除,且最大不超过t。
第三,上述两个步骤设定后,RTP序列起始语音帧的固定延迟等于t×(MIN_DEPTH-1)~(t×(MIN_DEPTH-1)+T1)ms,一个语音帧期间所有RTP数据包的输出时间间隔均为tms。
第四,设置循环计数器C,初始化C=0,在T1到时时C加1,直到C=t/T1时计数器复位,重新开始计数。当T1=tms时,C=T1,不需要单独设置。后面都用C复位描述。
第五,预先设置时戳变量L_TS;设置常量ΔT,其取值为RTP序列的时戳间隔值,如8k采样率时ΔT=160,16k采样率时ΔT=320。
第六,预先设置变量Lost为丢包或静音而连续输出的补偿数据包数,Lost初始化为0。当Lost>MIN_DEPTH时,认为连续输出的补偿数据包的数目较多,系统输出已经保持一段静音期,可能是累积的RTP数据包迟到或者抖动增大,此时在输出下一个收到的RTP数据包时,可以考虑进行时戳调整。
第七,设置状态机,共三个处理状态,S_INIT、S_NORMAL和S_SILENCE。S_INIT为初始状态,S_NORMAL为RTP输出的常规处理状态,S_SILENCE为静音期输出RTP处理状态。图2为状态机的状态迁移图。
第八,设置接收RTP数据包的缓冲区队列Q_BUF,用于接收RTP数据包。Q_BUF队列中,队首的RTP数据包的时戳最小,前MIN_DEPTH个RTP数据包的序列号连续,称为有效的RTP数据包。
步骤S02:激活定时器T1,状态机进入S_INIT。
步骤S03:S_INIT状态下,T1到时时,判断Q_BUF中有效RTP数据包的个数是否大于等于MIN_DEPTH;
若判断为是,则输出队首RTP数据包,队列首指针指向下一个RYP数据包,并设置L_TS=TS0+ΔT,TS0为队首RTP数据包的时戳。同时启动计数器C(若C=T1,不需要重新启动),状态机进入S_NORMAL,在下一次计数器C复位时跳到步骤S04;
若判断为否,返回步骤S03。
步骤S04:S_NORMAL状态下,具体包括以下子步骤:
步骤41:判断Q_BUF队列是否为空;若为空,则输出一个补偿数据包,设置L_TS+=ΔT,Lost++,跳到步骤42;否则跳到步骤43。
步骤42:若Lost>MIN_DEPTH,状态机进入S_SILENCE,在下一次计数器C复位时跳到步骤S05;否则,等待下一次C复位时,跳到步骤S04。
步骤43:比较L_TS和TS0的值,若L_TS=TS0,输出队首的RTP数据包,队列首指针指向下一个包,并设置L_TS+=ΔT,Lost=0,等待下一次C复位时,跳到步骤S04;若L_TS<TS0,跳到步骤44;若L_TS>TS0,跳到步骤45。
步骤44:输出一个补偿数据包,并设置L_TS+=ΔT,Lost++,跳到步骤42。
步骤45:该RTP数据包已过期或补偿过,丢弃该RTP数据包,队列首指针指向下一个RTP数据包,回到步骤S04。
步骤S05:S_SILENCE状态下,具体包括以下步骤:
步骤51:判断Q_BUF队列是否为空,若为空,则输出一个补偿数据包,并设置L_TS+=ΔT,等待下一次C复位时,跳到步骤S05;否则,跳到步骤52;
步骤52:比较L_TS和TS0的值,若L_TS>=TS0,则跳到步骤53;若L_TS<TS0,且Q_BUF中的RTP数据包数大于等于MIN_DEPTH,则跳到步骤53;否则跳到步骤54;
步骤53:输出Q_BUF的队首RTP数据包,队列首指针指向下一个RTP数据包,并设置L_TS=TS0+ΔT,Lost=0,状态机回到S_NORMAL,等待下一次C复位时,跳到步骤S04。
步骤54:输出一个补偿数据包,并设置L_TS+=ΔT,等待下一次C复位时,跳到步骤S05。
本发明提供的方法对抖动消除采取的是固定延迟加静音期自适应调整的方式,其中涉及到对静音期的判断和处理。通过累计连续输出的补偿数据包数达到一定门限的方式,使得当DTX期不发送语音包或因连续丢包补偿而产生静音时,系统都可以获得调整输出时戳的机会,从而对网络抖动达到自适应效果,对于因网络延迟造成累积包迟到又一起到达的情况,能有效降低RTP接收端的丢包率。本发明提供的方法以固定延迟为基础,只需要设置一个固定周期计数,实现简单,特别对于在硬件平台上处理多通道RTP序列时,操作维护都很便捷,同时又兼具了抗抖动自适应的效果,提高了系统处理效率。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步地详细描述。
以t=20ms语音数据打包的RTP序列为例,语音样本采样率为8k,RTP序列的时戳间隔值ΔT为160,接收端需要每20ms输出一个RTP数据包。
在接收端涉及到一个缓冲区队列Q_BUF,用于存储排好序的RTP数据包。在实现本发明提供的方法时,接收端只需要保证队首的RTP数据包携带的时戳TS0最小,入队时的前MIN_DEPTH个RTP数据包的序列号连续。
本发明实现的方法需要配置一个抗抖动缓冲最小深度常量MIN_DEPTH,要求MIN_DEPTH>1,它代表了RTP序列初始输出时延迟的包数,属于确定初始固定延迟的主体部分。
本发明实现的方法还需要配置一个定时器T1,一个计数器C。定时器T1以ms为单位,必须能被RTP数据包输出时间间隔t整除,且最大不超过t。它代表了RTP序列初始输出延迟的实时性,属于确定初始固定延迟的附加部分。定时器T1和计数器C一起,共同完成实时输出RTP数据包的周期计数,T1×C=t。
如实例中t=20ms,选择MIN_DEPTH=2,T1=10ms,C=2,则RTP的初始延迟为20-30ms;若T1=20ms,C=1,由于T1=t,可以不再单独设置计数器C,C复位即是T1到时,这时RTP的初始延迟为20-40ms。
本发明实现的方法还需要配置一个状态机,用于实时输出RTP数据包,并处理丢包、静音期间的延迟自适应。
系统初始化时,状态机处于S_INIT态,如附图3所示,启动定时器T1,按如下步骤进行处理:
步骤201:等待定时器T1到时,进入步骤202;
步骤202:如果Q_BUF中的有效RTP数据包数目大于等于MIN_DEPTH,进入步骤203;否则回到步骤201;
步骤203:记L_TS=TS0+ΔT,输出队首RTP数据包,启动计数器C,状态机进入S_NORMAL状态。
在步骤203处,如果定时器T1=t,不需要启动计数器C。
若实例中设置T1=10ms,MIN_DEPTH=2,系统初始化时,Q_BUF为空。每次T1到时,检查Q_BUF,如果发现Q_BUF中的RTP数据包数大于等于2,且前2个RTP数据包的序列号连续,即可以输出队首的RTP数据包,记录本地维护的时戳常量L_TS为输出RTP数据包的时戳号加上160。此时状态机进入S_NORMAL状态,表示RTP输出进入正常处理中,并启动计数器C。
状态机进入S_NORMAL状态,如附图4所示,按如下步骤进行处理:
步骤301:等待计数器C复位,进入步骤302;
步骤302:如果Q_BUF不为空,进入步骤303;否则跳到步骤306;
步骤303:比较L_TS和TS0的值,如果L_TS=TS0,进入步骤304;如果L_TS>TS0,跳到步骤305;如果L_TS<TS0,跳到步骤306;
步骤304:设置L_TS=TS0+ΔT,输出队首RTP数据包,设置Lost=0,回到步骤301;
步骤305:丢弃队首RTP数据包,跳到步骤302;
步骤306:输出补偿一个补偿数据包,设置L_TS+=ΔT,Lost++,进入步骤307;
步骤307:如果Lost大于MIN_DEPTH,状态机进入S_SILENCE状态;否则回到步骤301。
在正常处理状态下,计数器每复位一次,出队一包,也即是按RTP数据包的输出时间间隔出队,如果Q_BUF为空,则补偿一包。如实例中每20ms输出一个RTP数据包,T1=10ms,计数器的值就置为2。每次定时器到时,计数器减1,计数器C=0时,就是复位的时候。
每次出队时,按照时戳号顺序进行,保证实时输出RTP数据包。以S_INIT状态下出队的第一个RTP数据包的时戳号为基准,每输出一个包,即是时间过了20ms,时戳号就加上160,以此作为下一个应该输出RTP数据包的时戳号L_TS,输出过程中时戳不进行调整。如果此时Q_BUF中没有包,或者因为乱序,队首RTP数据包的时戳号TS0大于L_TS,则补偿一个包输出,并且记录下来连续补偿的包数Lost。在实例中,当Lost大于2时,表示当前已经连续补偿的包数达到了需要调整时戳的门限,输出端已经产生了一段静音,则状态机进入S_SILENCE状态去处理。反之,如果TS0小于L_TS,表示间歇性丢包,并且已经采取了补偿措施进行处理,那么这一包已经过期,就被直接丢弃了。时戳等于L_TS的包,正常输出,在MIN_DEPTH选取适当,网络抖动正常时,这个应该是大部分的处理情况。
状态机进入S_SILENCE状态,如附图5所示,按如下步骤进行处理:
步骤401:等待计数器C复位,进入步骤402;
步骤402:如果Q_BUF不为空,进入步骤403;否则,跳到步骤406;
步骤403:比较L_TS和TS0的值,如果L_TS<TS0,进入步骤404;如果L_TS≥TS0,跳到步骤405;
步骤404:如果Q_BUF中的RTP数据包数大于等于MIN_DEPTH,进入步骤405;否则,跳到步骤406;
步骤405:设置L_TS=TS0+ΔT,输出队首RTP数据包,设置Lost=0,状态机进入S_NORMAL状态;
步骤406:输出一个补偿数据包,设置L_TS+=ΔT,回到步骤401。
状态机处于S_SILENCE状态,表示输出端处于静音状态,最短持续了MIN_DEPTH×t时间,在实例中就是40ms,此时标明某种异常,可能是抖动突然变大,可能是某种原因网络中有累积的包一起迟到,对于这两种情况,要进行时戳调整,否则会造成接收端大量丢包。还有一种可能是DTX期间不发送语音包,对于这种情况,一般不需要调整时戳,当DTX期结束时状态机会自动回到正常状态处理。在这个状态,仍然是计数器复位一次,出队一包,如果Q_BUF中没有包,或者包数小于MIN_DEPTH且L_TS小于TS0,就进行补偿,直到队首时戳小于等于L_TS。一般来说,时戳小于L_TS的包已经补偿过应该丢弃,但是在S_SILENCE状态下,因为之前是补偿的静音输出,可以将输出时戳L_TS调整为TS0,输出队首RTP数据包,这样,起到了增大延迟的效果,既不会影响前后RTP数据包的正常输出,同时有效降低了丢包率。当L_TS小于TS0而Q_BUF中的包数大于等于MIN_DEPTH时,认为此时RTP输出端的延时过大,可以将输出时戳调整为TS0,输出队首RTP数据包,这样,起到了减小延迟的效果,使得RTP数据包能够得到及时输出,队列中可以保存更多RTP数据包,减少丢包数,并与上述的增大延迟起到了互相补偿的作用,将输出端的延迟调整到了同S_INIT初始状态的延迟效果,以实现接收端稳定输出RTP数据包。
在状态机的整个运转过程中,RTP出队由定时器加计数器驱动,实现很简单,即是要操作多个RTP序列,也可以采用相同的计数周期。
参见图6,本发明实施例还提供一种数据包输出处理设备,该设备包括:
门限确定单元60,用于确定连续输出的补偿数据包的个数是否超过预先设定的门限值,该门限值为正整数;
调整确定单元61,用于在所述门限确定单元确定所述补偿数据包的个数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的实时传输协议RTP数据包是否为待调整数据包;所述待调整数据包是指未按照预先设定的时间顺序到达的数据包;
数据包输出单元62,用于在所述调整确定单元确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。
该设备还包括:
数据包补偿单元63,用于在数据包输出周期到达时,若当前不存在未被输出的RTP数据包,或者当前最早接收到的、并且还未输出的RTP数据包携带的时戳值大于预先设定的时戳变量的当前值,则输出补偿数据包;所述时戳变量的取值按照以下方法动态调整:每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值,每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值。
所述调整确定单元61包括:
时戳比较单元,用于将当前最早接收到的、并且还未输出的RTP数据包携带的时戳值与预先设定的时戳变量的当前值进行比较;
结果确定单元,用于在比较结果为所述时戳变量的当前值大于所述RTP数据包携带的时戳值时,确定当前最早接收到的、并且还未输出的RTP数据包为待调整的数据包;所述时戳变量的取值按照以下方法动态调整:每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的携带的时戳值加上RTP序列的时戳间隔值,每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值。
所述调整确定单元61还包括:
判断单元,用于在所述调整确定单元的比较结果为所述时戳变量的当前值小于所述RTP数据包携带的时戳值时,判断当前接收到的、并且还未输出的RTP数据包的数目是否小于预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;
相应的,所述结果确定单元用于:
在所述判断单元判断当前接收到的、并且还未输出的RTP数据包的数目不小于所述抗抖动缓冲最小深度值时,确定当前最早接收到的、并且还未输出的RTP数据包为待调整数据包。
所述数据包输出单元62还用于:
在所述判断单元判断当前接收到的、并且还未输出的RTP数据包的数目小于所述抗抖动缓冲最小深度值时,输出补偿数据包。
该设备还包括:
后续数据包处理单元64,用于在所述数据包输出单元输出所述RTP数据包之后,数据包输出周期到达时,若判断当前不存在未被输出的RTP数据包,或者当前最早接收到的、并且还未输出的RTP数据包携带的时戳值大于所述时戳变量的当前值,则输出补偿数据包;若判断当前最早接收到的、并且还未输出的RTP数据包携带的时戳值等于所述时戳变量的当前值,则输出该RTP数据包;若当前最早接收到的、并且还未输出的RTP数据包携带的时戳值小于所述时戳变量的当前值,则丢弃该RTP数据包。
该设备还包括:
初始数据包输出单元65,用于在预先设定的周期定时器到时时,判断接收到的、并且还未输出的RTP数据包的数目是否超过预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;若是,则输出最早接收到的、并且还未输出的RTP数据包,并触发所述数据包补偿单元;否则,继续触发本初始数据包输出单元;所述周期定时器的定时时长小于发送端发送RTP数据包的时间间隔。
综上,本发明的有益效果包括:
本发明实施例提供的方案中,在接收端输出的补偿数据包数超过预先设定的门限值时,若当前接收端最早接收到的、并且还未输出的RTP数据包是未按照预先设定的时间顺序到达接收端的待调整数据包,则选择输出该RTP数据包,而不是丢弃该RTP数据包或输出补偿数据包,从而有效的降低了接收端的丢包率,提高了语音输出效果。分析如下:待调整的数据包包括迟到(或乱序)和早到的数据包,调整迟到的数据包能降低丢包率;调整早到的数据包,能调整输出时间,从大的来说可以降低后续的丢包率,这两种都能提高语音输出效果。
本发明提供的方案使RTP数据包输出对网络抖动和延迟具有一定自适应性,在保证RTP实时性特征的同时,降低了RTP接收端的丢包率,并且操作实现简单。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种数据包输出处理方法,其特征在于,该方法包括:
A、接收端确定连续输出的补偿数据包的个数是否超过预先设定的门限值,该门限值为正整数;
B、在确定所述补偿数据包的个数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的实时传输协议RTP数据包是否为待调整数据包;所述待调整数据包是指所述RTP数据包是未按照预先设定的时间顺序到达的数据包;
C、在确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。
2.如权利要求1所述的方法,其特征在于,在步骤A之前,该方法进一步包括:
D、在数据包输出周期到达时,若当前接收端不存在未被输出的RTP数据包,或者当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值大于预先设定的时戳变量的当前值,则输出补偿数据包;所述时戳变量的取值按照以下方法动态调整:接收端每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值,接收端每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值;
记录接收端连续输出的补偿数据包的个数。
3.如权利要求1所述的方法,其特征在于,步骤B中确定当前最早接收到的、并且还未输出的RTP数据包是否为待调整数据包包括:
将当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值与预先设定的时戳变量的当前值进行比较;
在比较结果为所述时戳变量的当前值大于所述RTP数据包携带的时戳值时,确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包;所述时戳变量的取值按照以下方法动态调整:接收端每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值,接收端每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值。
4.如权利要求3所述的方法,其特征在于,在比较结果为所述时戳变量的当前值小于所述RTP数据包携带的时戳值时,该方法进一步包括:
判断当前接收端接收到的、并且还未输出的RTP数据包的数目是否小于预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;
所述确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包包括:
在判断当前接收端接收到的、并且还未输出的RTP数据包的数目不小于所述抗抖动缓冲最小深度值时,确定当前接收端最早接收到的、并且还未输出的RTP数据包为待调整数据包。
5.如权利要求4所述的方法,其特征在于,在判断当前接收端接收到的、并且还未输出的RTP数据包的数目小于所述抗抖动缓冲最小深度值时,该方法进一步包括:输出补偿数据包。
6.如权利要求3所述的方法,其特征在于,在步骤C中在输出所述RTP数据包之后,该方法进一步包括:
E、在数据包输出周期到达时,若判断当前接收端不存在未被输出的RTP数据包,或者当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值大于所述时戳变量的当前值,则输出补偿数据包;若判断当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值等于所述时戳变量的当前值,则输出该RTP数据包;若当前接收端最早接收到的、并且还未输出的RTP数据包携带的时戳值小于所述时戳变量的当前值,则丢弃该RTP数据包。
7.如权利要求2所述的方法,其特征在于,在步骤D之前,该方法进一步包括:
F、在预先设定的周期定时器到时时,判断接收端接收到的、并且还未输出的RTP数据包的数目是否超过预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;若是,则到步骤G;否则,返回步骤F;所述周期定时器的定时时长小于发送端发送RTP数据包的时间间隔;
G、输出接收端最早接收到的、并且还未输出的RTP数据包,并到步骤D。
8.一种数据包输出处理设备,其特征在于,该设备包括:
门限确定单元,用于确定连续输出的补偿数据包数是否超过预先设定的门限值,该门限值为正整数;
调整确定单元,用于在所述门限确定单元确定所述补偿数据包数超过预先设定的门限值时,确定当前最早接收到的、并且还未输出的RTP数据包是否为待调整数据包;所述待调整数据包是指所述RTP数据包是未按照预先设定的时间顺序到达的数据包;
数据包输出单元,用于在所述调整确定单元确定所述RTP数据包为待调整数据包时,输出所述RTP数据包。
9.如权利要求8所述的设备,其特征在于,该设备还包括:
数据包补偿单元,用于在数据包输出周期到达时,若当前不存在未被输出的RTP数据包,或者当前最早接收到的、并且还未输出的RTP数据包携带的时戳值大于预先设定的时戳变量的当前值,则输出补偿数据包;所述时戳变量的取值按照以下方法动态调整:接收端每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值,接收端每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值;
记录连续输出的补偿数据包的个数。
10.如权利要求8所述的设备,其特征在于,所述调整确定单元包括:
时戳比较单元,用于将当前最早接收到的、并且还未输出的RTP数据包携带的时戳值与预先设定的时戳变量的当前值进行比较;
结果确定单元,用于在比较结果为所述时戳变量的当前值大于所述RTP数据包携带的时戳值时,确定当前最早接收到的、并且还未输出的RTP数据包为待调整的数据包;所述时戳变量的取值按照以下方法动态调整:接收端每输出一个RTP数据包后将所述时戳变量的值设置为输出的该RTP数据包的时戳值加上RTP序列的时戳间隔值,接收端每输出一个补偿数据包后将所述时戳变量的值加上RTP序列的时戳间隔值。
11.如权利要求10所述的设备,其特征在于,所述调整确定单元还包括:
判断单元,用于在所述调整确定单元的比较结果为所述时戳变量的当前值小于所述RTP数据包携带的时戳值时,判断当前接收到的、并且还未输出的RTP数据包的数目是否小于预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;
所述结果确定单元用于:
在所述判断单元判断当前接收到的、并且还未输出的RTP数据包的数目不小于所述抗抖动缓冲最小深度值时,确定当前最早接收到的、并且还未输出的RTP数据包为待调整数据包。
12.如权利要求11所述的设备,其特征在于,所述数据包输出单元还用于:
在所述判断单元判断当前接收到的、并且还未输出的RTP数据包的数目小于所述抗抖动缓冲最小深度值时,输出补偿数据包。
13.如权利要求10所述的设备,其特征在于,该设备还包括:
后续数据包处理单元,用于在所述数据包输出单元输出所述RTP数据包之后,数据包输出周期到达时,若判断当前不存在未被输出的RTP数据包,或者当前最早接收到的、并且还未输出的RTP数据包携带的时戳值大于所述时戳变量的当前值,则输出补偿数据包;若判断当前最早接收到的、并且还未输出的RTP数据包携带的时戳值等于所述时戳变量的当前值,则输出该RTP数据包;若当前最早接收到的、并且还未输出的RTP数据包携带的时戳值小于所述时戳变量的当前值,则丢弃该RTP数据包。
14.如权利要求9所述的设备,其特征在于,该设备还包括:
初始数据包输出单元,用于在预先设定的周期定时器到时时,判断接收到的、并且还未输出的RTP数据包的数目是否超过预先设定的抗抖动缓冲最小深度值,该抗抖动缓冲最小深度值为正整数;若是,则输出最早接收到的、并且还未输出的RTP数据包,并触发所述数据包补偿单元;否则,继续触发本初始数据包输出单元;所述周期定时器的定时时长小于发送端发送RTP数据包的时间间隔。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102229423A CN101719808B (zh) | 2009-11-23 | 2009-11-23 | 数据包输出处理方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102229423A CN101719808B (zh) | 2009-11-23 | 2009-11-23 | 数据包输出处理方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101719808A CN101719808A (zh) | 2010-06-02 |
CN101719808B true CN101719808B (zh) | 2013-02-13 |
Family
ID=42434330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102229423A Expired - Fee Related CN101719808B (zh) | 2009-11-23 | 2009-11-23 | 数据包输出处理方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101719808B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015172319A1 (zh) * | 2014-05-13 | 2015-11-19 | 华为技术有限公司 | 测试sdn建新流速率的方法和装置 |
CN105472404B (zh) * | 2014-09-11 | 2018-11-13 | 成都鼎桥通信技术有限公司 | 一种视频业务中的数据处理方法 |
CN106170950B (zh) | 2014-12-12 | 2019-06-07 | 华为技术有限公司 | 一种节点的运行状态检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658027B1 (en) * | 1999-08-16 | 2003-12-02 | Nortel Networks Limited | Jitter buffer management |
CN1549536A (zh) * | 2003-05-09 | 2004-11-24 | ��Ϊ��������˾ | 用rtp数据包的时戳进行排序以消除其抖动延时的方法 |
EP1931068A1 (en) * | 2006-12-04 | 2008-06-11 | Nokia Siemens Networks Gmbh & Co. Kg | Method of adaptively dejittering packetized signals buffered at the receiver of a communication network node |
-
2009
- 2009-11-23 CN CN2009102229423A patent/CN101719808B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658027B1 (en) * | 1999-08-16 | 2003-12-02 | Nortel Networks Limited | Jitter buffer management |
CN1549536A (zh) * | 2003-05-09 | 2004-11-24 | ��Ϊ��������˾ | 用rtp数据包的时戳进行排序以消除其抖动延时的方法 |
EP1931068A1 (en) * | 2006-12-04 | 2008-06-11 | Nokia Siemens Networks Gmbh & Co. Kg | Method of adaptively dejittering packetized signals buffered at the receiver of a communication network node |
Also Published As
Publication number | Publication date |
---|---|
CN101719808A (zh) | 2010-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10659380B2 (en) | Media buffering | |
EP2235894B1 (en) | A simple adaptive jitter buffering algorithm for network nodes | |
CA2452514C (en) | Automatic adjustment of buffer depth | |
CN1320805C (zh) | 一种分组交换网络自适应抖动缓冲区调整方法 | |
CN100525281C (zh) | 语音传输过程中实现动态调整抖动缓存的方法 | |
US7251246B2 (en) | Selective packet processing in a packet based media processor for latency reduction | |
JP3636348B2 (ja) | 音声パケット遅延揺らぎ吸収装置及び吸収方法 | |
US20050207342A1 (en) | Communication terminal device, communication terminal receiving method, communication system and gateway | |
US20100290454A1 (en) | Play-Out Delay Estimation | |
US20080095198A1 (en) | Playout based delay scheduler | |
KR20120109574A (ko) | 통신 네트워크에서의 전송 스케줄링 방법, 해당 통신 노드 및 컴퓨터 프로그램 생성물 | |
WO2008023302A1 (en) | Discontinuous transmission of speech signals | |
EP2538632B1 (en) | Method and receiver for reliable detection of the status of an RTP packet stream | |
CN101719808B (zh) | 数据包输出处理方法和设备 | |
EP1931068A1 (en) | Method of adaptively dejittering packetized signals buffered at the receiver of a communication network node | |
EP2070294B1 (en) | Supporting a decoding of frames | |
US7633947B2 (en) | Method and apparatus for performing active packet bundling in a Voice over-IP communications system based on source location in talk spurts | |
US7542465B2 (en) | Optimization of decoder instance memory consumed by the jitter control module | |
US8085803B2 (en) | Method and apparatus for improving quality of service for packetized voice | |
US7903688B2 (en) | VoIP encoded packet prioritization done per packet in an IP communications network | |
JP4983054B2 (ja) | サーバ装置及び同装置におけるバッファ制御方法 | |
CN104219220A (zh) | 一种改善VoIP通信质量的系统和方法 | |
US20240214435A1 (en) | Chirp signal filtering for digital gateway | |
Beritelli et al. | TCP‐friendly transmission of voice over IP | |
JP2000244564A (ja) | マルチメディア通信用パケット順序制御方法、マルチメディア通信用端末、およびマルチメディア通信用パケット順序制御プログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130213 Termination date: 20171123 |
|
CF01 | Termination of patent right due to non-payment of annual fee |