???? 關鍵詞:VoIP,IP電話,語音壓縮
1引言
Internet在全球范圍內呈爆炸性增長的趨勢,使全社會很快融入到信息浪潮中,它的主要業務已由傳統的文件傳輸、電子郵件和遠程登錄等基本服務轉向以VoIP為代表的多媒體服務。VoIP(VoiceOver IP)是指將模擬的語音信號數字化,進行分段壓縮后按照一定的規律加上IP地址頭,經IP網絡路由或交換至目的地址后,IP包再經相反過程還原成語音信號。VoIP涉及到的技術比較繁雜,其中尤以包括分組語音技術、語音編碼及壓縮技術在內的幾種技術的發展最為關鍵。
2系統概況
本系統是基于Visual C++和InternetProtocol,在Windows平臺上開發的,它利用現有的全雙工聲卡和Internet網絡,來實現PCto PC的通話,整個系統可以分為幾個部分,首先,對音頻設備(聲卡)的模擬語音信號進行采集,經過A/D(模數)轉換為數字化語音包;然后,采用一定編碼壓縮技術對語音數據包進行壓縮;第三,按一定的打包規則將壓縮幀轉換成IP數據包通過數據網絡進行傳輸;第四,在目的地經過數據解壓;第五,再把語音數據包寫入到音頻設備驅動程序;最后,D/A(數模)轉換復原成話音就實現播放,從而達到語音通信的目的。整個過程見圖1。
3系統實現
3.1語音處理
語音數據處理的整個過程可以分成兩個部分:A/D轉換,即把原始聲音的模擬輸入轉化為數字化信息;D/A轉換,即把數字信息轉化為模擬數據。在通話過程中,跟用戶最直接打交道的是說和聽,所以,語音數據處理的好壞直接影響了系統實現的成敗。
本系統是要把語音直接轉換為數據,放在內存中,而不是存為語音文件,而且播放語音時,也是直接播放語音數據,而不是播放語音文件。這樣的好處是省略了讀寫硬盤的費時操作,提高了語音通話的實時性。要完成上述語音操作,編程語言中提供的容易使用的高級多媒體語音函數是無法勝任的,只能通過Windows MDK(Multimedia DevelopmentKit)中的多媒體低層音頻服務來實現,這一類函數和結構的名字一般都以“wave”作為前綴。Windows下錄制或播放音頻數據,其主要操作就是將音頻數據讀出到音頻設備驅動程序和從音頻設備驅動程序寫入的操作。低層波形音頻函數通過WAVEHDR結構的音頻數據塊對設備驅動程序的音頻數據進行上述控制。以錄音為例,其準備工作主要有幾點,打開錄音設備,獲得錄音句柄,指定錄音格式,分配若干用于錄音的內存。開始錄音時,先將所有內存塊都提供給錄音設備用來錄音,錄音設備就會依次將語音數據寫入內存,當一塊內存寫滿,錄音設備就會發一個Window消息MM WIM DATA給相應的窗口,通知程序作相關的處理,這時程序通常的處理是把內存中的數據進行復制,如寫入文件等,在此我們的處理是把數據進行壓縮和網絡發送,然后把內存置空,返還給錄音設備進行錄音,這樣就形成一個循環不息的錄音過程。結束錄音時就釋放所有內存塊,關閉錄音設備。關鍵的錄音函數和順序如下:
開發人員可以充分利用Windows操作系統的多任務機制,在原始聲音進行采樣的同時對采樣數據進行實時的音頻處理,并實時播放處理后的音頻數據,使錄音、音頻處理和放音三個原本獨立的過程異步并行處理,以達到原始聲音采樣和處理后的聲音同步播放的實時效果。
多媒體低層音頻開發中,音頻數據量一般比較大,應用程序必須不斷向設備驅動程序提供音頻數據塊才能保證錄音或播放的持續進行。由于錄音和放音的具體操作是由設備驅動程序控制音頻硬件在后臺完成的,因而應用程序必須檢測什么時候用完一個數據塊,并及時傳送下一個數據塊,才能避免播放停頓和丟失錄音信息。低層音頻服務中的回調機制(Callback Mechanism)為我們提供了檢測音頻數據塊使用情況的方法。所謂回調機制,即在打開音頻設備時,通過指定設備打開函數(waveIn Open(? )或waveOutOpen( ))的fdwOpen參數來指定一個事件、函數、線程或窗口作為回調對象,dwCallback參數將說明對象句柄或函數地址。設備驅動程序不斷向回調對象發送消息,通知音頻數據塊的處理狀態,用戶程序在窗口處理過程或回調函數中響應這些消息,并做出相應的處理。
3.2語音壓縮
傳統的電話網是以電路交換的方式傳輸語音的,它需要的基本帶寬為64kbit/s。而要在基于IP的分組網絡上傳輸語音,就必須對模擬的語音信號進行特殊的處理,使處理后的信號可以適合在面向無連接的分組網絡上傳輸,這項技術稱為分組語音技術。語音壓縮是分組語音系統中的重要組成部分。目前,通過調制解調器接入網絡的最大速率為56kbit/s,遠遠不能適應多媒體通信的要求,雖然已有更快的訪問技術如ISDN,ADSL,但畢竟還不普及。因此必須采用語音壓縮算法來處理語音,而且從節省網絡帶寬的角度出發,語音壓縮也是非常必要的。
音頻數據是大多數多媒體應用程序向用戶提供信息的主要方式,這些數據一般具有較高的采樣速率,如果不經過壓縮的話,保存它們需要消耗大量的存貯空間,在網絡上進行傳輸的效率也很低,因此音頻數字壓縮編碼在多媒體技術中占有很重要的地位。目前常用的壓縮方法有很多種,不同的方法具有不同的壓縮比和還原音質,編碼的格式和算法也各不相同,其中某些壓縮算法相當復雜,普通程序不可能去實現其編解碼算法。所幸的是,Windows 9x/NT 4.0/Windows 2000為多媒體應用程序提供了強大的支持,引入了ACM(Audio CompressionManager,音頻壓縮管理器),它負責管理系統中所有音頻編解碼器(Coder-Decoder,簡稱CODEC,是實現音頻數據編解碼的驅動程序),應用程序可以通過ACM提供的編程接口調用這些系統中現成的編解碼器來實現音頻數據的壓縮和解壓縮,這一類函數和結構的名字一般都以“ACM”作為前綴。Windows 9x/NT 4.0/2000系統自帶的音頻COD ECs支持一些音頻數據壓縮標準,如MicrosoftADPCM、Microsoft Interactive Multime dia Asso ci ation(I MA)ADPCM、DSP GroupTrueSpeech(TM)等。本系統分別對MSADPCM、IMA ADP CM、MS GSM 6.10 、DSP GroupTrueSpeech(TM)這四種具有代表性的壓縮標準進行了測試和比較。從壓縮率來看,MSA DPCM和IMA ADPCM都是4:1,MSGSM 6.10是2:1,而DSPGroup TrueSpeech(TM)則達到了10:1。從還原后的效果來看,應該MSGSM 6.10比較好,而且它支持比較高的采樣頻率,但它的壓縮率太小,我們還是棄用了。而DSPGroup TrueSpeech(TM)有著很高的壓縮率,大大降低了對帶寬的要求,很適合在Internet上傳輸,而且還原后的效果還可以,所以最后還是選用了它。
3.3語音傳輸
本系統采用基于Socket的TCP/IP協議通信,通過在網絡傳輸層建立兩端計算機的連接來實現實時通信。為了便于在Windows平臺上開發,微軟公司推出了一套以U.C.Berkeley大學BSD UNIX中流行的Socket接口為范例的網絡編程接口Windows Sockets。它不僅包含了人們所熟悉的Berkeley Soc ket風格的庫函數,也包含了一組針對Windows的擴展庫函數,以使程序員能充分地利用Windows消息驅動機制進行編程。根據傳輸數據類型的不同,Windows Sockets可分為數據流Socket(SOCK STREAM)和數據報Socket(SOCK—DGRAM)兩類。數據流Socket提供了雙向的、有序的的、無差錯、無重復并且是無記錄邊界的數據流服務,TCP/IP協議使用該類接口。數據報Socket提供雙向的,但不保證是可靠的、有序的、無重復的數據流服務,也就是說,一個從數據報Socket接受信息的進程有可能發現信息重復了,或者和發出的順序不同。
根據以上分析,本系統在實現的過程中采用的是數據流Socket,通過在兩臺PC上建立雙向的傳輸連接,可以保證音頻數據的實時無差錯傳輸。具體工作是這樣的,首先從CWinThread繼承了兩個子類CSocketListenThread、CMySocketThread。第一個類的工作是一些初始化工作和監聽是否有Socket請求連接,這是一個不斷循環的過程。第二個類的工作是如果有Socket請求來了,那么在這個類里就分配一個Socket給這個請求,從而建立連接。同時在第二個類里還定義幾個輔助函數,以便事件的觸發,最典型的是ReadFromSocket()和SendToSocket(),分別用來接收和發送,其實現主要是通過Windows底層APIs函數的調用。有了這兩個類我們就可以完成Socket的連接、接收和發送。
同時還要指出的是,本系統使用的版本是Windows Socket2,相對Windows Socket1.1來說,Win確良dows Socket2提供了快速、多線程數據傳送的能力,性能更加先進,并支持對多種網絡傳輸方式的一致性訪問和獨立于協議的多點傳輸/組播,更為重要的是,它提供了在新的網絡介質(ATM、ISD N等)上協商QoS(Quality of Service)的接口,這樣多媒體應用開發人員可以請求指定傳輸速率,能夠根據傳輸的吞吐量建立或者拆除連接,當網絡暫時不可用時應用程序應該能自動得到提示。基于以上考慮,我們選擇Windows Socket2來實現對于網絡數據的傳輸,實現過程雖然相對復雜,但是給系統帶來了良好的性能和擴展性。
4結束語
互聯網Internet是當今應用最廣泛、發展最迅速的通信網絡。這是基于數據包方式的數據分組交換方式,用戶數據被封裝在分組中,而分組還包含一些附加信息用于網絡中的路由選擇、差錯糾正、流量控制等。數據包各自獨立地在網絡中傳遞,由于網絡狀況的變化和經歷路徑的不同,數據包到達目的地的時間是不固定的、非實時的,一般來說,互聯網較適用于數據的傳輸,但我們利用了一些現有的技術,使得音頻信號經過模數轉換后也可以作為數據在互聯網上傳遞。由于數據網是采用統計時分的方式分配,使用網絡資源,任何通信實體都不可能獨占某一信道,所以分組語音技術可以大大提高網絡資源的利用率。
同時應該指出的是,當前的VoIP技術還有一些不足之處,如通話質量不高。由于Internet是為數據通信目的而設計的,其通信方式是通過打包傳輸方式實現的,當語音包在一個無服務質量保證的網絡中傳輸時,會產生包到達順序的錯位,從而產生網絡抖動,產生語音變形和語音包丟失。所以用IPPhone通話時,斷斷續續的現象在當前的技術下是不可避免的,而且在音質、流暢度和時延方面也存在著一定的問題,另外,壓縮技術也有待改進。雖然當前的壓縮標準有很多,但如何使壓縮率和聲音還原質量得到很好的兼顧還有待改善。
不過,相信隨著技術的不斷發展、網絡統一化進程的加速進行,數據網與電信網之間的結合勢在必行,CTI(Computer Telephony Integration,計算機電話集成)技術也越發會體現出它的價值。
2 周敬利,余勝生.多媒體計算機聲卡技術及應用.北京:電子工業出版社,1998
3 潘愛民,王國印譯.VisualC++技術內幕.北京:清華大學出版社,1999
4 劉素麗,李彤紅等譯.Internet編程.北京:電子工業出版社,1996
5 侯俊杰.深入淺出MFC.武漢:華中科技大學出版社,2001
6 苗蘭波,馮志勇,呂廷杰.IP電話網絡技術.北京:電子工業出版社,2001
評論
查看更多