python3使用pjsua進行呼叫測試

2023-06-23 06:00:14
環境:CentOS 7.6_x64   
Python版本 :3.9.12
pjsip版本:2.13
 
之前寫過一篇CentOS7環境編譯python3.9版本pjsua的文章:
在上篇文章中我著重介紹了怎樣編譯python3.9版本的pjsua庫,並演示瞭如何使用,今天記錄下CentOS7環境下python3.9使用pjsua作為uas或uac,對接FreeSWITCH進行呼叫測試的過程,並提供範例程式碼及相關資源下載,可從如下渠道獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20230622 獲取。 

一、關鍵點描述

 1、音訊裝置設定

CentOS7虛擬機器器沒有音訊裝置,可以通過set_null_snd_dev來避免pjsua模組報錯。

2、編碼設定

可以通過set_codec_priority函數來設定編碼的優先順序,避免編碼問題導致呼叫失敗。
pjsua支援的編碼列表如下:
speex/8000/1
speex/32000/1
iLBC/8000/1
GSM/8000/1
PCMU/8000/1
PCMA/8000/1
G722/16000/1
opus/48000/2
G729/8000/1
L16/44100/1
L16/44100/2
具體可參考如下檔案:

3、自動播放聲音檔案

1)通過 create_player 函數建立playerId;
2)通過player_get_slot函數獲取slot;
3)通過call物件獲取呼叫的slot;
4)然後conf_connect進行連線兩個slot連線,進而實現音訊播放。
 
具體參考這裡:

 

二、具體實現

 1、作為uac進行測試

需要作為分機註冊到FreeSWITCH,範例如下:
acc = lib.create_account(pj.AccountConfig("192.168.137.32:5060", "1012", "0000"))

程式碼如下:

 完整程式碼獲取途徑:關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20230622 獲取。 

2、作為uas進行測試

1)編寫UAS指令碼
需要指定sip伺服器埠,範例如下:
tp= lib.create_transport(pj.TransportType.UDP,pj.TransportConfig(55081))
lib.start()

程式碼如下:

 完整程式碼獲取途徑:關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20230622 獲取。 

2)編寫撥號方案
<extension name="pjsua_uas_test">
    <condition field="destination_number" expression="^123$">
         <action application="set" data="hangup_after_bridge=true"/>
         <action application="bridge" data="sofia/external/[email protected]:55081"/>
    </condition>
</extension>

三、執行效果

1、uac測試效果

1)啟動FreeSWITCH;
2)執行uac指令碼註冊分機;
source /root/py39env/env.sh
/root/py39env/bin/python3.9 uac.py
3)使用軟電話註冊分機;
4)使用軟電話撥打uac分機; 
預期效果:
軟電話可聽到uac分機播放的音訊。

 執行效果視訊獲取途徑:

關注微信公眾號(聊聊博文,文末可掃碼)後回覆 2023062201 獲取。 

2、uas測試效果

1)啟動FreeSWITCH;
2)編寫撥號方案;
3)執行uas指令碼啟動服務;
source /root/py39env/env.sh
/root/py39env/bin/python3.9 uas.py
4)使用軟電話註冊分機;
5)使用軟電話撥打接入號驗證;
預期效果:
軟電話可聽到uas播放的音訊。

執行效果視訊獲取途徑:

關注微信公眾號(聊聊博文,文末可掃碼)後回覆 2023062202 獲取。 

四、資源獲取

本文涉及原始碼和檔案,可以從如下途徑獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20230622 獲取。