首頁(yè)>>>技術(shù)>>>VoIP

發(fā)表評論分享按鈕

基于Windows CE的SIP軟件電話(huà)的設計與實(shí)現

黃妮麗 余厚全 朱菲 2012/03/23

1.引言

  VOIP的迅速普及,出現了越來(lái)越多的VOIP的固定電話(huà)終端。隨著(zhù)VOIP的進(jìn)一步發(fā)展,為了滿(mǎn)足移動(dòng)用戶(hù)VOIP通信的需要,無(wú)線(xiàn)VOIP通訊將是未來(lái)的發(fā)展趨勢。

  現在手持PDA用戶(hù)越來(lái)越多,都具有無(wú)線(xiàn)上網(wǎng)功能,如果能開(kāi)發(fā)一個(gè)在PDA上運行的VOIP軟件電話(huà),就可以滿(mǎn)足這些PDA用戶(hù)的無(wú)線(xiàn)VOIP通信的需求,具有非常重要的實(shí)際意義。由于嵌入式Windows CE(WinCE)是PDA最流行的操作系統,而目前大多數VOIP終端都采用SIP協(xié)議,因此,本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP解決方案。該方案以嵌入式Windows CE為平臺,eMbedded C++ 4.0為開(kāi)發(fā)工具,中間件采用開(kāi)源的SIP協(xié)議棧oSIP/eXosip,通過(guò)進(jìn)行協(xié)議棧的移植和在協(xié)議棧之上應用程序的開(kāi)發(fā),實(shí)現了SIP軟件電話(huà)。

2.設計方案

  軟件結構如圖1所示。

軟件結構

圖1:軟件結構

  SIP軟件電話(huà)的結構包括呼叫控制和語(yǔ)音通信兩大模塊。呼叫控制由SIP信令來(lái)完成, 主要實(shí)現呼叫的建立、修改和拆除;語(yǔ)音通信模塊由音頻數據接口,音頻編解碼和RTP傳輸三個(gè)子模塊組成,實(shí)現語(yǔ)音的采集,編碼,傳輸和播放。

  音頻數據接口模塊實(shí)現語(yǔ)音的采集和播放, 采用Windows CE的低層音頻服務(wù), 因為低層音頻服務(wù)中的回調機制為其提供了很大的方便;音頻編解碼采用的是G.729A 語(yǔ)音壓縮技術(shù),它屬于低比特率話(huà)音編碼,適合語(yǔ)音在IP 網(wǎng)絡(luò )傳輸;語(yǔ)音采用RTP包傳輸。

  對呼叫控制模塊,直接移植開(kāi)源oSIP/eXosip協(xié)議棧到WinCE上,通過(guò)調用協(xié)議棧的API函數,實(shí)現對呼叫的控制。RTP傳輸用開(kāi)源JRTPLIB,JRTPLIB也需要在WinCE進(jìn)行移植。

3.具體實(shí)現

  基于上述方案,具體實(shí)現包括協(xié)議棧移植、呼叫控制和語(yǔ)音通信三部分。

  3.1 協(xié)議棧移植

  oSIP/eXosip主要支持Win32及Linux、VxWorks等一些嵌入式系統,將oSIP/eXosip移植到 WinCE上,可以在Win32基礎上進(jìn)行。WinCE可以兼容大部分的Win32 API,在WinCE上移植oSIP/eXosip主要有3種情況:與Win32兼容的API,與Win32不兼容API和不同的頭文件支持和預定義。與 Win32兼容的API只要修改條件編譯選項,與Win32不兼容API可以用其他的WinCE上的API來(lái)代替并作相關(guān)修改,另外,WinCE和Win32的某些頭文件和預定義也不同,也需要進(jìn)行相關(guān)修改工作。表1給出了移植的一些示例。

  在WinCE上對JRTPLIB進(jìn)行移植與SIP協(xié)議棧的移植類(lèi)似,注意WinCE下的RTP裝載數據包最大2K,和PC上的64K不同。

  表1:oSIP/eXosip移植示例


  3.2 呼叫控制模塊

  呼叫控制模塊用來(lái)向代理服務(wù)器注冊以及進(jìn)行會(huì )話(huà)的建立、修改和終止,實(shí)現對呼叫的控制。因此呼叫控制模塊分為注冊和呼叫兩部分,都是通過(guò)底層的 SIP協(xié)議棧來(lái)完成的。上層應用程序調用SIP協(xié)議棧提供的API函數,通知協(xié)議棧進(jìn)行相應的操作,協(xié)議棧將底層檢測到的事件以消息的形式報告給應用層,應用層收到SIP事件后作相應處理。

  3.2.1 注冊

  注冊的實(shí)現過(guò)程首先是由客戶(hù)端向代理服務(wù)器發(fā)出REGISTER注冊請求,并等待服務(wù)器返回響應消息。客戶(hù)端必須在收到前一個(gè)REGISTER請求的最終響應之后或者前一個(gè)REGISTER請求超時(shí)的情況下,才能發(fā)送一次新的注冊請求,注冊流程和對應的SIP協(xié)議棧API 函數調用或協(xié)議棧的事件通知分別如圖2(B)和(A)。

注冊流程及對應的SIP協(xié)議棧函數調用或事件通知

圖2 注冊流程及對應的SIP協(xié)議棧函數調用或事件通知

  3.2.2 呼叫

  本設計的SIP軟件電話(huà)有兩種呼叫模式:注冊呼叫和Peer To Peer呼叫。如果是呼叫一個(gè)公網(wǎng)的SIP用戶(hù)或是同一個(gè)私網(wǎng)的SIP用戶(hù)之間進(jìn)行呼叫,就可以直接找到對方,而不必要通過(guò)代理服務(wù)器。下面以注冊呼叫為例,終端注冊成功后就可以進(jìn)行呼叫。一個(gè)通過(guò)代理服務(wù)器的成功呼叫流程如圖3所示。
語(yǔ)音通信程序流程

圖3:語(yǔ)音通信程序流程

  oSIP/eXosip對消息的報告有2種工作模式:事件模式和回調模式。本設計采用事件模式, 通過(guò)函數eXosip_event_wait定時(shí)輪詢(xún)獲取SIP事件。SIP信令的實(shí)現如表2 。


  3.3 語(yǔ)音通信模塊

  語(yǔ)音通信模塊主要是對語(yǔ)音進(jìn)行采樣、編碼壓縮等處理,并封裝成能在IP 網(wǎng)絡(luò )上傳輸的RTP 包,接收端收到后解碼,播放。

  語(yǔ)音通信模塊程序流程如圖4:

語(yǔ)音通信模塊程序流程
    (a)語(yǔ)音采集、編碼、發(fā)送流程     (b)語(yǔ)音解碼、播放流程圖

4.語(yǔ)音通信程序流程

  RTP傳輸模塊通過(guò)使用開(kāi)源的RTP協(xié)議棧JRTPLIB來(lái)實(shí)現,我們只需調用JRTPLIB的少數幾個(gè)函數就可以了。在通過(guò)SIP信令建立會(huì )話(huà)后,準確地說(shuō)是在主叫得知被叫應答即獲取到事件EXOSIP_CALL_ANSWERED后及被叫收到主叫的ACK消息即獲取到事件 EXOSIP_CALL_ACK后分別啟動(dòng)語(yǔ)音通信模塊。會(huì )話(huà)結束(由呼叫模塊控制)則關(guān)閉語(yǔ)音輸入輸出設備,結束語(yǔ)音流傳輸。

5.結束語(yǔ)

  本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP軟件電話(huà)終端的解決方案,并對方案的各模塊及實(shí)現進(jìn)行了詳細的介紹。該軟件電話(huà)實(shí)現了基于Windows CE操作系統的PDA用戶(hù)的無(wú)線(xiàn)VOIP,通話(huà)話(huà)音清晰,延時(shí)較小,具有很好的實(shí)用價(jià)值。作為后續工作,還將在SIP軟件終端中增加視頻功能。

  本文作者創(chuàng )新點(diǎn)在于:本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP解決方案,實(shí)現了基于Windows CE的PDA用戶(hù)的無(wú)線(xiàn)VOIP通信,為用戶(hù)提供廉價(jià)、便捷、可移動(dòng)的語(yǔ)音業(yè)務(wù)。

參考文獻

  [1] J Rosenberg, H Schulzrinne, G Camarillo. IETF RFC 3261[S].SIP: Session Initiation Protocol, June 2002
  [2] 田延麗,余厚全.基于SIP協(xié)議的IP電話(huà)服務(wù)器的設計[J].微計算機信息,2007,23-(1-3): 138-140
  [3] 朱小軍.SIP協(xié)議在WiFi智能手機中的應用與實(shí)現[D].電子科技大學(xué)碩士學(xué)位論文.2006
共 2 頁(yè): 1  2 

微計算機信息



相關(guān)閱讀:
iOS上的VOIP應用如何能夠更省電? 2012-03-01
基于VoIP處理器與USB接口的IP電話(huà)設計 2012-03-01
加固網(wǎng)絡(luò )安全 抑制VoIP風(fēng)險 2012-01-10
無(wú)線(xiàn)VoIP系統設計應用 2011-12-27
QQVoice欲為網(wǎng)絡(luò )電話(huà)常青樹(shù) 2011-12-09

熱點(diǎn)專(zhuān)題:  VoIP  
相關(guān)頻道:  SIP    

亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 古蔺县| 新昌县| 屏东市| 高密市| 万安县| 云浮市| 阳江市| 揭阳市| 嘉兴市| 长葛市| 金溪县| 文昌市| 沈丘县| 衢州市| 隆林| 大兴区| 聂荣县| 扬州市| 唐山市| 四川省| 屏南县| 吴忠市| 屯昌县| 迭部县| 祁阳县| 西安市| 上饶县| 南川市| 南郑县| 河池市| 西青区| 白城市| 瑞金市| 涿鹿县| 大丰市| 鄂州市| 林周县| 玉田县| 易门县| 昭觉县| 新丰县| http://444 http://444 http://444 http://444 http://444 http://444