1、概述
freeswitch
支持多种语言的业务开发,包括C/C++,java,python,js,lua,Golang等等。
freeswitch
在使用python
做业务开发时,有俩种接入方式,一种是ESL接口,另一种是mod_python
模块。
python
的ESL接口是通过socket
套接字与freeswitch
进行命令交互,包括发送命令、命令响应和事件回调等,类似于在外部增加一个第三方模块控制fs行为。ESL接口部分会在后续的章节中详细介绍。
今天我们要介绍的是fs内部
的mod_python
语言支持模块,该模块允许我们使用python
脚本开发fs呼叫控制流程。
2、环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.8.7
GCC:4.8.5
3、安装mod_python模块
freeswitch
源码安装时,默认不安装mod_python
模块,需要我们进入目录编译安装。
1
2
3
4
5
6
7
|
cd / root / freeswitch - 1.8 . 7 / src / mod / languages / mod_python
make install
cd / usr / local / freeswitch / mod
ll - tr
- rwxr - xr - x. 1 root root 753208 9 月 14 10 : 41 mod_python.so
- rwxr - xr - x. 1 root root 1360 9 月 14 10 : 41 mod_python.la
|
4、python脚本
增加testapi.py
脚本
1
2
3
4
5
|
vi / usr / local / freeswitch / scripts / testapi.py
import freeswitch
def fsapi(session,stream,env,args):
stream.write( "hello" )
freeswitch.consoleLog( "info" , "test" )
|
增加testapp.py
脚本
1
2
3
4
5
6
7
8
|
vi / usr / local / freeswitch / scripts / testapp.py
import freeswitch
def handler(session, args):
session.answer()
freeswitch.console_log( "info" , "testCall\n" )
session.streamFile( "local_stream://moh" )
freeswitch.msleep( 3000 )
session.hangup()
|
5、配置启动
修改freeswitch
模块加载配置文件
1
2
3
4
|
cd / usr / local / freeswitch / conf / autoload_configs
vi modules.conf.xml
<! - - Languages - - >
<load module = "mod_python" / >
|
修改dialplan
拨号计划
1
2
3
4
5
6
7
8
9
10
11
|
cd / usr / local / freeswitch / conf / dialplan
vi public.xml
…
<include>
<context name = "public" >
<extension name = "test" >
<condition>
<action application = "python" data = "testapp" / >
< / condition>
< / extension>
…
|
启动freeswitch
1
2
3
4
5
6
7
8
|
cd / usr / local / freeswitch / bin
. / freeswitch - nonat
2021 - 09 - 14 10 : 57 : 06.392800 [NOTICE] mod_python.c: 551 Python Framework Loading...
2021 - 09 - 14 10 : 57 : 06.405965 [CONSOLE] switch_loadable_module.c: 1540 Successfully Loaded [mod_python]
2021 - 09 - 14 10 : 57 : 06.405982 [NOTICE] switch_loadable_module.c: 292 Adding Application 'python'
2021 - 09 - 14 10 : 57 : 06.406012 [NOTICE] switch_loadable_module.c: 315 Adding Chat Application 'python'
2021 - 09 - 14 10 : 57 : 06.406030 [NOTICE] switch_loadable_module.c: 338 Adding API Function 'pyrun'
2021 - 09 - 14 10 : 57 : 06.406046 [NOTICE] switch_loadable_module.c: 338 Adding API Function 'python'
|
6、测试
在freeswitch
命令行中输入命令,使用pytho
n调用API接口
1
2
3
4
|
freeswitch@localhost.localdomain> python testapi
2021 - 09 - 14 11 : 13 : 56.068722 [NOTICE] mod_python.c: 212 Invoking py module: testapi
2021 - 09 - 14 11 : 13 : 56.088701 [INFO] switch_cpp.cpp: 1443 test
hello
|
在日志打印中,我们可以看到mod_python
模块调用了testapi
脚本,并打印了“test
“和”hello
“。
注意事项,python
调用命令中,python
脚本的后缀“.py“要去掉。
通过其他sip server
发送呼叫请求到本机,查看日志:
1
2
3
4
5
6
7
8
9
10
11
|
2021 - 09 - 14 11 : 24 : 40.988720 [NOTICE] switch_channel.c: 1114 New Channel sofia / external / 10011 @ 192.168 . 0.110 [ 73b09c9b - 6a62 - 4372 - 839b - 4c076af7dfc2 ]
2021 - 09 - 14 11 : 24 : 40.988720 [INFO] mod_dialplan_xml.c: 637 Processing 10011 < 10011 > - > 10012 in context public
2021 - 09 - 14 11 : 24 : 40.988720 [NOTICE] mod_python.c: 212 Invoking py module: testapp
2021 - 09 - 14 11 : 24 : 40.988720 [NOTICE] sofia_media.c: 92 Pre - Answer sofia / external / 10011 @ 192.168 . 0.110 !
2021 - 09 - 14 11 : 24 : 40.988720 [NOTICE] switch_cpp.cpp: 685 Channel [sofia / external / 10011 @ 192.168 . 0.110 ] has been answered
2021 - 09 - 14 11 : 24 : 40.988720 [INFO] switch_cpp.cpp: 1443 testCall
2021 - 09 - 14 11 : 24 : 40.988720 [WARNING] mod_local_stream.c: 870 Unknown source moh, trying 'default'
2021 - 09 - 14 11 : 24 : 40.988720 [ERR] mod_local_stream.c: 878 Unknown source default
2021 - 09 - 14 11 : 24 : 43.988724 [NOTICE] switch_cpp.cpp: 733 Hangup sofia / external / 10011 @ 192.168 . 0.110 [CS_EXECUTE] [NORMAL_CLEARING]
2021 - 09 - 14 11 : 24 : 44.008687 [NOTICE] switch_core_session.c: 1744 Session 2 (sofia / external / 10011 @ 192.168 . 0.110 ) Ended
2021 - 09 - 14 11 : 24 : 44.008687 [NOTICE] switch_core_session.c: 1748 Close Channel sofia / external / 10011 @ 192.168 . 0.110 [CS_DESTROY]
|
在日志打印中,我们可以看到在dialplan拨号计划的执行过程中,通过mod_python
调用了“testapp
“,testapp.py
脚本中应答了这通呼叫,打印日志”testcall
“,并在3秒后挂机。
总结:
freeswitch
做业务开发时,支持多种语言接入,很方便,用户可以根据自己的技能栈来选择接入方式和语言。
但是,不同语言在呼叫性能上肯定有差异,这个就需要用户自己来测试并评估实际使用中的差别了。
到此这篇关于有关freeswitch python
模块的详情介绍的文章就介绍到这了,更多相关freeswitch python
模块内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/qiuzhendezhen/p/15272323.html