Freeswitch esl 接口控制与 python 实现

    xiaoxiao2023-11-10  176

    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)