隨著語音壓縮技術的成熟,網絡帶寬的不斷擴展,以及市場的需求,IP電話技術已被從實驗室中推向了成熟的商用領域。然而,要想把此種技術推向商用,就不得不重視安全問題。IP電話的監控和管理是VoIP(Voice over IP)安全領域中非常重要的部分,其中的一項關鍵技術就是IP電話語音還原技術。IP電話語音還原技術是對IP電話語音捕獲系統捕捉的語音數據包進行處理,最終還原雙方語音通話過程的技術。
VoIP系統音頻數據傳輸過程如圖1所示。在通過呼叫控制信令(如H.323、SIP)建立起兩個終端之間的媒體流通道后,便開始了兩個終端之間的語音傳遞過程。整個過程始于對模擬音頻的模數轉換,經過抽樣、量化、編碼生成的原始PCM 數據再經過音頻編碼器的壓縮編碼生成待傳送的音頻數據,通過RTP、UDP、IP協議的層層封裝生成包含有音頻抽樣信息的IP報文發送到接收終端。接收端接收到含有音頻數據的IP報文取出RTP凈荷中的音頻數據,送入相應的解碼器解碼,然后通過音頻設備進行數模轉換,回放出原始的聲音。
我們所要研究的內容就是如何通過處理和解析RTP協議數據包,按照正確的順序取出RTP凈荷,如何對RTP凈荷進行解碼生成.wav文件,以及如何把兩路.wav文件合成為一個包含兩路會話內容的.wav文件。
1 RTP數據的處理
RTP數據指的是由IP電話語音捕獲器捕捉并記錄下來的語音會話當中傳送的RTP數據報文的集合,如文件、數據庫記錄等。以一次通話過程為例,IP電話語音捕捉器將分別生成兩個獨立的記錄有雙方通話內容的RTP數據集,記為forward—RTP和reverseRTP,這就是一次處理過程中待處理的數據源。
RTP數據的處理總體上分為兩個部分:排序處理和補包處理。
1.1 排序處理
由于網絡傳輸存在一定的不可靠性,在數據傳輸的過程中有可能會導致數據包到達順序的局部混亂,通過排序將很好地解決這個問題。
從RTP協議來看,可以用于進行排序的域有兩個,即序列號和時間戳。在沒有出現亂序的情況下,序列號和時間戳都應該是遞增的,而序列號的遞增量應該為1。但是序列號是一個16bit的域,在長時間的通話過程中有可能存在溢出的情況,這將導致排序結果不正確。通過實驗觀察,在實際通話過程中這種情況確實存在。如圖2所示為采用Ethereal網絡數據分析軟件抓到的RTP數據包,其中就存在序列號溢出。因此,我們采用時間戳域作為索引對數據包進行排序。待排序的數據特征是數據基本有序,通過綜合考慮各種排序算法的時間復雜度和程序實現的復雜度,我們采用直接插入排序法,比較順序為從后向前。
1.2 補包處理
網絡傳輸的不可靠性還會導致數據包的丟失,可以用填補丟失數據包的方法解決。然而,前一種情況屬于非正常缺失,出現的概率很小。VolP系統實現中,常常在檢測出通話靜音期后,采用停發語音包的方法以減少語音數據傳輸所占用的帶寬。補包處理主要是為了解決這種更為普遍的正常缺失情況。如果不進行補包處理,通話過程中靜音期的停頓在恢復出語音后將無法體現,勢必嚴重影響語音還原的效果,還會導致兩路音頻進行合路后聲音的嚴重不同步。
補包算法是基于RTP協議中的標記域和時間戳域實現的。根據RFC 1889對于RTP協議的描述可以得出以下結論。標記域可以用來判斷是否存在靜音期,如果標記域置為1,則說明此分組與前一分組之間存在靜音期。時間戳記錄凈荷中的第一個抽樣產生的時間。典型的語音編碼模式的頻率為8000Hz,從一個分組到另一個分組的時間戳值的增量取決于分組中抽樣的數量。例如,如果一個分組包括10個語音抽樣和一個值為1的時間戳,那么下一個分組的時間戳則為11??紤]到抽樣以8000Hz的速率發生(每0.125ms),那么時間戳中10的差別就代表了時間上1.25ms的差別。如果在靜音期,沒有發送任何分組,那么下一個RTP分組可能包含一個明顯比前一個RTP分組大得多的時間戳。
補包算法的具體描述如下:
因為不同的編碼方式,有不同的傳輸速率,所以在無靜音期情況下,相鄰的兩個RTP數據包的時間戳的差值和第一個包的凈荷的大小之間的關系因編碼方式的不同而有所不同。
以△T表示相鄰兩個包的時間戳的差值:V表示對應于某種編碼方式的傳輸速率(單位kbit/s);Ⅳ表示相鄰的兩個RIP包的第一個RTP包的凈荷的大小(單位Byte);l廠表示這種編碼方式對應的抽樣頻率(單位Hz);C表示分組持續的時間(單位S)那么如果在沒有靜音期的情況下,△T、V、N、f和C應該滿足如下的關系:
除此以外,還需要進行一種特殊的補包處理,即補充通話頭,以使兩路通話同步。要實現兩路會話的同步合成,必須要找到一個正確的同步點。通常情況下,兩路通話各自的第一個RTP分組到達IP電話捕捉器的時間是不一樣的。例如回鈴音期間,一方已經向另一方發送了回鈴音的RTP分組,而另一方還沒有開始講話,就相當于處于靜音期。因此,可以根據兩路通話各自的第一個RTP分組到達時間差值和公式(1)計算出需要在缺少靜音數據的話路頭補充多大的靜音RTP分組。
2 音頻解碼和處理
音頻解碼過程采用于RTP頭中負載類型相一致的解碼器對RTP凈荷數據進行解碼,生成l6位的原始PCM 數據,然后寫入.way文件中,最終生成能夠采用音頻播放器進行播放的.wav音頻文件。
通過前面的處理過程,一次通話的兩路會話都記錄在各自的.way文件中,而且保證其內容是同步對齊的。合路處理采用把兩路.wav文件中的數據部分按抽樣量化值按比例疊加的方法。下面,通過證明兩個模擬波形疊加后進行模數轉換(抽樣、量化和編碼)生成的數字音頻與分別模數轉換后再疊加生成的數字音頻兩者引入的誤差相當,論證其方法的合理性。
3 解決方案
基于前面的理論分析,我們提出一套IP電話語音還原的方案,并采用C++編程實現了全部的功能及算法。方案流程圖如圖3所示。
默認條件下,MSFTESQL服務只加載被微軟認證的篩選器,使用參數“0”即可將認證取消。
?、诩虞d篩選器
EXEC sp— fulhext—service’load—OS— resources’,1
此命令是用來加載第三方的篩選器。如果將參數“1”改為“0”,則僅加載SQL Server實例的篩選器。
以上兩個步驟缺一不可,但執行順序可以不一樣。除了自行開發第三方篩選器外,還可以從因特網上去下載其它第三方的篩選器,如PDF、CAB、ZIP等格式文件的篩選器。PDF篩選器可以到WWW.adobe.com網站上下載,在WWW.citeknet.com
網站上提供有其它文件格式的篩選器下載。
來自德西特科技http://www.decitone.com/