一、關(guān)鍵點(diǎn)描述
1、音頻設(shè)備設(shè)置
CentOS7虛擬機(jī)沒有音頻設(shè)備,可以通過set_null_snd_dev來避免pjsua模塊報(bào)錯(cuò)。
2、編碼設(shè)置
可以通過set_codec_priority函數(shù)來設(shè)置編碼的優(yōu)先級,避免編碼問題導(dǎo)致呼叫失敗。
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、自動(dòng)播放聲音文件
1)通過 create_player 函數(shù)創(chuàng)建playerId;
2)通過player_get_slot函數(shù)獲取slot;
3)通過call對象獲取呼叫的slot;
4)然后conf_connect進(jìn)行連接兩個(gè)slot連接,進(jìn)而實(shí)現(xiàn)音頻播放。
具體參考這里:
二、具體實(shí)現(xiàn)
1、作為uac進(jìn)行測試
需要作為分機(jī)注冊到FreeSWITCH,示例如下:
acc = lib.create_account(pj.AccountConfig("192.168.137.32:5060", "1012", "0000"))
代碼如下:
完整代碼獲取途徑:關(guān)注微信公眾號(聊聊博文,文末可掃碼)后回復(fù) 20230622 獲取。
2、作為uas進(jìn)行測試
1)編寫UAS腳本
需要指定sip服務(wù)端口,示例如下:
tp= lib.create_transport(pj.TransportType.UDP,pj.TransportConfig(55081))
lib.start()
代碼如下:
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/123@192.168.137.32:55081"/>
</condition>
</extension>
三、運(yùn)行效果
1、uac測試效果
1)啟動(dòng)FreeSWITCH;
2)運(yùn)行uac腳本注冊分機(jī);
source /root/py39env/env.sh
/root/py39env/bin/python3.9 uac.py
3)使用軟電話注冊分機(jī);
4)使用軟電話撥打uac分機(jī);
預(yù)期效果:
軟電話可聽到uac分機(jī)播放的音頻。
運(yùn)行效果視頻獲取途徑:
2、uas測試效果
1)啟動(dòng)FreeSWITCH;
2)編寫撥號方案;
3)運(yùn)行uas腳本啟動(dòng)服務(wù);
source /root/py39env/env.sh
/root/py39env/bin/python3.9 uas.py
4)使用軟電話注冊分機(jī);
5)使用軟電話撥打接入號驗(yàn)證;
預(yù)期效果:
軟電話可聽到uas播放的音頻。