麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 網絡通信 > 正文

基于局域網的IP電話設計

2019-11-03 09:02:05
字體:
來源:轉載
供稿:網友
吳侃,杜俊俐,鄭秋生 中原工學院計算機科學系


  摘 要:主要介紹基于中等帶寬網絡的語音通訊的原理、關鍵技術和實現方法,給出了一般的開發過程和具體開發實例。重點介紹自定義的ip電話信令系統的原理和實現過程。

  關鍵詞:IP電話;語音通信;CODECs;Winsock控件

1 引 言

  IP電話是近些年網絡在實時通訊領域的一個重要應用。利用IP電話系統在實現通話功能的基礎上,還可以提供增值服務,如視頻電話、高保真的立體聲電話會議、IP電話會議、遠程電話教學應用等。

  針對局域網的網絡帶寬和用戶需求,開發出一套基于局域網用戶的網絡電話系統。由于局域網內的網絡帶寬可以達到10 Mb/s甚至是100 Mb/s的速率,因此,只要選擇了恰當的壓縮算法,實現高質量的語音通訊是沒有問題的。而且在使用局域網的用戶中,計算機的普及率也是非常高的。這樣的系統在學校、企事業單位的局域網內將有非常好的推廣價值。

2 關鍵技術

  本文所討論IP電話指的是計算機到計算機形式的IP語音電話。

  為了實現計算機到計算機的語音通話,至少需要解決以下兩方面的問題:

  (1)雙方都知道對方的網絡地址。

  (2)同時運行IP電話語音通訊程序。

  解決方案是:通過在系統中駐留一個資源占用率小的管理程序來監聽呼叫請求;在建立通話時再調用IP電話通訊程序。



  2.1 語音通訊

  語音通訊的基本原理是:對模擬語音信號經過模數轉換,進行編碼壓縮后,按一定的打包規則將壓縮幀轉換成IP數據包通過數據網進行傳輸,在目的地經過數據解壓、數模轉換復原成話音,從而達到語音通信的目的。這部分是IP電話的難點,也是需要不斷進行改進的地方。總的目標是在保證通話服務質量(QoS)的前提下,盡可能減少網絡和系統資源的占用。在廣域網語音通訊中,現有技術還不能完全達到二者兼顧。所幸對于局域網用戶,現有的技術已經勉強可以達到要求。



  2.1.1 語音采集與數據壓縮

  語音的采集采樣率的大小直接決定語音的清晰度和采集的原始數字數據量的大小。語音采集的原理是通過在離散的時間間隔采樣原始聲音并記錄每次采樣的數字來表示和重建聲音波形。采集的聲音數據的格式有很多標準,軟件的設計中一般采用波形數據的格式。Windows系統中可以采用WAVE_FORMAT_PCM即PCM(脈沖編碼調制)格式,其采樣率可以為數據流采樣后需要對音頻數據進行壓縮。采用什么樣的壓縮算法決定了壓縮率的大小,這也是整個網絡語音通信技術的核心和最關鍵的技術之一。IP電話網關為主的IP語音通信主要使用ITU定義的幾個語音編碼標準:G723.1,G728和G729。他們采用的都是混合編碼的方法,如G.729語音壓縮采用的算法是共軛結構的代數碼激勵線形預測(CSACELP),是基于CELP編碼模型的算法。

  CODEC是一小段用于壓縮(ComPRess)及解壓縮(DECompress)數據流的代碼。CODECs可以是由操作系統本身附帶的幾種標準的CODECs,如:DSPGroup TrueSpeech CODEC和MSG723.1 CODEC等,也可由系統中所安裝的應用程序安裝其他的CODECs。微軟的Windows操作系統中,所有安裝的CODECs由音頻壓縮管理器(ACM)管理。

  2.1.2 數據包傳輸

  壓縮后打包的音頻數據需要通過IP協議在網絡中傳輸,但首先必須在傳輸層協議TCP或UDP中選擇其一。UDP包不具備TCP包復雜的可靠性與控制機制,當強調傳輸性能(例如延時特性)而不是傳輸的完整性時,如:音頻和多媒體應用,UDP是較好的選擇。

  Winsock控件封裝了許多網絡傳輸所用到的API函數。通過Winsock控件,使網絡編程變得輕松。

  2.2 信令系統

  決定IP電話可用性的關鍵是要使雙方能夠知道對方的IP地址,這并不太容易做到。以往的IP電話往往將重點集中于語音通訊模塊的優化而忽視了信令系統的改進。為了得到對方IP,可以通過其他通訊方式,例如E-Mail ,OICQ信使服務、普通電話等辦法獲得,但這樣就減少了系統的易用性;當然,也可以設置一個固定的“通話服務器”,采用類似于電信電話的“交換機”方式進行通話“路由”。但這樣做勢必造成服務器的負荷很重。此外,集中通過中轉也必然造成服務器擁塞和丟包,通話延遲和語音質量難以改進。

  

  通過設置一個信令服務器的方式綜合以上兩種方式的優缺點。用戶通話程序工作于半客戶機狀態,信令服務器負責客戶的集中呼叫。當某一個客戶呼叫,服務器負責中轉呼叫,當被叫客戶響應呼叫并應答后,自主于呼叫方進行通話而不必經過信令服務器,這樣,大幅度地減少了服務器的數據量。有了集中的信令服務器,也便于客戶的管理,還可進行廣播消息的發布。

  信令與駐留的管理程序相互配合,共同實現IP電話的基本通話邏輯和其他附加功能。信令系統可以設計得很復雜,也可以很簡單,但必須完成以下功能:呼叫、應答、指示通話、掛斷等基本功能。

3 程序設計實現[1~3]

  基于以上的技術和所在單位的網絡資源,筆者初步成功地開發了基于局域網的語音通訊軟件。軟件平臺為Windows 98/ME/2000/XP;硬件平臺為含全雙工聲卡、麥克風和音響的多媒體PC;開發工具為VisualBasic 6.0,VisualC++6.0和Delphi6.0。下面介紹具體的開發過程。

  3.1 整體結構

  本系統從邏輯上分為2個部分:客戶端和服務器端。

  客戶端與服務器端之間的關系如圖1所示。



  直接呼叫是指輸入對方的IP地址,然后向其發出呼叫請求;而通過服務器呼叫指的是向服務器提交要呼叫的用戶名,由服務器在數據庫中查找用戶,如果該用戶在線的話將該用戶的IP返回給客戶端,然后再由客戶端發出呼叫請求。

  服務器端的數據庫中包含了所有用戶的資料。例如用戶的密碼、最后一次登錄時使用的IP地址、該用戶是否在線、該帳號是否被禁用等信息。服務器端程序利用Winsock控件來監聽客戶端發來的請求,對接收到的客戶端發來的請求進行處理,提取出命令字及參數,按照定義好的命令字完成相應的工作。

  服務器完成的任務基本上都是被動的,大部分是響應客戶端發出的請求。但系統也提供了一個服務器端向客戶端發消息的功能,可選擇發送到任一當前在線的用戶,也可以選擇發送到所有在線用戶。

  如圖2所示,客戶端由2個主要模塊組成:系統駐留模塊、語音通訊模塊。

  整個系統最重要的模塊為系統駐留模塊。在客戶94端登錄時,該模塊把登錄請求提交給服務器;在成功登錄服務器之后呼叫服務器上的用戶時,該模塊負責向服務器提交查詢用戶請求。從服務器返回的消息也交給該模塊處理。在直接呼叫時,也是通過該模塊建立連接。當連接建立起來,還是由該模塊調用語音通訊模塊來實現語音通訊。而且以后對系統進行二次開發、插件接口也是基于該模塊的接口定義而開發的。



  語音通訊模塊負責建立起連接之后的語音通訊功能。該模塊從聲卡采集音頻數據并壓縮,然后根據從系統駐留模塊獲得的IP地址參數來把數據流發送到對方主機。同時該模塊還負責對接收到的語音數據流進行解壓縮并利用聲卡播放出來的任務。

  服務器端和客戶端系統駐留模塊使用VB開發,語音通訊模塊和部分應用界面使用Delphi和VC開發。這是綜合考慮了VB在界面和數據庫設計方面的優越性,以及VC和Delphi在系統應用程序開發上的高效率后做出的選擇。

  3.2 信令系統的實現

  在C/S模式中,消息命令字起到了非常重要的作用,服務器端與客戶端、客戶端與客戶端之間通過發送以消息命令字開頭的包含指定消息的字符串來實現溝通。收到指定的消息命令字就去執行該消息命令字對應的操作。消息命令字可以是以字節形式組成的,也可以是以比特位形式組成的。本系統采用的是用固定長度的字符串組成的消息命令字,通過定義特殊的消息命令字(信令)來控制系統工作。為避免混淆規定:服務器端可以處理的信令長度為4個字符;客戶端可以處理的信令長度為6個字符。

  以下是系統自定義的部分信令格式及其說明:

  

  (1)服務器端接收來自客戶端的消息,命令字長度為4 B。參數在命令字之后,并且用“/”分開。

  LGIN:用戶登錄服務器的命令字。

  消息格式:LGIN/客戶端主機地址/用戶名/密碼/新密碼(如果為空則表示不修改密碼)

  使用說明:如果服務器收到該命令字,將處理用戶的登錄請求。對客戶端提供的用戶名和密碼進行驗證,并返回驗證結果。如果用戶提供了新密碼,則在驗證通過的前提下,將該用戶密碼修改為新密碼。

  CALL:通過服務器來呼叫其他用戶的命令字。

  

  消息格式:CALL/客戶端主機地址/用戶名/呼叫的用戶名

  使用說明:如果服務器收到該命令字,將處理用戶的呼叫請求。服務器對客戶端所呼叫的用戶狀態進行查詢,并返回查詢的結果。

  QUIT:用戶從服務器退出的命令字。消息格式:QUIT/客戶端主機地址/用戶名

  使用說明:如果服務器收到該命令字,將處理用戶的退出請求。

  (2)客戶端接收來自服務器端的消息,命令字長度為6 B。參數在命令字的后面。

  REJECT:用戶名或密碼錯誤的命令字。

  

  使用說明:該命令字沒有參數。為了防止用戶進行暴力破解,所以不提供是用戶名錯誤還是密碼錯誤的消息。

  ACCEPT:登錄被接納的命令字。

  使用說明:當客戶端提供的用戶名和密碼均正確,而且該帳號沒有被禁用的時候,服務器返回該命令字,表示客戶端的登錄請求已經被接納。

  (3)客戶端接收來自客戶端的消息,命令字長度為6 B。參數在命令字之后,并且用“/”分開。

  RECEIV:接收到請求的命令字。

  消息格式:RECEIV/客戶端主機地址/用戶名

  

  使用說明:如果客戶端收到該命令字,則表示用戶發送的請求已經成功的到達對方。確定網絡傳輸沒有問題。

  ANSWER:接受語音通話請求的命令字。消息格式:ANSWER/客戶端主機地址/用戶名

  使用說明:如果客戶端收到該命令字,則表示語音通話的請求已經被接受??蛻舳碎_始調用語音通訊程序來實現語音通訊。REFUSE:接收到請求的命令字。消息格式:REFUSE/客戶端主機地址/用戶名

  使用說明:如果客戶端收到該命令字,則表示對方已經拒絕了您的請求。這個請求是您發出的進行語音通話或者使用插件程序的請求。

  3.3 語音通訊的實現

  針對系統要求分別使用Delphi和VC開發了2個05獨立的語音通訊模塊?,F在介紹使用Delphi6.0開發的語音通訊模塊。

  語音采集與壓縮使用Windows提供的ACM(Audio Compression Manager,音頻壓縮管理器)函數,ACM的聲明文件提供并只提供直接調用ACMAPI的功能。如果有必要直接使用低層功能,可以按照下面的步驟使用ACM API。

  (1)制定輸入輸出格式

  為了實現語音的網絡傳輸必須合理定義語音壓縮的各種參數,只有正確地定義了語音壓縮的各種參數,才能使語音在網絡中快速傳播,而不產生延遲,同時又能獲得清晰的音質。

  可以使用waveFormatEX數據結構記錄聲音格式,這一數據結構在Delphi里是TwaveFormatEX,定義在MMSystem單元里。打開ACM流,可以通過調用acmStreamOpen函數實現,格式請參考MSDNplatform SDK的內容。制定輸入輸出緩沖區的大小,可以調用acmStreamSize,使用acmStreamOpen函數返回的流句柄作為參數。生成的轉換頭得到ACM源緩沖區和目的緩沖區的地址。ACM不會自動分配內存,必須由應用程序申請內存。

  (2)轉換數據

  通過調用acmStream Converth函數實現。 acmStreamConvert函數包括流句柄和轉換頭句柄。這個函數通過設定轉換頭中的cbDstLength Used表明轉換過程中真正被使用的字節數。

  (3)完成輸出以后,釋放資源。轉換頭用acm Stream Unperrepare Header函數來釋放,流用acmStreamclose來關閉。

  經過比較采用ACM控件實現語音的采集、壓縮、播放。這一組ACM控件包括3個Component:ACMDialog,ACMWaveIn和ACMWaveOut。



tmpformat.wBitsPerSample:=16;

//定義采樣位數為16

  為了實現語音的采集,使用了控件TACMWaveIn,先為他開辟了一塊連續的緩沖區,用控件TACMWaveIn的TACMWaveIn.Open事件來實現語音的采集。為了實現語音的播放,首先通過語句ACMWaveOut1.Open(@format);把采集到的經過壓縮后的語音取出來。然后以流的方式,通過局域網傳送到另一個主機的緩沖區。最后,通過語句ACMWaveOut1.PlayBack(pdata,Adata.Size)進行播放。

  網絡傳輸可以使用各種方法實現,不同的方法需要不同的處理技巧。本系統使用INDY網絡控件中的TIDUdpServer和TIDUdpClient這2個網絡控件實現,基本符合要求。

4 結 語

  作者設計開發的這個IP電話系統,經過初步測試可以滿足局域網用戶正常的通話需求。由于時間的關系,系統的測試時間不是很長,仍然存在一定的缺陷。但在開發的過程中,各部分功能劃分比較明確,所以對問題出現的原因比較容易定位。

  此外,同時開發出利用asp語言編寫的網頁帳號申請系統,他可以在Web服務的支持下實現通過網頁申請帳號的功能。出于用戶需求擴充的考慮,也特別制定了插件的開發標準??蛻艨梢愿鶕陨淼男枰_發自己的插件,來實現系統功能的擴充。目前,局域網使用較為成熟,寬帶網的技術不斷發展,各種網絡語音通信產品的技術開發變得容易,基于上述技術的產品將得到更廣泛的應用。介紹和討論網絡語音技術可能會對這些產品的開發起到積極的作用。

   參考文獻

[1]Microsoft Corporation.MicrosoftWindows用戶經驗[M].北京:北京大學出版社,2001.

[2]韓冰.Delphi多媒體應用開發技術與實例[M].北京:清華大學出版社,2002.

[3]Microsoft Corporation.VisualBasic Activex控件參考手冊[S].1998.


摘自 現代電子技術
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 性大片免费看 | 成人毛片在线 | 九九热在线免费观看视频 | 看免费一级毛片 | cosplay裸体福利写真 | 黄色网址在线免费播放 | 精品三区视频 | 一二区成人影院电影网 | 中文日韩在线 | 中文字幕在线永久视频 | 亚洲国产高清一区 | 日本不卡视频在线观看 | 黄色毛片一级视频 | 九九热这里只有精品8 | 孕妇体内谢精满日本电影 | 久久精品片 | 亚洲影视在线 | www69xxxxx| 国产精品资源手机在线播放 | 日韩视频一区二区在线观看 | 国产精品欧美日韩一区二区 | 亚洲午夜在线视频 | 成人三级电影网 | 久久综合婷婷香五月 | 日本一区二区久久久 | 在线播放黄色网址 | 亚洲99| 奶子吧naiziba.cc免费午夜片在线观看 | 免费看欧美一级特黄a毛片 九色com | 国产91精品亚洲精品日韩已满 | 手机免费看一级片 | 久久精品国产99久久久古代 | 国产做爰全免费的视频黑人 | 精品久久久91 | 精品国产一区二区三区天美传媒 | 精品一区二区三区网站 | 嫩草www| 精品久久久久久久久久久aⅴ | 亚洲成人福利 | 色综合网在线观看 | 91精品国产手机 |