Freeswitch esl 接口控制与 python 实现

Freeswitch esl 接口控制与 python 实现
一、 freeswitch 安装与运行
1、 freeswitch 运行环境
官网推荐运行环境系统为 Debian 9 64 位。 通过访问官网
https://freeswitch.org/confluence/display/FREESWITCH/Debian+9+Stretch 进行安装,安装方
式有两种,一种是基于运行系统的软件包安装,比较简单;另一种是基于源码安装,稍微
复杂些。 Freeswitch 安装版本有 release 稳定版和 master 最新版可供选择。 由于 freeswitch
的安装依赖的软件较多,所以编译的时候会出现错误, 这时候仔细看下错误信息,然后补
全依赖软件即可。
2、 增加 mod_av 模块,支持 h.264
Freeswitch 编译默认没有打开 mod_av 模块,需要手动修改, 取消源码目录
freeswitch/modules.conf 中 mod_av 的注释 “applications/mod_av”;
然后在 freeswitch/src/mod 下,执行 make mod_av;
接着在 freeswitch 目录下,执行 make mod_av-install。
3、修改配置文件
a.运行自动加载 mod_av,修改
/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml, mod_av 去掉注释符号;
b.修改/usr/local/freeswitch/conf/vars.xml,增加 H264
4、 freeswitch 运行: ./freeswitch –nonat
查看当前 freeswitch 支持的配置信息,输入: sofia status profile internal
二、 freeswitch esl 接口开启与 python 的 esl 控制
1、支持 esl 接口,在 freeswitch 运行时,执行 load mod_event_socket;
2、 freeswitch 安装目录下 bin/fs_cli 也是利用 esl 接口实现的,如果需要远程通过 esl 控制,
则可以修改 esl 的配置信息,安装目录 conf/autoload_configs/event_socket.conf.xml,修改 esl
的监听 ip 为 0.0.0.0,则可以外网访问,同时修改密码信息, 隔离无效接口。
3、 在本地 linux 系统搭建 python 环境, 同时使 python 支持 esl
Debian/Ubuntu 下, 执行: apt-get install swig
apt-get install python-dev
pip install python-ESL
4、运行 python 脚本,访问 freeswitch
Python 脚本 fs_command.py 如下:
#!/usr/bin/env python
import string
import sys
from optparse import OptionParser
from ESL import *
def main(argv):
try:
parser = OptionParser()
parser.add_option("-a", “–auth”, dest=“auth”, default=“ClueCony123”,
help=“ESL password”)
parser.add_option("-s", “–server”, dest=“server”, default=“114.115.151.107”,
help=“FreeSWITCH server IP address”)
parser.add_option("-p", “–port”, dest=“port”, default=“8021”,
help=“FreeSWITCH server event socket port”)
parser.add_option("-c", “–command”, dest=“command”,
help="command to run, surround mutli word commands
in “'s”)
(options, args) = parser.parse_args()
con = ESLconnection(options.server, options.port, options.auth)
#are we connected?
if con.connected():
#run command
e = con.api(options.command)
print e.getBody()
else:
print “Not Connected”
sys.exit(2)
except:
print parser.get_usage()
if name == “main”:
main(sys.argv[1:])
esl 接口通信类似于 socket 通信,此脚本是客户端, 这里主要配置了 freeswitch 的 esl 服务
器的 ip 地址, 鉴权密码, 端口号, 还有要发送的消息内容。
执行 python esl 客户端:
python fs_command.py -c " sofia status profile internal "
freeswitch 返回数据信息

三、 freeswitch 会议相关的命令与实现
Freeswitch 支持会议功能,同时具有丰富的音视频会议标准接口,详细了解可以访问
官网 https://freeswitch.org/confluence/display/FREESWITCH/mod_conference。
基于 SIP 的 freeswitch,结合 mod_av 模块, 能够实现多路音视频的中转或者融屏(合
成多画面),实现音视频会议功能。以下为常用的会议相关的控制接口,可以通过 python
esl 进行测试。
1、 会议列表: conference list
2、某个会议的所有成员: conference <conference_name> list 注: 会议名称为会议号
+ip 地址, 如 3000-192.168.12.0
3、会议的画面布局: conference <conference_name> vid-layout list
4、 设置某个画面布局: conference <conference_name> vid_layout <layout_name> 注:
layout_name 由画面布局列表获取
5、设置成员所在布局的区域: conference <conference_name> vid-layer <member_id>

6、 静音/非静音某个会议成员: conference <conference_name> mute/unmute
<member_id>
7、 当前显示某成员单画面: conference vid-floor <member_id> force
8、 会议锁定/解锁: conference <conference_name> lock/unlock 锁定即为无法加入会议
9、邀请上线成员进入会议: originate user/1005 &conference(3000@video-mcu-stereo)
注: 3000 为 conference_name , 1005 为注册上的设备。
10、查看在线注册用户: sofia status profile internal reg
关于会议的命令还有很多, 可以根据自定义的业务逻辑查找需要的的命令, 或者后续补
充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值