當前位置:首頁 » 編程軟體 » ptlib編譯

ptlib編譯

發布時間: 2022-08-01 15:27:39

❶ opal 視頻制式

OPAL是Open Phone Abstraction Library的字母縮寫,仍然是Equivalence公司開發的開源VoIP協議棧,從2001年便開始開發了,直到現在還沒有正式發布過一個版本,只能從CVS: 下載最新的版本,而且現在的2.05bate版有著非常多的問題,但這些絲毫不能阻止我對OPAL的看好。OPAL仍然採用PWLIB作為開發庫,最新的PWLIB實際已經只剩PTLIB,Equivalence公司已經停止了對PWLIB的GUI開發了,GUI全面轉向更為強大的wxWindows。OPAL作為Openh323的下一代協議棧最大的特點是加入了對SIP協議的支持,OPAL保留了Openh323大部分代碼,並加入了對EndPoint,Connection等抽象描述的基類,使得添加新的協議和設備變得更加簡單和方便。

OPAL中最重要的類是新加的:OpalManager,它跟Openh323中的H323EndPoint地位一樣,它定義了OPAL系統中最基本的操作,所以每個應用程序必須從OpalManager派生一個類,然後重載虛函數實現自己的操作。
OpalManager::SetUpCall(partyA,partyB,token); 呼叫,partyA是會話發起人,partyB是會話接受人
OpalManager::OnIncomingConnection(connection); 接聽,返回TRUE則接聽,返回FLASH則拒絕
OpalManager::AdjustMediaFormats(connection,mediaFormats); 調整媒體格式
OpalManager::ClearCall(token,reason,sync) 清除呼叫,sync如果為NULL則不等待快速返回
OpalEndPoint是描述端點的基類,H323,SIP,PSTN,IVR,LID,音效卡的端點都是繼承於這個類,在這里值得注意的是連音效卡設備也看做一種端點。
OpalPCSSEndPoint則是EndPoing中比較重要的一個類,畢竟打電話還是音效卡用的多,OpalPCSSEndPoint的構造函數必須引用派生的OpalManager類的實例。

下面具體例子SimpleOPAL來講解:
opal = new MyManager; //新建一個MyManager的實例
if (opal->Initialise(args)) //調用MyManager::Initialise()函數初始化
opal->Main(args); //等待用戶輸入命令
cout << Exiting << GetName() << endl;
delete opal; //擦pp
部分Initialise()函數代碼:
SetVideoInputDevice(video); //設置輸入視頻設備
...
SetVideoOutputDevice(video); //輸出視頻設備
...
SetAudioJitterDelay(minJitter, maxJitter); //聲音抖動緩存的最小和最大值
...
SetMediaFormatMask(args.GetOptionString(D).Lines()); //屏蔽的媒體格式
SetMediaFormatOrder(args.GetOptionString(P).Lines()); //媒體格式的使用順序
...
SetTranslationAddress(args.GetOptionString(translate)); //設置外部IP地址
...
Set***Ports(rgs.GetOptionString(tcp-base).AsUnsigned(),
args.GetOptionString(tcp-max).AsUnsigned()); //設置相關的埠
SetSTUNServer(args.GetOptionString(stun)); //使用STUN伺服器
...
pcssEP = new MyPCSSEndPoint(*this); //新建一個MyPCSSEndPoint實例
pcssEP->SetSoundDevice(args, sound, PSoundChannel::Recorder)//設置相關的播放聲音設備
...
h323EP = new H323EndPoint(*this); //h323EP的初始化
h323EP->DisableFastStart(args.HasOption(f)); //關閉快速撥號模式
h323EP->DisableH245Tunneling(args.HasOption(T)); //關閉H245通道模式
h323EP->AddAliasName(aliases[i]); //添加昵稱
h323EP->SetInitialBandwidth(initialBandwidth); //限制帶寬
h323EP->StartListeners(listeners) //現在才開始監聽,默認是TCP:1720
h323EP->SetGatekeeperPassword(args.GetOptionString(p)); //注冊網守所需的密碼
h323EP->UseGatekeeper(gkHost, gkIdentifer, gkInterface) //注冊網守
...
sipEP = new SIPEndPoint(*this); //SIP也來了
sipEP->SetUserAgent(args.GetOptionString(sip-user-agent)); //設置用戶代理,UserAgent就相當於最初openh323的endpoint
sipEP->SetProxy(args.GetOptionString(sip-proxy)); //設置SIP代理,此處proxy相當於h323里的Gatekeeper
sipEP->SetMIMEForm(args.HasOption(use-long-mime)); //MIME頭的格式
sipEP->StartListeners(listeners) //監聽開始,默認是TCP:5060和UDP:5060
Main()函數部分代碼:
if (pcssEP != NULL && !pcssEP->incomingConnectionToken) { //小心,有電話來了
if (cmd == n)
pcssEP->ClearCall(pcssEP->incomingConnectionToken, //打死我都不接
OpalConnection::EndedByRefusal);
else if (cmd == y)
pcssEP->AcceptIncomingConnection(pcssEP-> //喂,小莉嗎?
incomingConnectionToken);
}
...
OpalCall * call = FindCallWithLock(currentCallToken); //讓我看看是那一個通話
if (call != NULL) {
cout << Clearing call << *call << endl;
call->Clear(); //廢話那麼多,打IP電話也要錢的,掛拉
call->Unlock();
...
if (potsEP != NULL) //是打電腦還是打座機呢?
SetUpCall(pots:*, params[1], currentCallToken); //打座機吧(PSTN)
else
SetUpCall(pc:*, params[1], currentCallToken); //打電腦不要錢,嘿嘿

OPAL中的例子MFC根本無法使用,Openphone的GUI使用了wxWindows,所以必須安裝了wxWindows才能正常編譯,opalgw這玩意我試過好多次根本無法讓別人注冊,看來OPAL要走的路還很長,不過Equivalence公司開發已經漸漸的從Openh323轉向了OPAL,相信不久一個穩定的OPAL將會被發布.

❷ 如何用c++調用pjsip庫實現一個簡單的sip伺服器

1、開源的sip伺服器端,比較好用的是Asterisk,標准C程序實現,代碼清晰。

2、sip的client相對比較多,主要有exosip,pjsip和opal。exosip簡單易用,在PC上用比較方便。但是涉及的相關資源太多,用了osip,srtp,ms2等眾多的開源庫,ms2下面還用到了ffmpeg,別的不說,光編譯就是噩夢。opal功能最強,雖然也用到了ffmpeg ,但是自己封裝的非常好,採用插件方式,調用靈活。opal採用class方式提供封裝,介面非常友好。感覺唯一不爽的地方,就是低層使用了ptlib,雖然多平台下都很好用,但放在嵌入式下感覺稍龐大了一些。pjsip精巧,方便移植,嵌入式下應該是首選。不過視頻頻支持方面擴展起來比opal麻煩。個人感覺,對於windows開發者來說,pjsip最大的好處就是代碼調試方便。整個工程一次編譯通過,另外兩個庫還要找很多相關的資源

3、其他的一些協議棧也調試過,比如reSipphone,好象是這個名字,還有Yate,不過從快速開發角度看,都不太合適。現在搞sip開發的,一開始就是先找好協議棧。linphone,ekiga什麼的,但龐大。對於剛開始做的,最好是一個精簡的demo。後來找到pjsip下面的幾個例子,慢慢地了解了sip的工作流程,當然少不了抓包工具和tcpmp。
不過,其實,sip沒有想像中的那麼麻煩。現在回頭看,剛開始做項目,使用協議棧絕對不是好想法。如果換個方向,先熟悉SIP基本協議,然後自己改造一個,或完全寫一個,可能效果更好。

❸ sip協議如何用C語言實現

1、開源的sip伺服器端,比較好用的是Asterisk,標准C程序實現,代碼清晰。

2、sip的client相對比較多,主要有exosip,pjsip和opal。exosip簡單易用,在PC上用比較方便。但是涉及的相關資源太多,用了osip,srtp,ms2等眾多的開源庫,ms2下面還用到了ffmpeg,別的不說,光編譯就是噩夢。opal功能最強,雖然也用到了ffmpeg ,但是自己封裝的非常好,採用插件方式,調用靈活。opal採用class方式提供封裝,介面非常友好。感覺唯一不爽的地方,就是低層使用了ptlib,雖然多平台下都很好用,但放在嵌入式下感覺稍龐大了一些。pjsip精巧,方便移植,嵌入式下應該是首選。不過視頻頻支持方面擴展起來比opal麻煩。個人感覺,對於windows開發者來說,pjsip最大的好處就是代碼調試方便。整個工程一次編譯通過,另外兩個庫還要找很多相關的資源

3、其他的一些協議棧也調試過,比如reSipphone,好象是這個名字,還有Yate,不過從快速開發角度看,都不太合適。現在搞sip開發的,一開始就是先找好協議棧。linphone,ekiga什麼的,但龐大。對於剛開始做的,最好是一個精簡的demo。後來找到pjsip下面的幾個例子,慢慢地了解了sip的工作流程,當然少不了抓包工具和tcpmp。
不過,其實,sip沒有想像中的那麼麻煩。現在回頭看,剛開始做項目,使用協議棧絕對不是好想法。如果換個方向,先熟悉SIP基本協議,然後自己改造一個,或完全寫一個,可能效果更好。

❹ ptlib的編譯錯誤 環境:xp系統和vc++6 求牛人解答

\..\..\include\ptlib/pstring.h(1646) : error C2143: syntax error : missing ';' before '&'
..\..\..\include\ptlib/pstring.h(1646) : error C2433: 'wostream' : 'inline' not permitted on data declarations
..\..\..\include\ptlib/pstring.h(1646) : error C2501: 'wostream' : missing storage-class or type specifiers
..\..\..\include\ptlib/pstring.h(1646) : error C2061: syntax error : identifier 'wostream'
看你這些錯誤,可能是代碼的問題,建議你好好檢查代碼的完整性,wostream這個是什麼頭文件,沒聽過,如果是軟體和XP系統問題,我想不會出現這些錯誤,而是直接系統崩潰,希望能採納

熱點內容
php上一個頁面 發布:2025-02-09 06:41:25 瀏覽:488
改裝配置後不想重啟怎麼辦 發布:2025-02-09 06:36:40 瀏覽:445
演算法復雜度定義 發布:2025-02-09 06:30:46 瀏覽:585
昵圖源碼介面 發布:2025-02-09 06:30:37 瀏覽:724
微信怎麼沒有支付密碼 發布:2025-02-09 06:29:52 瀏覽:33
mplayer編譯版 發布:2025-02-09 06:29:13 瀏覽:762
免費網盤源碼 發布:2025-02-09 06:29:07 瀏覽:5
毛發模擬演算法 發布:2025-02-09 06:24:27 瀏覽:273
芝麻雲伺服器分布圖 發布:2025-02-09 06:12:53 瀏覽:429
oracle同義詞存儲過程 發布:2025-02-09 06:00:59 瀏覽:157