摘要:論述了一套基于Speex語音引擎和RTP的VoIP系統(tǒng)設(shè)計(jì)和開發(fā),介紹了該系統(tǒng)服務(wù)器端和客戶機(jī)端的軟件實(shí)現(xiàn)。該系統(tǒng)具有點(diǎn)對(duì)點(diǎn)通信、算法延時(shí)小、丟包補(bǔ)償和延時(shí)補(bǔ)償性能好等特點(diǎn),并具有多方通話功能。性能對(duì)比實(shí)驗(yàn)表明,該系統(tǒng)的通話質(zhì)量優(yōu)于幾套流行的開源VoIP軟件,能滿足實(shí)際應(yīng)用的要求。
關(guān)鍵詞:基于IP網(wǎng)絡(luò)的語音傳輸; Speex; 實(shí)時(shí)傳輸協(xié)議; 多方通話
中圖分類號(hào):TP393文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)12-0320-04
網(wǎng)絡(luò)電話VoIP[1]是基于IP網(wǎng)絡(luò)的語音傳輸技術(shù),它將語音的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并在Internet上進(jìn)行傳輸。簡單地說,它是首先通過一連串的A/D轉(zhuǎn)換、編碼、壓縮、打包等程序來處理語音信號(hào),并將語音數(shù)據(jù)在IP網(wǎng)絡(luò)上傳輸?shù)侥康亩?,然后再?jīng)由相反的一連串程序,將語音數(shù)據(jù)還原成原來的語音信號(hào)播放給接聽者。VoIP目前已被廣泛地應(yīng)用于全球IP互聯(lián)的Internet環(huán)境中。它與模擬語音通信系統(tǒng)相比具有抗干擾性強(qiáng)、保密性好、易于集成、成本低廉等特點(diǎn),并可開發(fā)出更多的增值業(yè)務(wù)。然而,IP網(wǎng)絡(luò)的語音傳輸質(zhì)量成為制約VoIP發(fā)展的瓶頸?;诜纸M交換的IP網(wǎng)絡(luò)使得VoIP系統(tǒng)存在分組延遲、延遲抖動(dòng)、丟包等問題,使得用戶聽到的話音會(huì)出現(xiàn)不連貫甚至中斷的現(xiàn)象。現(xiàn)有的VoIP系統(tǒng)還難以實(shí)現(xiàn)高質(zhì)量的實(shí)時(shí)語音通信。如何提高語音通信質(zhì)量是近年來VoIP技術(shù)研究的一個(gè)重要課題。
Speex[2,3]是近年來開發(fā)出的一套功能強(qiáng)大的語音引擎,能夠?qū)崿F(xiàn)高質(zhì)量和低比特率的編碼。它不僅提供了基于碼激勵(lì)線性預(yù)測(CELP)算法的編/解碼模塊,而且在其最新發(fā)布的版本中還提供了聲音預(yù)處理和聲學(xué)回聲消除模塊,為保障IP網(wǎng)絡(luò)中的語音通信質(zhì)量提供了技術(shù)手段。此外,Speex還具有壓縮后的比特率低(2~44 kbps)的特點(diǎn),并支持多種比特率。這些特點(diǎn)使得Speex特別適合VoIP的系統(tǒng)。
伴隨著VoIP應(yīng)用的熱潮,目前國內(nèi)外出現(xiàn)了很多關(guān)于VoIP的系統(tǒng)實(shí)現(xiàn),但是大多數(shù)系統(tǒng)設(shè)計(jì)均是基于直接使用IP地址進(jìn)行呼叫。這就存在一些弊端,如呼叫方必須事先知道對(duì)方的IP地址,而這無形中降低了系統(tǒng)的可用性。本文在Speex和RTP(實(shí)時(shí)傳輸協(xié)議)[4]的基礎(chǔ)上,論述了一套基于客戶機(jī)/服務(wù)器模式的VoIP系統(tǒng)的設(shè)計(jì)與開發(fā)。該系統(tǒng)克服了上述弊端,提高了VoIP系統(tǒng)的友好性和可推廣性。經(jīng)過實(shí)驗(yàn)測試,本系統(tǒng)即使在網(wǎng)絡(luò)條件較差的情況下,也能達(dá)到較好的語音通信效果,而且支持3~5人的多方通話。
1Speex概述
Speex是近年來開發(fā)出的一種基于碼激勵(lì)線性預(yù)測算法的開源軟件語音引擎。它主要面向Internet上的語音通信。其主要設(shè)計(jì)目標(biāo)是為了提供高質(zhì)量和低比特率的語音編碼。Speex編碼支持多種比特率,如8 kHz采樣的低比特率(窄帶2.15~24.6 kbps)、16 kHz采樣的中比特率(寬帶3.95~42.2 kbps)以及32 kHz采樣的高比特率(ultra-wideband)。Speex提供了大多數(shù)別的編/解碼器所不具備的技術(shù)性能,主要包括:可以在同一個(gè)比特流中對(duì)語音信號(hào)實(shí)現(xiàn)窄帶(8 kHz)、寬帶(16 kHz)和超寬帶(32 kHz)的壓縮;支持聲音強(qiáng)度的立體聲編碼;具有丟包補(bǔ)償能力;具有可變比特率(variable bitrate,VBR)特性,編/解碼器可以在任意時(shí)刻動(dòng)態(tài)地改變語音的比特率;能實(shí)現(xiàn)語音活動(dòng)檢測(voice activity detection,VAD);能實(shí)現(xiàn)聲音的DTX(discontinuous transmission,不連續(xù)傳輸),當(dāng)背景噪聲穩(wěn)定時(shí),可以完全停止聲音數(shù)據(jù)包的傳送;具有語音處理的定點(diǎn)數(shù)計(jì)算功能(正在開發(fā)中);具有聲學(xué)回聲消除功能。
Speex除了編/解碼模塊外,還包括噪聲消除、靜音抑制和自動(dòng)增益控制等預(yù)處理模塊以及回聲消除模塊。正是由于其完備的功能和優(yōu)良的性能,Speex受到了許多VoIP開發(fā)者的關(guān)注。2006年9月發(fā)布的最新版本Speex 1.2 beta1在聲音處理性能上得到了進(jìn)一步的改善。語音編碼和解碼的質(zhì)量有了明顯的提高。軟件運(yùn)行時(shí)的內(nèi)存使用有了大幅度的降低,定點(diǎn)計(jì)算情況下窄帶編/解碼的內(nèi)存開銷下降為不到原來的一半,只需占用不到6 KB的RAM空間,而且CPU的占用率也有了下降,使Speex在諸如PDA等便攜式語音通信設(shè)備中的應(yīng)用成為可能。
Speex提供了一系列調(diào)用其各個(gè)功能模塊的API,使得開發(fā)者可以很方便地使用這些功能模塊來進(jìn)行VoIP系統(tǒng)的編程開發(fā)。各模塊的API在文獻(xiàn)[3]中有詳細(xì)描述。在新版本的Speex中,回聲消除模塊的API有了改進(jìn),開發(fā)者能更方便地調(diào)用這個(gè)模塊。此外,抖動(dòng)緩沖區(qū)(jitter buffer)模塊不再專門針對(duì)Speex編碼,從而可以應(yīng)用于其他編碼格式的系統(tǒng)。這些特點(diǎn)都為Speex在VoIP系統(tǒng)中的應(yīng)用奠定了基礎(chǔ)。
2系統(tǒng)的功能模塊結(jié)構(gòu)
本文所述的VoIP系統(tǒng)采用Speex編碼。整個(gè)系統(tǒng)由服務(wù)器端和客戶端兩部分構(gòu)成。系統(tǒng)總體框架如圖1所示。
數(shù)據(jù)庫服務(wù)器上保存了所有已注冊用戶的資料。每個(gè)用戶首先要通過客戶端登錄到服務(wù)器上,并獲取在線好友的列表,然后才能對(duì)在線的好友進(jìn)行語音呼叫??蛻舳酥g的通話采用點(diǎn)對(duì)點(diǎn)的方式進(jìn)行。這就避免了由于語音包經(jīng)過服務(wù)器中轉(zhuǎn)所造成的過大延遲。
2.1服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)
服務(wù)器端除了需要維護(hù)一個(gè)數(shù)據(jù)庫以保存用戶信息外,還要對(duì)各個(gè)客戶端進(jìn)行指揮和管理。
服務(wù)器一旦啟動(dòng)服務(wù),則開始偵聽用戶請求。服務(wù)器收到客戶端發(fā)來的消息時(shí),首先,發(fā)回確認(rèn)信息;然后,建立一個(gè)獨(dú)立線程來處理接收到的數(shù)據(jù)。在此線程中,按照接收到數(shù)據(jù)的類別進(jìn)行相應(yīng)的處理。如有需要,服務(wù)器會(huì)向用戶發(fā)送處理的結(jié)果,成功或失敗的消息。處理完畢,此線程結(jié)束。這樣,可以實(shí)時(shí)接收每個(gè)用戶的請求,不會(huì)因?yàn)樘幚砟骋粋€(gè)用戶的請求,而忽略了其他用戶。服務(wù)器端的工作流程如圖2所示。
2.2客戶端的設(shè)計(jì)與實(shí)現(xiàn)
客戶端的功能可以分為兩部分:一部分是與服務(wù)器端進(jìn)行交互,從服務(wù)器上獲取相關(guān)信息;另一部分是完成不同客戶端之間的點(diǎn)對(duì)點(diǎn)通話。其中第二部分是VoIP系統(tǒng)的核心。
客戶端程序啟動(dòng)后,若有本地用戶信息,則加載本地用戶信息,并顯示登錄窗口;若沒有,則顯示用戶注冊窗口(在登錄窗口中,也可以選擇用戶注冊)。登錄時(shí),可選擇是否隱身,并發(fā)送賬號(hào)和密碼到服務(wù)器進(jìn)行驗(yàn)證,如正確則成功登錄;否則失敗。當(dāng)成功登錄進(jìn)入系統(tǒng)后,服務(wù)器將發(fā)送用戶的全部好友信息以及在線好友信息(包含好友的IP和端口號(hào))。在好友列表中,在線者將以高亮度顯示,并處在列表的頂部;不在線者將以灰色顯示。如果有好友上線,系統(tǒng)會(huì)立即通知用戶;好友下線,用戶也可以在好友列表中看到。用戶可以接收到好友發(fā)來的語音通話的請求,同時(shí)根據(jù)用戶的操作,客戶端可以向好友給出回應(yīng),接聽或拒絕。系統(tǒng)還具有查看好友信息、查看在線用戶、查找用戶和修改個(gè)人信息等功能。若用戶選擇注冊,在填寫注冊信息后,信息被發(fā)送到服務(wù)器;服務(wù)器登記用戶注冊信息后則會(huì)發(fā)送回由系統(tǒng)自動(dòng)分配的賬號(hào);然后用戶就可以成功登錄系統(tǒng)。客戶端的工作流程如圖3所示。
3點(diǎn)對(duì)點(diǎn)通話模型
最基本的VoIP系統(tǒng)應(yīng)該包含錄音模塊、放音模塊、編碼模塊、解碼模塊、接收模塊和發(fā)送模塊。本系統(tǒng)除了這些基本模塊之外,還在編碼之前增加了Speex的回聲消除和預(yù)處理模塊。
本系統(tǒng)的運(yùn)行期結(jié)構(gòu)(run-time architecture)由六個(gè)線程組成,如圖4所示。其中錄音線程負(fù)責(zé)從聲卡采集聲音數(shù)據(jù)并將其放到編碼緩沖區(qū)中等待編碼模塊使用。編碼線程每次從編碼緩沖區(qū)中取出一幀數(shù)據(jù)進(jìn)行Speex的回聲消除、預(yù)處理以及編碼,并將編碼后的數(shù)據(jù)放入發(fā)送緩沖區(qū)。發(fā)送線程每次從發(fā)送緩沖區(qū)中取出編碼后的數(shù)據(jù)進(jìn)行打包(RTP包),并且發(fā)送給通話的另一方。接收線程負(fù)責(zé)從網(wǎng)絡(luò)上接收對(duì)方發(fā)來的RTP語音包。由于每個(gè)RTP包頭中有包的序號(hào)信息,接收線程依據(jù)包的序號(hào)把聲音數(shù)據(jù)依次放入抖動(dòng)緩沖區(qū)中,以達(dá)到正確排序和消除抖動(dòng)的目的。解碼線程負(fù)責(zé)從抖動(dòng)緩沖區(qū)中取出接收到的語音數(shù)據(jù)進(jìn)行Speex的解碼運(yùn)算,并將解碼后的語音數(shù)據(jù)存入播放緩沖區(qū)。播放線程從播放緩沖區(qū)中取出語音數(shù)據(jù),送至放音設(shè)備播放。
上述六線程的運(yùn)行期結(jié)構(gòu)能夠使系統(tǒng)各模塊具有高度的并行性。這對(duì)于VoIP這種實(shí)時(shí)性要求很高的應(yīng)用來說十分重要。例如,當(dāng)接收線程收到一個(gè)包后,它把解碼的任務(wù)交給解碼線程,然后又可以去等待或處理接收其他的數(shù)據(jù)包。因此對(duì)數(shù)據(jù)包的接收響應(yīng)較快。
上述通話模型的實(shí)現(xiàn)采用了RTP和多方通話機(jī)制[5,6]。RTP是由IETF的AVT(Audio Video Transmission)小組開發(fā)的,1996年成為RFC正式文檔,為IP網(wǎng)上語音、圖像、傳真等數(shù)據(jù)等多種需實(shí)施傳輸?shù)拿襟w數(shù)據(jù)提供點(diǎn)到點(diǎn)和點(diǎn)到多點(diǎn)的端到端的傳輸功能。RTP實(shí)際上包含兩個(gè)相關(guān)的協(xié)議——RTP和RTCP。前者用于傳送實(shí)時(shí)數(shù)據(jù);后者實(shí)現(xiàn)實(shí)時(shí)傳輸控制。RTP本身不提供任何保證實(shí)時(shí)傳送數(shù)據(jù)和服務(wù)質(zhì)量的能力,而只是提供負(fù)荷類型指示、序列號(hào)、時(shí)戳、數(shù)據(jù)源標(biāo)志等信息,接收端根據(jù)這些信息重新恢復(fù)正確的數(shù)據(jù)。RTCP是用來提供RTP數(shù)據(jù)傳輸質(zhì)量反饋的,同時(shí)可以在會(huì)議業(yè)務(wù)中傳送與會(huì)者的信息。
本系統(tǒng)采用了點(diǎn)對(duì)點(diǎn)的多方通話模型,即為每一個(gè)通話者都建立一個(gè)RTP會(huì)話,在語音通話前,要通過一條主RTP線路建立連接,它的端口被記錄到服務(wù)器上。用戶上線后,客戶端可從服務(wù)器上獲得各在線好友的RTP端口號(hào)。建立連接的過程主要是協(xié)調(diào)好雙方將要在哪個(gè)端口上創(chuàng)建RTP會(huì)話進(jìn)行通話。斷開時(shí),通過各自RTP的BYEPacket結(jié)束會(huì)話。建立連接的過程如圖5所示;多方通話模型如圖6所示。
圖5中,主叫方先做好通話準(zhǔn)備,并創(chuàng)建一個(gè)將用來與對(duì)方通話的RTP會(huì)話。把這個(gè)端口號(hào)加到呼叫包中周期性地發(fā)送出去,直到對(duì)方應(yīng)答。被叫方收到呼叫包后,如果接收呼叫,就創(chuàng)建一個(gè)用來通話的RTP會(huì)話。同時(shí)從接收到的呼叫包中得到對(duì)方用來通話的RTP端口;然后把對(duì)方IP和這個(gè)端口所表示的RTP地址添加到組播地址(在單方通話時(shí)實(shí)際上是進(jìn)行單播),并開始通話。主叫方用來通話的RTP會(huì)話第一次收到對(duì)方發(fā)來的RTP包時(shí),也把對(duì)方的用來通話的RTP地址加到組播地址,開始通話。當(dāng)用戶要結(jié)束通話時(shí),客戶端只要發(fā)送RTP提供的BYEPacket包即可結(jié)束通話。
在圖6所示的多方通話模型中,錄音線程每錄完一幀后,就把這幀發(fā)給編碼線程。在編碼線程中,對(duì)語音幀進(jìn)行Speex回聲消除以及噪聲消除、自動(dòng)增益、靜音抑制等預(yù)處理,并進(jìn)行編碼;然后將編碼后的數(shù)據(jù)傳送給發(fā)送線程。在發(fā)送線程中,有多個(gè)RTP會(huì)話;線程調(diào)用每個(gè)會(huì)話的SendPacket()函數(shù),向每個(gè)RTP會(huì)話方發(fā)送語音包。在接收線程中,每個(gè)RTP會(huì)話從各自的對(duì)話方接收語音包放入抖動(dòng)緩沖區(qū),經(jīng)過Speex解碼運(yùn)算后,計(jì)時(shí)器周期性地從每個(gè)RTP會(huì)話的抖動(dòng)緩沖區(qū)中取出一幀進(jìn)行混音,然后播放。
RTP的接收反饋RTCP包內(nèi)包含了近期內(nèi)發(fā)送的數(shù)據(jù)包的丟失率。接收方在收到RTCP包后,通過丟包率就可以知道對(duì)方的接收情況,據(jù)此可以采取相應(yīng)的丟包補(bǔ)償措施。本系統(tǒng)能夠根據(jù)丟包率適當(dāng)?shù)匕l(fā)送一些語音冗余包,保證了語音質(zhì)量。
4系統(tǒng)測試
目前已有不少VoIP系統(tǒng)在Internet上獲得了應(yīng)用。Skype[7]最具代表性,并且是目前公認(rèn)最好的商用VoIP系統(tǒng)。IHU[8]和NetTalk[9]則是具有代表性的開源VoIP系統(tǒng)。本系統(tǒng)在PC上進(jìn)行了性能測試,并與上述幾套系統(tǒng)進(jìn)行了通話話音質(zhì)量的對(duì)比實(shí)驗(yàn)。測試機(jī)器配置是Intel P4 1.8 GHz CPU,512 MB內(nèi)存,操作系統(tǒng)為Windows XP。網(wǎng)絡(luò)環(huán)境有兩種:一種是在CERNET內(nèi)進(jìn)行通信;另一種是在CERNET與CHINANET間進(jìn)行通信。測試結(jié)果如表1所示。
從表1中可以看出,在網(wǎng)絡(luò)互聯(lián)性能較好的情況下(在CERNET內(nèi)通信),上述四種VoIP系統(tǒng)都能達(dá)到較好的通話效果。本系統(tǒng)的通話質(zhì)量與Skype相比差距不大,只是音質(zhì)上略遜于Skype。主要原因在于Skype采用了iLBC[10]編碼方式,而iLBC的編碼后比特率是13.3~15.2 kbps,明顯高于Speex在8 kHz采樣下的比特率。因此,Skype音質(zhì)略優(yōu)于本系統(tǒng)是以占用更多的帶寬為代價(jià)的。本系統(tǒng)與IHU和NetTalk相比,優(yōu)勢相當(dāng)明顯,主要表現(xiàn)在本系統(tǒng)增加了回聲消除和多方通話功能;另外,聲音抖動(dòng)的去除也做得相當(dāng)好。在網(wǎng)絡(luò)條件相對(duì)較差的情況下(在CERNET與CHINANET間進(jìn)行通信),四種VoIP系統(tǒng)的通話質(zhì)量均出現(xiàn)不同程度的下降。但是本系統(tǒng)與IHU和NetTalk相比,在聲音質(zhì)量上要好得多,而與Skype相比主要的不足表現(xiàn)在回聲消除方面。本系統(tǒng)采用的是Speex語音引擎提供的回聲消除模塊,在網(wǎng)絡(luò)延遲較小的情況下,具有比較明顯的回聲消除效果。但是實(shí)驗(yàn)表明,一旦網(wǎng)絡(luò)延遲較大,Speex的回音消除效果往往不能令人滿意。提高回聲消除模塊的性能是本系統(tǒng)需要進(jìn)一步改進(jìn)的地方。
5結(jié)束語
目前,基于IP網(wǎng)絡(luò)的多媒體通信得到了迅猛的發(fā)展,特別是VoIP系統(tǒng)已日益成為Internet用戶進(jìn)行語音通信的主要手段。資費(fèi)便宜以及IP網(wǎng)絡(luò)的廣泛性和可伸縮性,使得VoIP成為一種可以替代傳統(tǒng)的PSTN電話的通信方式。Speex是近年來出現(xiàn)的功能強(qiáng)大的開源語音引擎;RTP是協(xié)議是網(wǎng)絡(luò)多媒體的核心協(xié)議之一。本文論述了一個(gè)基于Speex語音引擎和RTP的、客戶機(jī)/服務(wù)器結(jié)構(gòu)模式的VoIP系統(tǒng)的設(shè)計(jì)與開發(fā)。該系統(tǒng)采用客戶機(jī)/服務(wù)器模式克服了現(xiàn)有的多數(shù)VoIP系統(tǒng)只能直接用IP地址進(jìn)行呼叫的缺陷,提高了VoIP系統(tǒng)的友好性和可推廣性。另外,Speex提供的高質(zhì)量、低比特率的編碼算法以及聲音預(yù)處理和回聲消除功能使得本系統(tǒng)的通話質(zhì)量優(yōu)于其他的一些開源VoIP系統(tǒng)。在不同網(wǎng)絡(luò)互聯(lián)環(huán)境中對(duì)系統(tǒng)進(jìn)行的測試表明,在網(wǎng)絡(luò)延遲較小時(shí),本系統(tǒng)回聲消除效果明顯,但是當(dāng)網(wǎng)絡(luò)延遲較大時(shí),聲學(xué)回聲消除的效果還不能令人滿意。進(jìn)一步改善回聲消除功能是本系統(tǒng)后續(xù)開發(fā)的主要任務(wù)。
參考文獻(xiàn):
[1]GOODE B. Voice over Internet protocol(VoIP)[J]. Proceedings of the IEEE, 2002,90(9):1495.
[2]XIPH Open Souce Community. Speex: a free codec for free speech[EB/OL].[2006-09-27].http://www.speex.org.
[3]VALIN J M. The Speex codec manual(version 1.2-beta1)[EB/OL].[2006-09-27].http://www.speex.org/docs/manual/speex-manual.pdf.
[4]HENNING S, STEPHEN L C, RON F, et al. RFC 3550 RTP, a transport protocol for real-time applications[S].
[5]HERSENT O, PETIT J P, GURLE D. Beyond VoIP protocols: understanding voice technology and networking techniques for IP tele-phony[M]. Chichester: Wiley, 2005:206.
[6]HERSENT O, PETIT J P, GURLE D. IP telephony: deploying voice-over-IP protocols[M]. Chichester: Wiley, 2005:108.
[7]張晉江.Skype再次掀起VoIP熱潮[J].通信世界,2005(12):20.
[8]TROTTA M. I hear U(IHU) project homepage[EB/OL].[2006-10-15].http://ihu.sourceforge.net/index.html.
[9]LUSSIER G A, MORENCY F C. NetTalk project Web page[EB/OL].[2006-10-05].http://ntalk.sourceforge.net.
[10]The iLBCfreeware.org Project. iLBCfreeware.org project homepage[EB/OL].[2006-10-05].http://www.ilbcfreeware.org/index.html.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”