SIP協議棧設計方案綜述
對于SIP協議,以及相關的SIP協議棧內容,我們也講了一些內容。那么本文提出了一種基于SIP協議的軟件電話的軟件結構和設計實現方案.該方案以嵌入式Windows CE為平臺,中間件采用開源的SIP協議棧oSIP/eXosip,通過協議棧的移植和在協議棧之上應用程序的開發,實現了SIP軟件電話.測試結果表明,該軟件電話在布置Windows CE的PDA上具有良好的語音通話質量.
1 引言
VOIP 的迅速普及,出現了越來越多的VOIP 的固定電話終端.隨著VOIP 的進一步發展,為了滿足移動用戶VOIP 通信的需要,無線VOIP 通訊將是未來的發展趨勢.現在手持 PDA 用戶越來越多,都具有無線上網功能,如果能開發一個在PDA 上運行的VOIP 軟件電話,就可以滿足這些PDA 用戶的無線VOIP 通信的需求,具有非常重要的實際
意義.由于嵌入式Windows CE(WinCE)是PDA ***的操作系統,而目前大多數VOIP終端都采用SIP 協議,因此,本文提出了一種Windows CE 平臺下基于SIP 協議的VOIP 解決方案.該方案以嵌入式Windows CE 為平臺,eMbedded C++ 4.0 為開發工具,中間件采用開源的SIP 協議棧oSIP/eXosip,通過進行協議棧的移植和在協議棧之上應用程序的開發,實現了SIP 軟件電話.
2 設計方案
SIP 軟件電話的結構包括呼叫控制和語音通信兩大模塊.呼叫控制由SIP 信令來完成,主要實現呼叫的建立、修改和拆除;語音通信模塊由音頻數據接口,音頻編解碼和 RTP 傳輸三個子模塊組成,實現語音的采集,編碼,傳輸和播放.
音頻數據接口模塊實現語音的采集和播放, 采用Windows CE 的低層音頻服務, 因為低層音頻服務中的回調機制為其提供了很大的方便;音頻編解碼采用的是G.729A 語音壓縮技術,它屬于低比特率話音編碼,適合語音在IP 網絡傳輸;語音采用RTP 包傳輸.對呼叫控制模塊,直接移植開源 oSIP/eXosip 協議棧到WinCE 上,通過調用協議棧的API 函數,實現對呼叫的控制.RTP 傳輸用開源JRTPLIB,JRTPLIB 也需要在WinCE 進行移植.
3 具體實現
基于上述方案,具體實現包括協議棧移植、呼叫控制和語音通信三部分.
3.1 協議棧移植
oSIP/eXosip 主要支持Win32 及Linux、VxWorks 等一些嵌入式系統,將oSIP/eXosip 移植到WinCE 上,可以在Win32 基礎上進行.WinCE 可以兼容大部分的Win32 API,在WinCE上移植oSIP/eXosip 主要有3 種情況:與Win32 兼容的API,與Win32 不兼容API 和不同的頭文件支持和預定義.與Win32 兼容的API 只要修改條件編譯選項,與 Win32 不兼容API可以用其他的WinCE 上的API 來代替并作相關修改,另外,WinCE 和Win32 的某些頭文件和預定義也不同,也需要進行相關修改工作.表1 給出了移植的一些示例.
在 WinCE 上對JRTPLIB 進行移植與SIP 協議棧的移植類似,注意WinCE 下的RTP 裝載數據包***2K,和PC 上的64K 不同.
3.2 呼叫控制模塊
呼叫控制模塊用來向代理服務器注冊以及進行會話的建立、修改和終止,實現對呼叫的控制.因此呼叫控制模塊分為注冊和呼叫兩部分,都是通過底層的SIP 協議棧來完成的.上層應用程序調用SIP 協議棧提供的API 函數,通知協議棧進行相應的操作,協議棧將底層檢測到的事件以消息的形式報告給應用層,應用層收到SIP 事件后作相應處理.
3.2.1 注冊
注冊的實現過程首先是由客戶端向代理服務器發出 REGISTER 注冊請求,并等待服務器返回響應消息.客戶端必須在收到前一個REGISTER 請求的最終響應之后或者前一個REGISTER 請求超時的情況下,才能發送一次新的注冊請求,注冊流程和對應的SIP 協議棧API 函數調用或協議棧的事件通知分別如圖2(B)和(A).
3.2.2 呼叫
本設計的 SIP 軟件電話有兩種呼叫模式:注冊呼叫和Peer To Peer 呼叫.如果是呼叫一個公網的SIP 用戶或是同一個私網的SIP 用戶之間進行呼叫,就可以直接找到對方,而不必要通過代理服務器.下面以注冊呼叫為例,終端注冊成功后就可以進行呼叫.一個通過代理服務器的成功呼叫流程如圖3 所示.
oSIP/eXosip 對消息的報告有2 種工作模式:事件模式和回調模式.本設計采用事件模式, 通過函數eXosip_event_wait 定時輪詢獲取SIP 事件.SIP 信令的實現如表2 .
3.3 語音通信模塊
語音通信模塊主要是對語音進行采樣、編碼壓縮等處理,并封裝成能在IP 網絡上傳輸的RTP 包,接收端收到后解碼,播放.語音通信模塊程序流程如圖 4:
RTP 傳輸模塊通過使用開源的RTP 協議棧JRTPLIB 來實現,我們只需調用JRTPLIB 的少數幾個函數就可以了.在通過SIP 信令建立會話后,準確地說是在主叫得知被叫應答即獲取到事件EXOSIP_CALL_ANSWERED 后及被叫收到主叫的ACK 消息即獲取到事件EXOSIP_CALL_ACK 后分別啟動語音通信模塊.會話結束(由呼叫模塊控制)則關閉語音輸入輸出設備,結束語音流傳輸.
4 結束語
本文提出了一種 Windows CE 平臺下基于SIP 協議的VOIP 軟件電話終端的解決方案,并對方案的各模塊及實現進行了詳細的介紹.該軟件電話實現了基于Windows CE 操作系統的PDA 用戶的無線VOIP,通話話音清晰,延時較小,具有很好的實用價值.作為后續工作,還將在SIP 軟件終端中增加視頻功能.
本文作者創新點在于:本文提出了一種Windows CE 平臺下基于SIP 協議的VOIP 解決方案,實現了基于Windows CE 的PDA 用戶的無線VOIP 通信,為用戶提供廉價、便捷、可移動的語音業務.
轉自:http://www.52rd.com/Blog/Detail_RD.Blog_wangran1001_23381.html