Python知识分享网 - 专业的Python学习网站 学Python,上Python222
python3使用pjsua进行呼叫测试
发布于:2023-06-26 12:02:16

一、关键点描述

 1、音频设备设置

CentOS7虚拟机没有音频设备,可以通过set_null_snd_dev来避免pjsua模块报错。

python3使用pjsua进行呼叫测试 图1

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

 

具体可参考如下文档:

https://docs.pjsip.org/en/latest/api/generated/pjsip/group/group__PJSUA__LIB__MEDIA.html#group__PJSUA__LIB__MEDIA

python3使用pjsua进行呼叫测试 图2

3、自动播放声音文件

1)通过 create_player 函数创建playerId;

2)通过player_get_slot函数获取slot;

3)通过call对象获取呼叫的slot;

4)然后conf_connect进行连接两个slot连接,进而实现音频播放。

 

具体参考这里:

https://docs.pjsip.org/en/latest/api/generated/pjsip/group/group__PJSUA__LIB__MEDIA.html#group__PJSUA__LIB__MEDIA


python3使用pjsua进行呼叫测试 图3

 

二、具体实现

 1、作为uac进行测试

需要作为分机注册到FreeSWITCH,示例如下:

 

acc = lib.create_account(pj.AccountConfig("192.168.137.32:5060", "1012", "0000"))

 

代码如下:

python3使用pjsua进行呼叫测试 图4

 完整代码获取途径:关注微信公众号(聊聊博文,文末可扫码)后回复 20230622 获取。 

2、作为uas进行测试

1)编写UAS脚本

需要指定sip服务端口,示例如下:

 

tp= lib.create_transport(pj.TransportType.UDP,pj.TransportConfig(55081))
lib.start()

代码如下:

python3使用pjsua进行呼叫测试  图5

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>

 

三、运行效果

1、uac测试效果

1)启动FreeSWITCH;

2)运行uac脚本注册分机;

source /root/py39env/env.sh
/root/py39env/bin/python3.9 uac.py

3)使用软电话注册分机;

4)使用软电话拨打uac分机;  

预期效果:

软电话可听到uac分机播放的音频。

python3使用pjsua进行呼叫测试 图6

运行效果视频获取途径:

2、uas测试效果

1)启动FreeSWITCH;

2)编写拨号方案;

3)运行uas脚本启动服务;

source /root/py39env/env.sh
/root/py39env/bin/python3.9 uas.py

4)使用软电话注册分机;

5)使用软电话拨打接入号验证;

预期效果:

软电话可听到uas播放的音频。

python3使用pjsua进行呼叫测试 图7

 

转载自:https://www.cnblogs.com/MikeZhang/p/pyPjsuaExample20230623.html