<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Windows CE的SIP軟件電話的設(shè)計與實(shí)現(xiàn)

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

          作者: 時間:2012-03-22 來源:網(wǎng)絡(luò) 收藏

          1 引言

          VOIP的迅速普及,出現(xiàn)了越來越多的VOIP的固定電話終端。隨著VOIP的進(jìn)一步發(fā)展,為了滿足移動用戶VOIP通信的需要,無線VOIP通訊將是未來的發(fā)展趨勢。

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

          2 設(shè)計方案

          軟件結(jié)構(gòu)如圖1所示。

          圖1軟件結(jié)構(gòu)


          SIP的結(jié)構(gòu)包括呼叫控制和語音通信兩大模塊。呼叫控制由SIP信令來完成, 主要實(shí)現(xiàn)呼叫的建立、修改和拆除;語音通信模塊由音頻數(shù)據(jù)接口,音頻編解碼和RTP傳輸三個子模塊組成,實(shí)現(xiàn)語音的采集,編碼,傳輸和播放。

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

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

          3 具體實(shí)現(xiàn)

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

          3.1 協(xié)議棧移植

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

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

          表1 oSIP/eXosip移植示例

          Win32

          WinCE

          兼容

          #if defined WIN32 (如Win32用_snprintf 函數(shù),其他支持的系統(tǒng)用snprintf函數(shù))

          #if !defined WIN32 (如 除Win32外,其他支持的系統(tǒng)用strcasecmp函數(shù),Win32用_stricmp 函數(shù))

          條件編譯改成 #if (defined WIN32 || defined _WIN32_WCE) (WinCE也支持_snprintf 函數(shù))

          條件編譯改成#if (!defined WIN32 !defined _WIN32_WCE) (WinCE支持_stricmp 函數(shù))

          不兼容

          time函數(shù)

          不支持time函數(shù),用GetSystemTime函數(shù)加一些計算來代替。

          頭文件和預(yù)定義

          #include process.h>

          #include sys/types.h>

          #define HAVE_SYS_TYPES_H 1

          等等

          #include "Winbase.h"

          #define _beginthreadex CreateThread

          等等

          3.2 呼叫控制模塊

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

          c++相關(guān)文章:c++教程



          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();