国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

自定義的 IP 電話信令系統的原理

2019-11-04 20:47:09
字體:
來源:轉載
供稿:網友

  1 引 言
  ip電話是近些年網絡在實時通訊領域的一個重要應用。利用IP電話系統在實現通話功能的基礎上,還可以提供增值服務,如視頻電話、高保真的立體聲電話會議、IP電話會議、遠程電話教學應用等。
  
  針對局域網的網絡帶寬和用戶需求,開發出一套基于局域網用戶的網絡電話系統。由于局域網內的網絡帶寬可以達到10 Mb/s甚至是100 Mb/s的速率,因此,只要選擇了恰當的壓縮算法,實現高質量的語音通訊是沒有問題的。而且在使用局域網的用戶中,計算機的普及率也是非常高的。這樣的系統在學校、企事業單位的局域網內將有非常好的推廣價值。
  
  2 要害技術
  本文所討論IP電話指的是計算機到計算機形式的IP語音電話。
  
  為了實現計算機到計算機的語音通話,至少需要解決以下兩方面的問題:
  
  (1)雙方都知道對方的網絡地址。
  
  (2)同時運行IP電話語音通訊程序。
  
  解決方案是:通過在系統中駐留一個資源占用率小的治理程序來監聽呼叫請求;在建立通話時再調用IP電話通訊程序。
  
  2.1 語音通訊
  
  語音通訊的基本原理是:對模擬語音信號經過模數轉換,進行編碼壓縮后,按一定的打包規則將壓縮幀轉換成IP數據包通過數據網進行傳輸,在目的地經過數據解壓、數模轉換復原成話音,從而達到語音通信的目的。這部分是IP電話的難點,也是需要不斷進行改進的地方??偟哪繕耸窃诒WC通話服務質量(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返回給客戶端,然后再由客戶端發出呼叫請求。
  
  服務器端的數據庫中包含了所有用戶的資料。例如用戶的密碼、最后一次登錄時使用的IP地址、該用戶是否在線、該帳號是否被禁用等信息。服務器端程序利用Winsock控件來監聽客戶端發來的請求,對接收到的客戶端發來的請求進行處理,提取出命令字及參數,按照定義好的命令字完成相應的工作。
  
  服務器完成的任務基本上都是被動的,大部分是響應客戶端發出的請求。但系統也提供了一個服務器端向客戶端發消息的功能,可選擇發送到任一當前在線的用戶,也可以選擇發送到所有在線用戶。
  
  如圖2所示,客戶端由2個主要模塊組成:系統駐留模塊、語音通訊模塊。
  
  整個系統最重要的模塊為系統駐留模塊。在客戶94端登錄時,該模塊把登錄請求提交給服務器;在成功登錄服務器之后呼叫服務器上的用戶時,該模塊負責向服務器提交查詢用戶請求。從服務器返回的消息也交給該模塊處理。在直接呼叫時,也是通過該模塊建立連接。當連接建立起來,還是由該模塊調用語音通訊模塊來實現語音通訊。而且以后對系統進行二次開發、插件接口也是基于該模塊的接口定義而開發的。
  
 自定義的 IP 電話信令系統的原理(圖二)

  語音通訊模塊負責建立起連接之后的語音通訊功能。該模塊從聲卡采集音頻數據并壓縮,然后根據從系統駐留模塊獲得的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/客戶端主機地址/用戶名
  
  使用說明:假如客戶端收到該命令字,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 新田县| 肥乡县| 巍山| 文山县| 乌苏市| 鹰潭市| 白银市| 陆丰市| 永吉县| 辽中县| 阿尔山市| 余干县| 潜江市| 吴江市| 高淳县| 荃湾区| 阿克苏市| 六枝特区| 延寿县| 来宾市| 招远市| 新蔡县| 松溪县| 同心县| 徐汇区| 桂林市| 丹江口市| 齐河县| 京山县| 扶沟县| 体育| 陕西省| 延津县| 宿松县| 林芝县| 阿坝县| 荣昌县| 和田市| 西城区| 仪征市|