Rtp报文修补装置、rtp报文排序方法和填补方法

文档序号:7969459阅读:406来源:国知局
专利名称:Rtp报文修补装置、rtp报文排序方法和填补方法
技术领域
本发明涉及IP电话语音流还原过程中为提高语音还原质量而提出的方法和装置,其涉及RTP协议解析技术和RTP报文补充技术,属于信息处理技术领域。
背景技术
在VoIP系统中,普遍采用RTP协议进行语音数据的传输,该协议承载在IP/UDP之上,无法提供可靠的传输机制和QoS,即无法保证语音数据报文无丢失、无延时、顺序的到达接收端。因此,在性能较好、QoS要求较高的VoIP系统中都要在接收到RTP分组后进行一定的处理,如缓冲处理、丢失报文填充处理等,以保证较高的语音质量。但是,由于现在语音压缩编码的迅速发展、DSP芯片处理速度的提升、网络带宽的大幅度的增加,语音数据传输较之以前在QoS保证上也有了很大的增强,因此也有很多VoIP系统中在RTP分组的处理上进行了简化。
本发明的RTP流修补方法是源于VoIP系统中RTP分组的接受处理,但应用场合和针对的问题有所不同。现有的VoIP系统在处理RTP分组时做了简化,并且在该领域中的应用先例到目前还不多。本发明的方法和装置主要用于IP电话监听系统中VoIP语音流的还原过程中,是VoIP语音流还原的关键,对于语音还原后的语音效果和可识别性起到了至关重要的作用。

发明内容
本发明的目的在于提供涉及IP电话语音流还原技术中的RTP流修补方法和装置,其使RTP流经过修补后在播放时间和数据内容上都趋于完整,并更接近于源音频数据。
本发明提供了一种对VoIP系统中的RTP报文进行排序的方法,其通过按照序列号和时间戳联合对RTP报文进行排序。其中,可以首先按照序列号对RTP报文进行排序;以及在按照序列号的排序出现溢出的情况下,从溢出点开始按照时间戳对RTP报文进行排序。或者可以首先按照时间戳对RTP报文进行排序;以及在按照时间戳的排序出现溢出的情况下,从溢出点开始按照序列号对RTP报文进行排序。
本发明还提出了一种对VoIP系统中的RTP报文进行填补的方法,包括根据标记域和时间戳判断是否存在静音期;当存在静音期时,计算能填满静音期的时间空白的RTP分组的字节数;以及在计算出的RTP分组的静荷部分填充静音的数据。
本发明还提出了一种对VoIP系统中的RTP报文进行修补的装置,包括RTP报文排序方法实现器,将RTP报文顺序混乱的抖动RTP流进行排序;以及缺失RTP报文填补方法实现器,对经过排序的RTP顺序报文中存在的报文缺失现象进行填补。
由于实际的网络和各种基于RTP视频/音频应用的复杂性和多样性,导致RTP数据流具有很多的不可预见性特征。在实际的采样研究过程中也确实发现,无论是序列号还是时间戳在真实的网络环境中都存在不可预见的跳变或溢出现象,因此采用序列号/时间戳联合排序的方法可以有效应对这种网络中的异常现象,使排序的结果可靠、有效。
静音期填充技术是本发明的核心之一,它利用RTP报文中所包含的有用信息(时间戳、编解码方式等)对由于RTP流源输出点存在静音期无输出状态而导致的RTP流时间不连续现象进行有效的弥补,为近一步还原出时间和内容保真的音频提供有力的技术支撑。


图1示出了根据本发明的对VoIP系统中的RTP报文进行修补的装置的结构图;图2示出了RTP序列号溢出的情况;图3示出了音频源音频的波形图谱;图4示出了未经根据本发明的缺失RTP报文填补方法处理直接还原后的音频波形图谱;图5示出了经根据本发明的缺失RTP报文填补方法处理还原后的音频波形图谱。
具体实施例方式
首先描述根据本发明的对VoIP系统中的RTP报文进行修补的装置的系统结构。
根据本发明的对VoIP系统中的RTP报文进行修补的装置的系统结构如图1所示。该系统分为三大模块RTP报文解析实现器、RTP报文排序方法实现器、缺失RTP报文填补方法实现器。图中输入RTP流称为抖动RTP流,包含有网络传输造成的数据报文顺序抖动;经过RTP报文排序方法实现器排序过的RTP流称为顺序RTP流;经过缺失RTP报文填补方法实现器处理后的输出RTP流称为完备RTP流,也是整个系统的最终处理结果输出。完备RTP流包含了与音频源端基本一致的本质特性,经还原处理便可以还原出保真的原始音频。
下面说明各实现器的功能如下RTP报文解析实现器RTP报文解析实现器实现对RTP原始报文的协议解析。其处理对象是RTP数据流中的由其它方法实现器提交进行解析的单个RTP报文个体。经过解析的RTP报文不再是原始报文形式的字节流或字节块,而是带有域表示及域值的数据结构体。其返回结果为其它方法实现器实现对RTP流的处理方法提供必要和可靠的信息。
RTP报文排序方法实现器RTP报文排序方法实现器实现对抖动RTP流的排序处理方法。其处理对象是抖动RTP流。抖动RTP流是指由于网络传输等原因造成的个别或大范围RTP报文顺序混乱,此乱序现象称为抖动,因此具有此特征的RTP流称为抖动RTP流。经过排序后的RTP流称为顺序RTP流,消除了由于网络传输或其它原因造成的RTP流抖动,其顺序就是在源端进行采样时的正确顺序。
缺失RTP报文填补方法实现器尽管顺序RTP中的RTP报文顺序是正确的,但由于网络丢包或静音期的无输出状态,会存在数据抽样的时间不连续现象。缺失RTP报文填补方法实现器可实现对顺序RTP流中存在的报文缺失现象进行弥补。经过填补后的RTP流称为完备RTP流,其基本达到了与源端数据相关性的最大值,即无论在时间上还是在数据内容上都趋近于源端原始数据。对这样的数据进行还原处理将获得较为保真的音频效果。
本发明的工作原理如下RTP协议解析RTP协议负责对流媒体数据进行封装并实现媒体流的实时传输,每一个RTP数据报都由头部和负载两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。RTP数据报的头部格式如表1所示。
表1RTP报头格式

其中比较重要的几个域及其意义如下M(标记)RFC1890声明,对一个应用程序来说,如果它在静音期不发送任何分组,那么在一段静止期后的第一个分组中设置这个比特。
Payload Type(负载类型)标明RTP负载的格式,包括所采用的编码方法、采样频率、承载通道等。
Sequence Number(序列号)由发送方在会话开始时设为一个随机数,然后每发送一个RTP分组就加1。它用来为接收方提供探测数据丢失和乱序的方法,但如何处理丢失和乱序的数据则是应用程序自己的事情,RTP协议本身并不负责数据的重传。
Timestamp(时间戳)记录净荷中的第一个抽样产生的时间,两个相邻RTP报文时间戳的差值为时间戳较小的那个报文净荷所包含的抽样个数,因此接收方通过时间戳能够确定数据的到达是否受到了延迟抖动的影响。
SSRC(同步源)同步源由发送方随机选取,在一个RTP会话中是全局唯一的,代表一个负责序列号和时间戳的实体。
对RTP协议的解析就是把原始字节流形式的RTP报文按照RTP报文格式定义的规定进行字段的识别与取用过程。
2 RTP报文排序由于网络传输存在一定的不可靠性,在数据传输的过程中有可能会导致数据包到达顺序的局部混乱,通过排序将很好的解决这个问题。
从RTP协议来看,可以用于进行排序的域有两个,即序列号和时间戳。在没有出现乱序的情况下,序列号和时间戳都应该是递增的,而序列号的递增量为1,时间戳的递增量则与RTP报文所采用的编码格式和报文中所封装的语音帧数有关。但是序列号是一个16bit的域,在长时间的通话过程中有可能存在溢出的情况,这将导致排序结果的不正确。通过实验观察,在实际的通话过程中这种情况确实存在。如图2所示为采用Ethereal网络数据分析软件抓到的RTP数据包,其中就存在序列号溢出。因此,我们采用序列号/时间戳联合对RTP报文进行排序,即先按照序列号进行排序,如果在排序中未发现序列号溢出现象则排序顺利结束;如果存在序列号溢出则从溢出点开始按照时间戳排序。同样,如果在时间戳溢出的情况下,在时间戳溢出点改换用序列号排序。但在实际应用中,时间戳溢出的概率非常低,序列号和时间戳在同一点同时溢出的概率无限趋于零。因此,采用序列号/时间戳联合排序的方法,可以保证排序结果的可靠性和有效性。RTP报文流的特征是其数据基本有序,据此通过综合考虑各种排序方法的时间复杂度和程序实现的复杂度,我们采用直接插入排序法,比较顺序为从后向前。
3缺失RTP报文填补网络传输的不可靠性还会导致数据包的丢失,可以用填补丢失数据包的方法解决。然而,由于网络传输的不可靠性导致的数据包丢失属于非正常缺失,在网络环境较好的情况下出现的概率是很小的。VoIP系统实现中,常常在检测出通话静音期后,采用停发语音包的方法以减少语音数据传输所占用的带宽。缺失RTP报文填补处理主要是为了解决这种更为普遍的正常缺失情况。如果不进行填补处理,通话过程中静音期的停顿在恢复出语音后将无法体现,势必严重影响语音还原的效果,还会导致两路音频进行合路后声音的严重不同步。
补包方法是基于RTP协议中的标记域和时间戳域实现的。根据RFC 1889对于RTP协议的描述可以得出以下结论。标记域可以用来判断是否存在静音期,如果标记域置为1,则说明此分组与前一分组之间存在静音期。时间戳记录净荷中的第一个抽样产生的时间。典型的语音编码模式的频率为8000Hz,从一个分组到另一个分组的时间戳值的增量取决于分组中抽样的数量。例如,如果一个分组包括十个语音抽样和一个值为1的时间戳,那么下一个分组的时间戳则为11。考虑到抽样以8000Hz的速率发生(每0.125ms),那么时间戳中10的差别就代表了时间上1.25ms的差别。如果在静音期,没有发送任何分组,那么下一个RTP分组可能包含一个明显比前一个RTP分组大得多的时间戳。
补包方法的具体描述如下因为不同的编码方式,有不同的传输速率,所以在无静音期情况下,相邻的两个RTP数据包的时间戳的差值和第一个包的净荷的大小之间的关系因编码方式的不同而有所不同。
以ΔT表示相邻两个包的时间戳的差值;V表示对应于某种编码方式的传输速率(单位kbit/s);N表示相邻的两个RTP包的第一个RTP包的净荷的大小(单位Byte);f表示这种编码方式对应的抽样频率(单位Hz);C表示分组持续的时间(单位s)那么如果在没有静音期的情况下,ΔT、V、N、f和C应该满足如下的关系ΔT*1f=N*8V*1000=C]]>公式1公式1表明在无静音期时,一个包持续的时间为 (单位为s);从时间戳的角度去考虑,这个包持续的时间为 (单位为s),因此有等式ΔT*1f=N*8V*1000.]]>当两个包之间有静音期时,则上述等式将不成立,而应该满足不等式ΔT*1f>N*8V*1000,]]>因此可以通过这个不等式去判断是否有静音或丢包的情况出现。
用 可以计算出需要补上一个多少个字节的RTP分组正好能填满静音期的时间空白,然后在其净荷部分填充静音的数据可以实现对静音的补包处理,填充前一个包净荷数据的一个或多个拷贝便实现了对丢包的补包处理。
除此以外,还需要进行一种特殊的补包处理,即补充通话头,以使两路通话同步。要实现两路会话的同步合成,必须要找到一个正确的同步点。通常情况下,两路通话各自的第一个RTP分组到达IP电话监听系统的时间是不一样的。例如回铃音期间,一方已经向另一方发送了回铃音的RTP分组,而另一方还没有开始讲话,就相当于处于静音期。因此,可以根据两路通话各自的第一个RTP分组到达时间差值和公式1计算出需要在缺少静音数据的话路头补充多大的静音RTP分组。
实例本发明在一套IP电话监听系统的会话还原子系统中首次应用,效果显著。
1 RTP报文排序方法应用情况只采用序列号排序的情况下,当RTP流中的序列号存在溢出的时候,经过语音还原后会发现语音的播放内容是颠倒的,即后一段语音内容被放到了前面来播放。
只采用时间戳排序的情况下,虽未发现有时间戳溢出的情况存在,但却存在时间戳跳变的情况,而其跳变的具体原因则不得而知。在这种情况下,也会出现语音播放内容混乱的情况。
而采用了序列号/时间戳联合排序后,在长达两天的测试过程中未发现有语音内容混乱的情况出现。可见,基于序列号/时间戳联合排序的方法能够有效地对抖动RTP流实现顺序的校正。
2缺失RTP报文填补方法应用情况如图3所示为音频源的音频波形图谱,整段音频包含三个语音集中区域,每段音频区域前都有一段时间没有语音输入,只存在幅度较小的噪声输入。在经过VoIP系统后,这些幅度较小的噪声输入将被检测为静音期,无RTP流输出。在接收段对这种RTP流直接进行还原处理后会出现如图4所示的音频图谱。从图中可以看出三段语音区域被连接到了一起,播放时间将比图中的短,而且不该连在一起的语音内容也会连续播放。可见,这种情况是无法满足语音还原的效果和要求的。
而采用了根据本发明的RTP报文填补方法处理后再进行还原则会形成如图5所示的音频图谱。静音期的白噪声被无声的数据填充。这样在播放时间和音频数据内容上都能够和音频源音频很好的实现同步,实现了保真的语音还原。
权利要求
1.一种对VoIP系统中的RTP报文进行排序的方法,包括按照序列号对RTP报文进行排序;以及如果按照序列号的排序出现溢出,则从溢出点开始按照时间戳对RTP报文进行排序。
2.一种对VoIP系统中的RTP报文进行排序的方法,包括按照时间戳对RTP报文进行排序;以及如果按照时间戳的排序出现溢出,则从溢出点开始按照序列号对RTP报文进行排序。
3.一种对VoIP系统中的RTP报文进行填补的方法,包括根据标记域和时间戳判断是否存在静音期;当存在静音期时,计算能填满静音期的时间空白的RTP分组的字节数;以及在计算出的RTP分组的静荷部分填充静音的数据。
4.根据权利要求3的对VoIP系统中的RTP报文进行填补的方法,其中VoIP系统包括两路通话,所述方法还包括根据两路通话的各自的第一个RTP分组到达时间差值以及所述标记域和时间戳来计算需要在通话的头部补充的RTP分组的字节数。
5.根据权利要求3的对VoIP系统中的RTP报文进行填补的方法,其中根据以下公式判断存在静音期ΔT*1f>N*8V*1000]]>其中,ΔT表示相邻两个包的时间戳的差值;V表示对应于某种编码方式的传输速率,单位为kbit/s;N表示相邻的两个RTP包的第一个RTP包的净荷的大小,单位为字节;f表示这种编码方式对应的抽样频率,单位为Hz;C表示分组持续的时间,单位为s。
6.一种对VoIP系统中的RTP报文进行修补的装置,包括RTP报文排序方法实现器,将RTP报文顺序混乱的抖动RTP流进行排序;以及缺失RTP报文填补方法实现器,对经过排序的RTP顺序报文中存在的报文缺失现象进行填补。
7.根据权利要求6的对VoIP系统中的RTP报文进行修补的装置,还包括RTP报文解析实现器,将RTP报文解析为带有域表示和域值的数据结构体。
8.根据权利要求6的对VoIP系统中的RTP报文进行修补的装置,其中,根据序列号和时间戳对抖动RTP流进行排序。
9.根据权利要求6的对VoIP系统中的RTP报文进行修补的装置,其中,缺失RTP报文填补方法实现器对静音期进行填补。
全文摘要
本发明提供了一种对VoIP系统中的RTP报文进行排序的方法,其通过按照序列号和时间戳联合对RTP报文进行排序。在对VoIP系统中的RTP报文进行填补的方法中,根据标记域和时间戳判断是否存在静音期;当存在静音期时,计算能填满静音期的时间空白的RTP分组的字节数;以及在计算出的RTP分组的静荷部分填充静音的数据。对VoIP系统中的RTP报文进行修补的装置包括RTP报文排序方法实现器,将RTP报文顺序混乱的抖动RTP流进行排序;以及缺失RTP报文填补方法实现器,对经过排序的RTP顺序报文中存在的报文缺失现象进行填补。
文档编号H04L29/06GK101014001SQ200610138419
公开日2007年8月8日 申请日期2006年11月13日 优先权日2006年11月13日
发明者陈哲, 郭世泽, 牛伟, 郑康峰, 冯帅, 邓青雄 申请人:陈哲, 郭世泽, 牛伟
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1