基于Windows CE的SIP軟件電話的設(shè)計與實現(xiàn)
      
      黃妮麗 余厚全 朱菲 2012/03/23
      
      1.引言
      
        VOIP的迅速普及,出現(xiàn)了越來越多的VOIP的固定電話終端。隨著VOIP的進一步發(fā)展,為了滿足移動用戶VOIP通信的需要,無線VOIP通訊將是未來的發(fā)展趨勢。
      
        現(xiàn)在手持PDA用戶越來越多,都具有無線上網(wǎng)功能,如果能開發(fā)一個在PDA上運行的VOIP軟件電話,就可以滿足這些PDA用戶的無線VOIP通信的需求,具有非常重要的實際意義。由于嵌入式Windows 
      CE(WinCE)是PDA最流行的操作系統(tǒng),而目前大多數(shù)VOIP終端都采用SIP協(xié)議,因此,本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP解決方案。該方案以嵌入式Windows 
      CE為平臺,eMbedded C++ 4.0為開發(fā)工具,中間件采用開源的SIP協(xié)議棧oSIP/eXosip,通過進行協(xié)議棧的移植和在協(xié)議棧之上應(yīng)用程序的開發(fā),實現(xiàn)了SIP軟件電話。
      
      2.設(shè)計方案
      
        軟件結(jié)構(gòu)如圖1所示。
      
      
         
 
      
      
      
        圖1:軟件結(jié)構(gòu) 
      
      
        SIP軟件電話的結(jié)構(gòu)包括呼叫控制和語音通信兩大模塊。呼叫控制由SIP信令來完成, 主要實現(xiàn)呼叫的建立、修改和拆除;語音通信模塊由音頻數(shù)據(jù)接口,音頻編解碼和RTP傳輸三個子模塊組成,實現(xiàn)語音的采集,編碼,傳輸和播放。
      
        音頻數(shù)據(jù)接口模塊實現(xiàn)語音的采集和播放, 采用Windows CE的低層音頻服務(wù), 因為低層音頻服務(wù)中的回調(diào)機制為其提供了很大的方便;音頻編解碼采用的是G.729A 
      語音壓縮技術(shù),它屬于低比特率話音編碼,適合語音在IP 網(wǎng)絡(luò)傳輸;語音采用RTP包傳輸。
      
        對呼叫控制模塊,直接移植開源oSIP/eXosip協(xié)議棧到WinCE上,通過調(diào)用協(xié)議棧的API函數(shù),實現(xiàn)對呼叫的控制。RTP傳輸用開源JRTPLIB,JRTPLIB也需要在WinCE進行移植。
      
      3.具體實現(xiàn)
      
        基于上述方案,具體實現(xiàn)包括協(xié)議棧移植、呼叫控制和語音通信三部分。
      
        3.1 協(xié)議棧移植
      
        oSIP/eXosip主要支持Win32及Linux、VxWorks等一些嵌入式系統(tǒng),將oSIP/eXosip移植到 WinCE上,可以在Win32基礎(chǔ)上進行。WinCE可以兼容大部分的Win32 
      API,在WinCE上移植oSIP/eXosip主要有3種情況:與Win32兼容的API,與Win32不兼容API和不同的頭文件支持和預(yù)定義。與 
      Win32兼容的API只要修改條件編譯選項,與Win32不兼容API可以用其他的WinCE上的API來代替并作相關(guān)修改,另外,WinCE和Win32的某些頭文件和預(yù)定義也不同,也需要進行相關(guān)修改工作。表1給出了移植的一些示例。
      
        在WinCE上對JRTPLIB進行移植與SIP協(xié)議棧的移植類似,注意WinCE下的RTP裝載數(shù)據(jù)包最大2K,和PC上的64K不同。 
      
        表1:oSIP/eXosip移植示例
      
      
      
        3.2 呼叫控制模塊
      
        呼叫控制模塊用來向代理服務(wù)器注冊以及進行會話的建立、修改和終止,實現(xiàn)對呼叫的控制。因此呼叫控制模塊分為注冊和呼叫兩部分,都是通過底層的 SIP協(xié)議棧來完成的。上層應(yīng)用程序調(diào)用SIP協(xié)議棧提供的API函數(shù),通知協(xié)議棧進行相應(yīng)的操作,協(xié)議棧將底層檢測到的事件以消息的形式報告給應(yīng)用層,應(yīng)用層收到SIP事件后作相應(yīng)處理。 
      
      
      
        3.2.1 注冊
      
        注冊的實現(xiàn)過程首先是由客戶端向代理服務(wù)器發(fā)出REGISTER注冊請求,并等待服務(wù)器返回響應(yīng)消息。客戶端必須在收到前一個REGISTER請求的最終響應(yīng)之后或者前一個REGISTER請求超時的情況下,才能發(fā)送一次新的注冊請求,注冊流程和對應(yīng)的SIP協(xié)議棧API 
      函數(shù)調(diào)用或協(xié)議棧的事件通知分別如圖2(B)和(A)。
      
      
         
 
      
      
      
        圖2 注冊流程及對應(yīng)的SIP協(xié)議棧函數(shù)調(diào)用或事件通知 
      
      
        3.2.2 呼叫
      
        本設(shè)計的SIP軟件電話有兩種呼叫模式:注冊呼叫和Peer To Peer呼叫。如果是呼叫一個公網(wǎng)的SIP用戶或是同一個私網(wǎng)的SIP用戶之間進行呼叫,就可以直接找到對方,而不必要通過代理服務(wù)器。下面以注冊呼叫為例,終端注冊成功后就可以進行呼叫。一個通過代理服務(wù)器的成功呼叫流程如圖3所示。 
      
      
         
 
      
      
      
        圖3:語音通信程序流程 
      
      
        oSIP/eXosip對消息的報告有2種工作模式:事件模式和回調(diào)模式。本設(shè)計采用事件模式, 通過函數(shù)eXosip_event_wait定時輪詢獲取SIP事件。SIP信令的實現(xiàn)如表2 
      。
      
      
         
 
      
      
        3.3 語音通信模塊
      
        語音通信模塊主要是對語音進行采樣、編碼壓縮等處理,并封裝成能在IP 網(wǎng)絡(luò)上傳輸?shù)腞TP 包,接收端收到后解碼,播放。 
      
        語音通信模塊程序流程如圖4:
      
       
 
      
          (a)語音采集、編碼、發(fā)送流程     (b)語音解碼、播放流程圖
      
      4.語音通信程序流程 
      
        RTP傳輸模塊通過使用開源的RTP協(xié)議棧JRTPLIB來實現(xiàn),我們只需調(diào)用JRTPLIB的少數(shù)幾個函數(shù)就可以了。在通過SIP信令建立會話后,準(zhǔn)確地說是在主叫得知被叫應(yīng)答即獲取到事件EXOSIP_CALL_ANSWERED后及被叫收到主叫的ACK消息即獲取到事件 
      EXOSIP_CALL_ACK后分別啟動語音通信模塊。會話結(jié)束(由呼叫模塊控制)則關(guān)閉語音輸入輸出設(shè)備,結(jié)束語音流傳輸。
      
      5.結(jié)束語
      
        本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP軟件電話終端的解決方案,并對方案的各模塊及實現(xiàn)進行了詳細的介紹。該軟件電話實現(xiàn)了基于Windows 
      CE操作系統(tǒng)的PDA用戶的無線VOIP,通話話音清晰,延時較小,具有很好的實用價值。作為后續(xù)工作,還將在SIP軟件終端中增加視頻功能。
      
        本文作者創(chuàng)新點在于:本文提出了一種Windows CE平臺下基于SIP協(xié)議的VOIP解決方案,實現(xiàn)了基于Windows CE的PDA用戶的無線VOIP通信,為用戶提供廉價、便捷、可移動的語音業(yè)務(wù)。
      
      參考文獻
      
        [1] J Rosenberg, H Schulzrinne, G Camarillo. IETF RFC 3261[S].SIP: Session 
      Initiation Protocol, June 2002 
        [2] 田延麗,余厚全.基于SIP協(xié)議的IP電話服務(wù)器的設(shè)計[J].微計算機信息,2007,23-(1-3): 138-140
        [3] 朱小軍.SIP協(xié)議在WiFi智能手機中的應(yīng)用與實現(xiàn)[D].電子科技大學(xué)碩士學(xué)位論文.2006
      
      
      微計算機信息
      
 
相關(guān)閱讀:  
  
岳阳市|
麦盖提县|
正阳县|
丰镇市|
珲春市|
江山市|
云安县|
永丰县|
天门市|
灵寿县|
化州市|
淄博市|
池州市|
新源县|
宁远县|
右玉县|
卢氏县|
贺州市|
宜宾市|
页游|
厦门市|
云龙县|
平和县|
嘉兴市|
霍山县|
文山县|
德清县|
容城县|
防城港市|
贵德县|
云和县|
海林市|
蒙自县|
龙江县|
团风县|
吉木乃县|
宁远县|
壶关县|
金乡县|
天等县|
宝山区|