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