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

pjsiplinux編譯

發布時間: 2023-08-27 04:18:55

『壹』 如何用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基本協議,然後自己改造一個,或完全寫一個,可能效果更好。

『貳』 android 網路電話開發,VOIP/SIP 那麼多開源選哪個好

覺得好用的是linphone 和csipsimple,linphone的最大優勢在於全平台支持,android,ios,winphone,windows,linux,mac osx,web 全都支持,但是質量上還是欠火候,改過他的庫,添加過g.729的支持,他的c 代碼,命名和縮進都覺得亂。
可能是看過pjsip 的代碼,有些情有獨鍾吧,總之咱非常喜歡pjsip的簡潔,高效,代碼的設計非常贊,注釋文檔也很棒,直接用doxygen生成文檔。所以自然特別關注了一些csipsimple。
UI上,csipsimple基本就是提取android原生的撥號程序,然後用swig生成的介面。功能的完整性,還是UI都勝過其他那幾個開源。所以在android開發上,主要基於csipsimple 做了很多改進。

『叄』 如何在 android 設備上使用 pjsip G.729 編解碼的功能

第一步是生成 pjsip 為 Android (步驟為 Ubuntu Linux) 的源代碼:


  1. 設置 ANDROID_NDK_ROOT 環境變數設置為您 NDK 根文件夾

  2. 2.轉到 pjsip 2.x 文件夾並創建 pjlib/include/pj/config_site.h 包括 config_site_sample.h ( #include <pj/config_site_sample.h> )

  3. 3.運行./configure-android

  4. 4.運行make clean make depend make

  5. 之後這些步驟,你將有幾個靜態庫中的幾個文件夾。我建議將它們分組相同的文件夾 (最好在您的項目中) 中的:

mkdir <your_project_path>/pjsip_libs

find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/

一旦你的所有庫,您需要將這些庫添加到您的項目 Android.mk 文件,這是由包括一個新的模塊節每個圖書館。此模塊部分應該是一樣的東西:


include $(CLEAR_VARS)

LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi

LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a

include $(PREBUILT_STATIC_LIBRARY)

,你其實是一節中構建您的 JNI 項目的源代碼,所有模塊都添加到您的靜態庫的引用:


LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi

這將包括 pjsip 的引用加入您的 JNI 庫。現在,您需要配置 pjsip UA 實例。


你有一個關於 init 和開始的解釋 pjsip 的 UA (pjsua) 在 pjsip/include/pjsua-lib/pjsua.h 但要遵循的主要步驟是:


  1. 創建一個具有 UA 實例pjsua_create

  2. 2.創建一個工作線程與pj_thread_create

  3. 3.UA 實例的設置的默認配置:

pjsua_config cfg 樁 ;pjsua_logging_config log_cfg ;pjsua_media_config media_cfg ;


pj_cli_cfg_default(app_config.cli_cfg.cfg) ;pjsua_logging_config_default(log_cfg) ;pjsua_media_config_default(media_cfg) ;


4.初始化堆棧與pjsua_init


5.啟動與堆棧pjsua_start

從這里,你有充足的配置選項 (日誌、 媒體、 交通工具等)


您可以找到基本 PJSIP 教程在這里,和裡面 pjsip 的源的根路徑,你有一個基本 (但不夠完整,基本的 SIP 使用情況) 在:pjsip-apps/src/samples/simple_pjsua.c


編輯:在生成時在 pjsip 應用程序的 android 項目,你可以面臨一個問題,因為 pjsua app 不生成默認情況下,對一般生成 (更具體地說,pjsua: 目標不包括所有上: 在 pjsip-應用程序/生成/生成文件的目標)。若要修復這只是轉到 pjsip-應用程序/創建和運行:


使 pjsua


這將創建在正確的對象文件: pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/ (需要構建 android 樣本時)。


一旦你所有相應的對象文件,您可以在 pjsip-應用程序/src/pjsua/android 系統再次運行 ndk 生成

『肆』 如何在 android 設備上使用 pjsip G.729 編解碼的功能

第一步是生成 pjsip 為 Android (步驟為 Ubuntu Linux) 的源代碼:

1.設置 ANDROID_NDK_ROOT 環境變數設置為您 NDK 根文件夾。
2.轉到 pjsip 2.x 文件夾並創建 pjlib/include/pj/config_site.h 包括 config_site_sample.h ( #include <pj/config_site_sample.h> )
3.運行./configure-android
4.運行make clean && make depend && make
之後這些步驟,將有幾個靜態庫中的幾個文件夾。建議將它們分組相同的文件夾 (最好在您的項目中) 中的:

mkdir <your_project_path>/pjsip_libs
find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/
一旦自己的所有庫,您需要將這些庫添加到您的項目 Android.mk 文件,這是由包括一個新的模塊節每個圖書館。此模塊部分應該是一樣的東西:

include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)
,其實是一節中構建您的 JNI 項目的源代碼,所有模塊都添加到您的靜態庫的引用:

LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi ...
這將包括 pjsip 的引用加入您的 JNI 庫。現在,您需要配置 pjsip UA 實例。

有一個關於 init 和開始的解釋 pjsip 的 UA (pjsua) 在 pjsip/include/pjsua-lib/pjsua.h 但要遵循的主要步驟是:

1.創建一個具有 UA 實例pjsua_create
2.創建一個工作線程與pj_thread_create
3.UA 實例的設置的默認配置:

pjsua_config cfg 樁 ;pjsua_logging_config log_cfg ;pjsua_media_config media_cfg ;

pj_cli_cfg_default(&app_config.cli_cfg.cfg) ;pjsua_logging_config_default(&log_cfg) ;pjsua_media_config_default(&media_cfg) ;

4.初始化堆棧與pjsua_init

5.啟動與堆棧pjsua_start
從這里,有充足的配置選項 (日誌、 媒體、 交通工具等)

您可以找到基本 PJSIP 教程在這里,和裡面 pjsip 的源的根路徑,有一個基本 (但不夠完整,基本的 SIP 使用情況) 在:pjsip-apps/src/samples/simple_pjsua.c

編輯:在生成時在 pjsip 應用程序的 android 項目,可以面臨一個問題,因為 pjsua app 不生成默認情況下,對一般生成 (更具體地說,pjsua: 目標不包括所有上: 在 pjsip-應用程序/生成/生成文件的目標)。若要修復這只是轉到 pjsip-應用程序/創建和運行:

使 pjsua

這將創建在正確的對象文件: pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/ (需要構建 android 樣本時)。

一旦所有相應的對象文件,您可以在 pjsip-應用程序/src/pjsua/android 系統再次運行 ndk 生成

『伍』 pjsip 嵌入式 必須有系統嗎

想把pjsip移植到嵌入式Linux下,該設備有多個fxs/fxo埠,每個埠對應一個dsp通道。pjsip目前只是對音效卡類設備進行支持,實現的pjsua也僅僅對一個音效卡設備支持,並不支持多埠。

在移植中,可以考慮如下方法:

1、把每個fxs/fxo埠對應的dsp通道適配成一個音效卡設備,對pjsua改造,呼叫的時候,指定使用哪一個音頻設備

方法好處就是完全支持pjmedia現有的媒體框架,基本不改動原有流程和代碼。

pjsip庫升級時,原有自己實現的設備不受影響

2、在pjsip代碼中進行攔截,攔截收發報文時決定使用的那個通道

該方法修改了pjsip流程,在以後pjsip庫需要升級時,需要同步修改

3、把整個dsp適配成一個音效卡設備,擴展參數,來通知dsp使用哪個通道

該方法同樣要修改pjsip代碼,對以後升級不利

因此,最好的方法,就是把dsp的每個通道適配成一個音頻設備,混音功能同樣適配成mix設備。

pjsip目前還不支持特性 收藏

1、sip info方式dtmf接收

2、call waiting

3、t38傳真

4、t30傳真

5、digitmap

6、call parking

這些在pjsip的簡單的uaapp中都沒有,需要自己實現。可以使用pjsip-ua,pjsip lib自己實現ua或者在現有ua上進行擴充。

『陸』 linux 中pjsip中怎麼增加音頻編碼方式g729

第一步是生成 pjsip 為 Android (步驟為 Ubuntu Linux) 的源代碼:


  1. 設置 ANDROID_NDK_ROOT 環境變數設置為您 NDK 根文件夾。

  2. 2.轉到 pjsip 2.x 文件夾並創建 pjlib/include/pj/config_site.h 包括 config_site_sample.h ( #include <pj/config_site_sample.h> )

  3. 3.運行./configure-android

  4. 4.運行make clean make depend make

  5. 之後這些步驟,將有幾個靜態庫中的幾個文件夾。建議將它們分組相同的文件夾 (最好在您的項目中) 中的:

mkdir <your_project_path>/pjsip_libs

find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/

一旦自己的所有庫,您需要將這些庫添加到您的項目 Android.mk 文件,這是由包括一個新的模塊節每個圖書館。此模塊部分應該是一樣的東西:


include $(CLEAR_VARS)

LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi

LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a

include $(PREBUILT_STATIC_LIBRARY)

,其實是一節中構建您的 JNI 項目的源代碼,所有模塊都添加到您的靜態庫的引用:


LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi

這將包括 pjsip 的引用加入您的 JNI 庫。現在,您需要配置 pjsip UA 實例。


有一個關於 init 和開始的解釋 pjsip 的 UA (pjsua) 在 pjsip/include/pjsua-lib/pjsua.h 但要遵循的主要步驟是:


  1. 創建一個具有 UA 實例pjsua_create

  2. 2.創建一個工作線程與pj_thread_create

  3. 3.UA 實例的設置的默認配置:

pjsua_config cfg 樁 ;pjsua_logging_config log_cfg ;pjsua_media_config media_cfg ;


pj_cli_cfg_default(app_config.cli_cfg.cfg) ;pjsua_logging_config_default(log_cfg) ;pjsua_media_config_default(media_cfg) ;


4.初始化堆棧與pjsua_init


5.啟動與堆棧pjsua_start

從這里,有充足的配置選項 (日誌、 媒體、 交通工具等)


您可以找到基本 PJSIP 教程在這里,和裡面 pjsip 的源的根路徑,有一個基本 (但不夠完整,基本的 SIP 使用情況) 在:pjsip-apps/src/samples/simple_pjsua.c


編輯:在生成時在 pjsip 應用程序的 android 項目,可以面臨一個問題,因為 pjsua app 不生成默認情況下,對一般生成 (更具體地說,pjsua: 目標不包括所有上: 在 pjsip-應用程序/生成/生成文件的目標)。若要修復這只是轉到 pjsip-應用程序/創建和運行:


使 pjsua


這將創建在正確的對象文件: pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/ (需要構建 android 樣本時)。


一旦所有相應的對象文件,您可以在 pjsip-應用程序/src/pjsua/android 系統再次運行 ndk 生成

『柒』 webrtc linphone 到底哪個

最新要做一個移動端視頻通話軟體,大致看了下現有的開源軟體

一) sipdroid
1)架構
sip協議棧使用java實現,音頻Codec使用skype的silk(Silk編解碼是Skype向第三方開發人員和硬體製造商提供免版稅認證(RF)的Silk寬頻音頻編碼器)實現。NAT傳輸支持stun server.
2)優缺點:
NAT方面只支持STUN,無ICE框架,如需要完全實現P2P視頻通話需要實現符合ICE標準的客戶端,音頻方面沒看到AEC等技術,視頻方面還不是太完善,目前只看到調用的是系統自帶的MediaRecorder,並沒有自己的第三方音視頻編解碼庫。
3)實際測試:
基於sipdroid架構的話,我們要做的工作會比較多,(ICE支持,添加迴音消除,NetEQ等gips音頻技術,添加視頻硬體編解碼codec.),所以就不做測試了。

二) imsdroid
1)架構:
基於doubango(Doubango 是一個基於3GPP IMS/RCS 並能用於嵌入式和桌面系統的開源框架。該框架使用ANSCI-C編寫,具有很好的可移植性。並且已經被設計成非常輕便且能有效的工作在低內存和低處理能力的嵌入式系統上。蘋果系統上的idoubs功能就是基於此框架編寫) .音視頻編碼格式大部分都支持(H264(video),VP8(video),iLBC(audio),PCMA,PCMU,G722,G729)。NAT支持ICE(stun+turn)
2)效果實測
測試環境:公司區域網內兩台機器互通,伺服器走外網sip2sip
音頻質量可以,但是AEC打開了還是有點迴音(應該可以修復)。視頻馬賽克比較嚴重,延遲1秒左右。
3)優缺點
imsdroid目前來說還是算比較全面的,包括音視頻編解碼,傳輸(RTSP,ICE),音頻處理技術等都有涉獵。doubango使用了webrtc的AEC技術,但是其調用webrtc部分沒有開源,是用的編譯出來的webrtc的庫。如果要改善音頻的話不太方便,Demo的音頻效果可以,視頻效果還是不太理想。

三)csipsimple
1)sip協議棧用的是pjsip,音視頻編解碼用到的第三方庫有ffmpeg(video),silk(audio),webrtc.默認使用了webrtc的回聲演算法。支持ICE協議。
2)優缺點:
csipsimple架構比較清晰,sip協議由C實現,java通過JNI調用,SIP協議這一塊會比較高效。其VOIP各個功能也都具備,包括NAT傳輸,音視頻編解碼。並且該項目跟進新技術比較快,官方活躍程度也比較高。如果做二次開發可以推薦這個。
3)實測效果
測試環境:公司區域網內兩台機器互通,伺服器走外網sip2sip
音頻質量可以,無明顯迴音,視頻需要下插件,馬賽克比imsdroid更嚴重。

四)Linphone

這個是老牌的sip,支持平台廣泛 windows, mac,ios,android,linux,技術會比較成熟。但是據玩過的同事說linphone在Android上的bug有點多,由於其代碼實在龐大,所以我暫時放棄考慮Linphone.不過如果誰有跨平台的需要,可以考慮Linphone或者imsdroid和下面的webrtc.。。。好像現在開源軟體都跨平台了。。。

五) webrtc

imsdroid,csipsimple,linphone都想法設法調用webrtc的音頻技術,本人也測試過Android端的webrtc內網視頻通話,效果比較滿意。但是要把webrtc做成一個移動端的IM軟體的話還有一些路要走,不過webrtc基本技術都已經有了,包括p2p傳輸,音視頻codec,音頻處理技術。不過其因為目前僅支持VP8的視頻編碼格式(QQ也是)想做高清視頻通話的要注意了。VP8在移動端的硬體編解碼支持的平台沒幾個(RK可以支持VP8硬體編解碼)。不過webrtc代碼里看到可以使用外部codec,這個還是有希望調到H264的。

總結:sipdroid比較輕量級,著重基於java開發(音頻codec除外),由於其音視頻編碼以及P2P傳輸這一塊略顯不足,不太好做定製化開發和優化。imsdroid,遺憾就是直接調用webrtc的庫,而最近webrtc更新的比較頻繁,開發比較活躍。如果要自己在imsdroid上更新webrtc擔心兼容性問題,希望imsdroid可以直接把需要的webrtc相關源碼包進去。csipsimple的話,都是圍繞pjsip的,webrtc等都是以pjsip插件形式擴充的,類似gstreamer. webrtc如果有技術實力的開發公司個人還是覺得可以選擇這個來做,一個是google的原因,一個是其視頻通話相關關鍵技術都比較成熟的原因。個人覺得如果能做出來,效果會不錯的。

『捌』 編譯運行pjsip的sample出現問題

修改config_site.h文件 在pjproject-2.4.5\pjlib\include\pj目錄下 增加 #define PJMEDIA_AUDIO_DEV_HAS_ALSA 1

『玖』 通過ndk移植pjsip協議到android上出現error: undefined reference to 'srand'

這個屬於ndk r10升級後代碼的bug,建議換成舊版的ndk r9後在試試,
希望對你有用,我是ndk吧吧主,有問題可以ndk吧留言,謝謝!

熱點內容
怎麼建sql資料庫 發布:2024-11-20 17:28:29 瀏覽:633
萬網ftp上傳工具 發布:2024-11-20 17:28:27 瀏覽:293
開關IC找美光存儲有名 發布:2024-11-20 17:27:03 瀏覽:232
編程正實數 發布:2024-11-20 17:22:12 瀏覽:241
電腦經常彈腳本錯誤 發布:2024-11-20 17:21:03 瀏覽:506
雲伺服器購買人怎麼查 發布:2024-11-20 17:09:36 瀏覽:399
目前安卓手機用什麼軟體 發布:2024-11-20 17:08:56 瀏覽:908
12個符號組成密碼多少個 發布:2024-11-20 17:08:56 瀏覽:296
災難資料庫 發布:2024-11-20 17:08:55 瀏覽:210
釣魚發燒友腳本機價格 發布:2024-11-20 16:59:41 瀏覽:122