- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章freeswitch开源通信 python模块介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
freeswitch支持多种语言的业务开发,包括C/C++,java,python,js,lua,Golang等等.
freeswitch在使用python做业务开发时,有俩种接入方式,一种是ESL接口,另一种是mod_python模块.
python的ESL接口是通过socket套接字与freeswitch进行命令交互,包括发送命令、命令响应和事件回调等,类似于在外部增加一个第三方模块控制fs行为.
ESL接口部分会在后续的章节中详细介绍.
今天我们要介绍的是fs内部的mod_python语言支持模块,该模块允许我们使用python脚本开发fs呼叫控制流程.
centos:CentOS release 7.0 (Final)或以上版本 。
freeswitch:v1.8.7 。
GCC:4.8.5 。
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
|
增加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()
|
修改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'
|
在freeswitch命令行中输入命令,使用python调用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 。
最后此篇关于freeswitch开源通信 python模块介绍的文章就讲到这里了,如果你想了解更多关于freeswitch开源通信 python模块介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
去年(2023年)年底我初学flutter,看了一些文档和教程,想找个东西*练练手。 小时候看过一个关于历史名人儿时事迹的短片,有一集是讲*总理的,有一个细节我记得很清楚:幼年***经常要做一个游戏
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: image 如上图,右键菜单多了几个我自定义的菜单
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代
书接上回,我们继续来分享一些关于时间转换的常用扩展方法。 01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为DateTime类型,其中日期部分使用系统当前日期,时间部分
从事软件开发这么多年,平时也积累了一些方便自己快速开发的帮助类,一直在想着以什么方式分享出来,因此有了这个系列文章,后面我将以《开源-Ideal库》系列文章分享一些我认为比较成熟、比较方便、比较好的代
任何人都可以建议我应该使用什么程序/方法? 我需要有一个像谷歌地图这样的 map ,我可以在其中显示 map 、添加标记多边形等。 但是我不能依赖这样的在线服务,因为客户担心这样的服务会消失,我们的系
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 11年前关闭。 Improve this qu
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
您知道 EDA(电子设计自动化)领域有哪些开源项目正在寻找 C++ 程序员吗? 最佳答案 如果您经常关注 gEDA 的邮件列表,您也许能够加入 gEDA。详情:http://www.gpleda.or
如果现有Hadoop群集上有10个数据节点,则可以在4个或6个数据节点上安装NiFi吗? NiFi的主要目的是每天将数据从RDBMS加载到高容量的HDFS。 数据节点将配置为具有100 GB的高RAM
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
Closed. This question is off-topic。它当前不接受答案。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库。 图形验证码是为了抵御恶意攻击出现的一种设计;例如用
【Github源码】 《上一篇》 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库。 XML操作是软件开发过程中经常会遇到的情况;包括XM
作者以 SciTime 项目(一个对算法训练时间进行估计的包)的发布为例,详细解释了发布的每个步骤。 注意:本文假设你在 GitHub 上已经有一个想要打包和发布的项目。 第 0 步:获取项
我是一名优秀的程序员,十分优秀!