a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Windows CE的SIP軟件電話的設計與實現

基于Windows CE的SIP軟件電話的設計與實現

作者: 時間:2012-03-22 來源:網絡 收藏

1 引言

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

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

2 設計方案

軟件結構如圖1所示。

圖1軟件結構


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不同。

表1 oSIP/eXosip移植示例

Win32

WinCE

兼容

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

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

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

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

不兼容

time函數

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

頭文件和預定義

#include process.h>

#include sys/types.h>

#define HAVE_SYS_TYPES_H 1

等等

#include "Winbase.h"

#define _beginthreadex CreateThread

等等

3.2 呼叫控制模塊

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

c++相關文章:c++教程



上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉