專利名稱:Rtp報文修補裝置、rtp報文排序方法和填補方法
技術領域:
本發(fā)明涉及IP電話語音流還原過程中為提高語音還原質量而提出的方法和裝置,其涉及RTP協(xié)議解析技術和RTP報文補充技術,屬于信息處理技術領域。
背景技術:
在VoIP系統(tǒng)中,普遍采用RTP協(xié)議進行語音數據的傳輸,該協(xié)議承載在IP/UDP之上,無法提供可靠的傳輸機制和QoS,即無法保證語音數據報文無丟失、無延時、順序的到達接收端。因此,在性能較好、QoS要求較高的VoIP系統(tǒng)中都要在接收到RTP分組后進行一定的處理,如緩沖處理、丟失報文填充處理等,以保證較高的語音質量。但是,由于現在語音壓縮編碼的迅速發(fā)展、DSP芯片處理速度的提升、網絡帶寬的大幅度的增加,語音數據傳輸較之以前在QoS保證上也有了很大的增強,因此也有很多VoIP系統(tǒng)中在RTP分組的處理上進行了簡化。
本發(fā)明的RTP流修補方法是源于VoIP系統(tǒng)中RTP分組的接受處理,但應用場合和針對的問題有所不同?,F有的VoIP系統(tǒng)在處理RTP分組時做了簡化,并且在該領域中的應用先例到目前還不多。本發(fā)明的方法和裝置主要用于IP電話監(jiān)聽系統(tǒng)中VoIP語音流的還原過程中,是VoIP語音流還原的關鍵,對于語音還原后的語音效果和可識別性起到了至關重要的作用。
發(fā)明內容
本發(fā)明的目的在于提供涉及IP電話語音流還原技術中的RTP流修補方法和裝置,其使RTP流經過修補后在播放時間和數據內容上都趨于完整,并更接近于源音頻數據。
本發(fā)明提供了一種對VoIP系統(tǒng)中的RTP報文進行排序的方法,其通過按照序列號和時間戳聯(lián)合對RTP報文進行排序。其中,可以首先按照序列號對RTP報文進行排序;以及在按照序列號的排序出現溢出的情況下,從溢出點開始按照時間戳對RTP報文進行排序?;蛘呖梢允紫劝凑諘r間戳對RTP報文進行排序;以及在按照時間戳的排序出現溢出的情況下,從溢出點開始按照序列號對RTP報文進行排序。
本發(fā)明還提出了一種對VoIP系統(tǒng)中的RTP報文進行填補的方法,包括根據標記域和時間戳判斷是否存在靜音期;當存在靜音期時,計算能填滿靜音期的時間空白的RTP分組的字節(jié)數;以及在計算出的RTP分組的靜荷部分填充靜音的數據。
本發(fā)明還提出了一種對VoIP系統(tǒng)中的RTP報文進行修補的裝置,包括RTP報文排序方法實現器,將RTP報文順序混亂的抖動RTP流進行排序;以及缺失RTP報文填補方法實現器,對經過排序的RTP順序報文中存在的報文缺失現象進行填補。
由于實際的網絡和各種基于RTP視頻/音頻應用的復雜性和多樣性,導致RTP數據流具有很多的不可預見性特征。在實際的采樣研究過程中也確實發(fā)現,無論是序列號還是時間戳在真實的網絡環(huán)境中都存在不可預見的跳變或溢出現象,因此采用序列號/時間戳聯(lián)合排序的方法可以有效應對這種網絡中的異?,F象,使排序的結果可靠、有效。
靜音期填充技術是本發(fā)明的核心之一,它利用RTP報文中所包含的有用信息(時間戳、編解碼方式等)對由于RTP流源輸出點存在靜音期無輸出狀態(tài)而導致的RTP流時間不連續(xù)現象進行有效的彌補,為近一步還原出時間和內容保真的音頻提供有力的技術支撐。
圖1示出了根據本發(fā)明的對VoIP系統(tǒng)中的RTP報文進行修補的裝置的結構圖;圖2示出了RTP序列號溢出的情況;圖3示出了音頻源音頻的波形圖譜;圖4示出了未經根據本發(fā)明的缺失RTP報文填補方法處理直接還原后的音頻波形圖譜;圖5示出了經根據本發(fā)明的缺失RTP報文填補方法處理還原后的音頻波形圖譜。
具體實施例方式
首先描述根據本發(fā)明的對VoIP系統(tǒng)中的RTP報文進行修補的裝置的系統(tǒng)結構。
根據本發(fā)明的對VoIP系統(tǒng)中的RTP報文進行修補的裝置的系統(tǒng)結構如圖1所示。該系統(tǒng)分為三大模塊RTP報文解析實現器、RTP報文排序方法實現器、缺失RTP報文填補方法實現器。圖中輸入RTP流稱為抖動RTP流,包含有網絡傳輸造成的數據報文順序抖動;經過RTP報文排序方法實現器排序過的RTP流稱為順序RTP流;經過缺失RTP報文填補方法實現器處理后的輸出RTP流稱為完備RTP流,也是整個系統(tǒng)的最終處理結果輸出。完備RTP流包含了與音頻源端基本一致的本質特性,經還原處理便可以還原出保真的原始音頻。
下面說明各實現器的功能如下RTP報文解析實現器RTP報文解析實現器實現對RTP原始報文的協(xié)議解析。其處理對象是RTP數據流中的由其它方法實現器提交進行解析的單個RTP報文個體。經過解析的RTP報文不再是原始報文形式的字節(jié)流或字節(jié)塊,而是帶有域表示及域值的數據結構體。其返回結果為其它方法實現器實現對RTP流的處理方法提供必要和可靠的信息。
RTP報文排序方法實現器RTP報文排序方法實現器實現對抖動RTP流的排序處理方法。其處理對象是抖動RTP流。抖動RTP流是指由于網絡傳輸等原因造成的個別或大范圍RTP報文順序混亂,此亂序現象稱為抖動,因此具有此特征的RTP流稱為抖動RTP流。經過排序后的RTP流稱為順序RTP流,消除了由于網絡傳輸或其它原因造成的RTP流抖動,其順序就是在源端進行采樣時的正確順序。
缺失RTP報文填補方法實現器盡管順序RTP中的RTP報文順序是正確的,但由于網絡丟包或靜音期的無輸出狀態(tài),會存在數據抽樣的時間不連續(xù)現象。缺失RTP報文填補方法實現器可實現對順序RTP流中存在的報文缺失現象進行彌補。經過填補后的RTP流稱為完備RTP流,其基本達到了與源端數據相關性的最大值,即無論在時間上還是在數據內容上都趨近于源端原始數據。對這樣的數據進行還原處理將獲得較為保真的音頻效果。
本發(fā)明的工作原理如下RTP協(xié)議解析RTP協(xié)議負責對流媒體數據進行封裝并實現媒體流的實時傳輸,每一個RTP數據報都由頭部和負載兩個部分組成,其中頭部前12個字節(jié)的含義是固定的,而負載則可以是音頻或者視頻數據。RTP數據報的頭部格式如表1所示。
表1RTP報頭格式
其中比較重要的幾個域及其意義如下M(標記)RFC1890聲明,對一個應用程序來說,如果它在靜音期不發(fā)送任何分組,那么在一段靜止期后的第一個分組中設置這個比特。
Payload Type(負載類型)標明RTP負載的格式,包括所采用的編碼方法、采樣頻率、承載通道等。
Sequence Number(序列號)由發(fā)送方在會話開始時設為一個隨機數,然后每發(fā)送一個RTP分組就加1。它用來為接收方提供探測數據丟失和亂序的方法,但如何處理丟失和亂序的數據則是應用程序自己的事情,RTP協(xié)議本身并不負責數據的重傳。
Timestamp(時間戳)記錄凈荷中的第一個抽樣產生的時間,兩個相鄰RTP報文時間戳的差值為時間戳較小的那個報文凈荷所包含的抽樣個數,因此接收方通過時間戳能夠確定數據的到達是否受到了延遲抖動的影響。
SSRC(同步源)同步源由發(fā)送方隨機選取,在一個RTP會話中是全局唯一的,代表一個負責序列號和時間戳的實體。
對RTP協(xié)議的解析就是把原始字節(jié)流形式的RTP報文按照RTP報文格式定義的規(guī)定進行字段的識別與取用過程。
2 RTP報文排序由于網絡傳輸存在一定的不可靠性,在數據傳輸的過程中有可能會導致數據包到達順序的局部混亂,通過排序將很好的解決這個問題。
從RTP協(xié)議來看,可以用于進行排序的域有兩個,即序列號和時間戳。在沒有出現亂序的情況下,序列號和時間戳都應該是遞增的,而序列號的遞增量為1,時間戳的遞增量則與RTP報文所采用的編碼格式和報文中所封裝的語音幀數有關。但是序列號是一個16bit的域,在長時間的通話過程中有可能存在溢出的情況,這將導致排序結果的不正確。通過實驗觀察,在實際的通話過程中這種情況確實存在。如圖2所示為采用Ethereal網絡數據分析軟件抓到的RTP數據包,其中就存在序列號溢出。因此,我們采用序列號/時間戳聯(lián)合對RTP報文進行排序,即先按照序列號進行排序,如果在排序中未發(fā)現序列號溢出現象則排序順利結束;如果存在序列號溢出則從溢出點開始按照時間戳排序。同樣,如果在時間戳溢出的情況下,在時間戳溢出點改換用序列號排序。但在實際應用中,時間戳溢出的概率非常低,序列號和時間戳在同一點同時溢出的概率無限趨于零。因此,采用序列號/時間戳聯(lián)合排序的方法,可以保證排序結果的可靠性和有效性。RTP報文流的特征是其數據基本有序,據此通過綜合考慮各種排序方法的時間復雜度和程序實現的復雜度,我們采用直接插入排序法,比較順序為從后向前。
3缺失RTP報文填補網絡傳輸的不可靠性還會導致數據包的丟失,可以用填補丟失數據包的方法解決。然而,由于網絡傳輸的不可靠性導致的數據包丟失屬于非正常缺失,在網絡環(huán)境較好的情況下出現的概率是很小的。VoIP系統(tǒng)實現中,常常在檢測出通話靜音期后,采用停發(fā)語音包的方法以減少語音數據傳輸所占用的帶寬。缺失RTP報文填補處理主要是為了解決這種更為普遍的正常缺失情況。如果不進行填補處理,通話過程中靜音期的停頓在恢復出語音后將無法體現,勢必嚴重影響語音還原的效果,還會導致兩路音頻進行合路后聲音的嚴重不同步。
補包方法是基于RTP協(xié)議中的標記域和時間戳域實現的。根據RFC 1889對于RTP協(xié)議的描述可以得出以下結論。標記域可以用來判斷是否存在靜音期,如果標記域置為1,則說明此分組與前一分組之間存在靜音期。時間戳記錄凈荷中的第一個抽樣產生的時間。典型的語音編碼模式的頻率為8000Hz,從一個分組到另一個分組的時間戳值的增量取決于分組中抽樣的數量。例如,如果一個分組包括十個語音抽樣和一個值為1的時間戳,那么下一個分組的時間戳則為11。考慮到抽樣以8000Hz的速率發(fā)生(每0.125ms),那么時間戳中10的差別就代表了時間上1.25ms的差別。如果在靜音期,沒有發(fā)送任何分組,那么下一個RTP分組可能包含一個明顯比前一個RTP分組大得多的時間戳。
補包方法的具體描述如下因為不同的編碼方式,有不同的傳輸速率,所以在無靜音期情況下,相鄰的兩個RTP數據包的時間戳的差值和第一個包的凈荷的大小之間的關系因編碼方式的不同而有所不同。
以ΔT表示相鄰兩個包的時間戳的差值;V表示對應于某種編碼方式的傳輸速率(單位kbit/s);N表示相鄰的兩個RTP包的第一個RTP包的凈荷的大小(單位Byte);f表示這種編碼方式對應的抽樣頻率(單位Hz);C表示分組持續(xù)的時間(單位s)那么如果在沒有靜音期的情況下,ΔT、V、N、f和C應該滿足如下的關系ΔT*1f=N*8V*1000=C]]>公式1公式1表明在無靜音期時,一個包持續(xù)的時間為 (單位為s);從時間戳的角度去考慮,這個包持續(xù)的時間為 (單位為s),因此有等式ΔT*1f=N*8V*1000.]]>當兩個包之間有靜音期時,則上述等式將不成立,而應該滿足不等式ΔT*1f>N*8V*1000,]]>因此可以通過這個不等式去判斷是否有靜音或丟包的情況出現。
用 可以計算出需要補上一個多少個字節(jié)的RTP分組正好能填滿靜音期的時間空白,然后在其凈荷部分填充靜音的數據可以實現對靜音的補包處理,填充前一個包凈荷數據的一個或多個拷貝便實現了對丟包的補包處理。
除此以外,還需要進行一種特殊的補包處理,即補充通話頭,以使兩路通話同步。要實現兩路會話的同步合成,必須要找到一個正確的同步點。通常情況下,兩路通話各自的第一個RTP分組到達IP電話監(jiān)聽系統(tǒng)的時間是不一樣的。例如回鈴音期間,一方已經向另一方發(fā)送了回鈴音的RTP分組,而另一方還沒有開始講話,就相當于處于靜音期。因此,可以根據兩路通話各自的第一個RTP分組到達時間差值和公式1計算出需要在缺少靜音數據的話路頭補充多大的靜音RTP分組。
實例本發(fā)明在一套IP電話監(jiān)聽系統(tǒng)的會話還原子系統(tǒng)中首次應用,效果顯著。
1 RTP報文排序方法應用情況只采用序列號排序的情況下,當RTP流中的序列號存在溢出的時候,經過語音還原后會發(fā)現語音的播放內容是顛倒的,即后一段語音內容被放到了前面來播放。
只采用時間戳排序的情況下,雖未發(fā)現有時間戳溢出的情況存在,但卻存在時間戳跳變的情況,而其跳變的具體原因則不得而知。在這種情況下,也會出現語音播放內容混亂的情況。
而采用了序列號/時間戳聯(lián)合排序后,在長達兩天的測試過程中未發(fā)現有語音內容混亂的情況出現??梢姡谛蛄刑?時間戳聯(lián)合排序的方法能夠有效地對抖動RTP流實現順序的校正。
2缺失RTP報文填補方法應用情況如圖3所示為音頻源的音頻波形圖譜,整段音頻包含三個語音集中區(qū)域,每段音頻區(qū)域前都有一段時間沒有語音輸入,只存在幅度較小的噪聲輸入。在經過VoIP系統(tǒng)后,這些幅度較小的噪聲輸入將被檢測為靜音期,無RTP流輸出。在接收段對這種RTP流直接進行還原處理后會出現如圖4所示的音頻圖譜。從圖中可以看出三段語音區(qū)域被連接到了一起,播放時間將比圖中的短,而且不該連在一起的語音內容也會連續(xù)播放??梢?,這種情況是無法滿足語音還原的效果和要求的。
而采用了根據本發(fā)明的RTP報文填補方法處理后再進行還原則會形成如圖5所示的音頻圖譜。靜音期的白噪聲被無聲的數據填充。這樣在播放時間和音頻數據內容上都能夠和音頻源音頻很好的實現同步,實現了保真的語音還原。
權利要求
1.一種對VoIP系統(tǒng)中的RTP報文進行排序的方法,包括按照序列號對RTP報文進行排序;以及如果按照序列號的排序出現溢出,則從溢出點開始按照時間戳對RTP報文進行排序。
2.一種對VoIP系統(tǒng)中的RTP報文進行排序的方法,包括按照時間戳對RTP報文進行排序;以及如果按照時間戳的排序出現溢出,則從溢出點開始按照序列號對RTP報文進行排序。
3.一種對VoIP系統(tǒng)中的RTP報文進行填補的方法,包括根據標記域和時間戳判斷是否存在靜音期;當存在靜音期時,計算能填滿靜音期的時間空白的RTP分組的字節(jié)數;以及在計算出的RTP分組的靜荷部分填充靜音的數據。
4.根據權利要求3的對VoIP系統(tǒng)中的RTP報文進行填補的方法,其中VoIP系統(tǒng)包括兩路通話,所述方法還包括根據兩路通話的各自的第一個RTP分組到達時間差值以及所述標記域和時間戳來計算需要在通話的頭部補充的RTP分組的字節(jié)數。
5.根據權利要求3的對VoIP系統(tǒng)中的RTP報文進行填補的方法,其中根據以下公式判斷存在靜音期ΔT*1f>N*8V*1000]]>其中,ΔT表示相鄰兩個包的時間戳的差值;V表示對應于某種編碼方式的傳輸速率,單位為kbit/s;N表示相鄰的兩個RTP包的第一個RTP包的凈荷的大小,單位為字節(jié);f表示這種編碼方式對應的抽樣頻率,單位為Hz;C表示分組持續(xù)的時間,單位為s。
6.一種對VoIP系統(tǒng)中的RTP報文進行修補的裝置,包括RTP報文排序方法實現器,將RTP報文順序混亂的抖動RTP流進行排序;以及缺失RTP報文填補方法實現器,對經過排序的RTP順序報文中存在的報文缺失現象進行填補。
7.根據權利要求6的對VoIP系統(tǒng)中的RTP報文進行修補的裝置,還包括RTP報文解析實現器,將RTP報文解析為帶有域表示和域值的數據結構體。
8.根據權利要求6的對VoIP系統(tǒng)中的RTP報文進行修補的裝置,其中,根據序列號和時間戳對抖動RTP流進行排序。
9.根據權利要求6的對VoIP系統(tǒng)中的RTP報文進行修補的裝置,其中,缺失RTP報文填補方法實現器對靜音期進行填補。
全文摘要
本發(fā)明提供了一種對VoIP系統(tǒng)中的RTP報文進行排序的方法,其通過按照序列號和時間戳聯(lián)合對RTP報文進行排序。在對VoIP系統(tǒng)中的RTP報文進行填補的方法中,根據標記域和時間戳判斷是否存在靜音期;當存在靜音期時,計算能填滿靜音期的時間空白的RTP分組的字節(jié)數;以及在計算出的RTP分組的靜荷部分填充靜音的數據。對VoIP系統(tǒng)中的RTP報文進行修補的裝置包括RTP報文排序方法實現器,將RTP報文順序混亂的抖動RTP流進行排序;以及缺失RTP報文填補方法實現器,對經過排序的RTP順序報文中存在的報文缺失現象進行填補。
文檔編號H04L29/06GK101014001SQ200610138419
公開日2007年8月8日 申請日期2006年11月13日 優(yōu)先權日2006年11月13日
發(fā)明者陳哲, 郭世澤, 牛偉, 鄭康峰, 馮帥, 鄧青雄 申請人:陳哲, 郭世澤, 牛偉