HTML5方式使用freeswitch——VERTO模块
mod_verto
在freeswitch中有mod_sofia模块支持sip协议。sip协议用于媒体链接建立前的信令交互。像mod_sofia这种模块在freeswitch中成为endpoint,除了mod_sofia,freeswitch还有一个mod_verto模块。mod_verto使用freeswitch自定义的一个协议,通过websocket进行信令交互。verto协议基于jsonRpc协议,通过json格式来传输数据。
安装mod_verto
正常编译安装freeswitch时在module配置文件中打开verto的编译,之后一样make&make install就可以了,安装好之后需要在freeswitch启动加载模块的配置文件中打开verto,使freeswitch启动时自动加载mod_verto。
配置verto
修改conf/autoload_configs/verto.conf.xml
如下:
<configuration name="verto.conf" description="HTML5 Verto Endpoint">
<settings>
<param name="debug" value="10"/>
<!-- seconds to wait before hanging up a disconnected channel -->
<param name="detach-timeout-sec" value="120"/>
<!-- enable broadcasting all FreeSWITCH events in Verto -->
<!-- <param name="enable-fs-events" value="false"/> -->
<!-- enable broadcasting FreeSWITCH presence events in Verto -->
<param name="enable-presence" value="false"/>
</settings>
<profiles>
<profile name="default-v4">
<param name="bind-local" value="$${local_ip_v4}:8081"/>
<param name="bind-local" value="$${local_ip_v4}:8082" secure="true"/>
<param name="force-register-domain" value="$${domain}"/>
<param name="secure-combined" value="/usr/local/freeswitch/certs/wss.pem"/> -证书的位置,一会儿存放证书时要用
<param name="secure-chain" value="/usr/local/freeswitch/certs/wss.pem"/>
<param name="userauth" value="true"/>
<!-- setting this to true will allow anyone to register even with no account so use with care -->
<param name="blind-reg" value="false"/>
<param name="mcast-ip" value="224.1.1.1"/>
<param name="mcast-port" value="1337"/>
<param name="rtp-ip" value="$${local_ip_v4}"/>
<!-- <param name="ext-rtp-ip" value=""/> -->
<param name="local-network" value="localnet.auto"/>
<param name="outbound-codec-string" value="opus,vp8,h264"/>
<param name="inbound-codec-string" value="opus,vp8,h264"/>
<param name="apply-candidate-acl" value="localnet.auto"/>
<param name="apply-candidate-acl" value="wan_v4.auto"/>
<param name="apply-candidate-acl" value="rfc1918.auto"/>
<param name="apply-candidate-acl" value="any_v4.auto"/>
<param name="timer-name" value="soft"/>
</profile>
<profile name="default-v6">
<param name="bind-local" value="[$${local_ip_v6}]:8081"/>
<param name="bind-local" value="[$${local_ip_v6}]:8082" secure="true"/>
<param name="force-register-domain" value="$${domain}"/>
<param name="secure-combined" value="$${certs_dir}/wss.pem"/>
<param name="secure-chain" value="$${certs_dir}/wss.pem"/>
<param name="userauth" value="true"/>
<!-- setting this to true will allow anyone to register even with no account so use with care -->
<param name="blind-reg" value="false"/>
<param name="rtp-ip" value="$${local_ip_v6}"/>
<!-- <param name="ext-rtp-ip" value=""/> -->
<param name="outbound-codec-string" value="opus,vp8"/>
<param name="inbound-codec-string" value="opus,vp8"/>
<param name="apply-candidate-acl" value="wan_v6.auto"/>
<param name="apply-candidate-acl" value="rfc1918.auto"/>
<param name="apply-candidate-acl" value="any_v6.auto"/>
<param name="apply-candidate-acl" value="wan_v4.auto"/>
<param name="apply-candidate-acl" value="any_v4.auto"/>
<param name="timer-name" value="soft"/>
</profile>
</profiles>
</configuration>
为用户号码配置verto支持
修改directory/default.xml,在<params>和</params>中添加如下:
<param name="jsonrpc-allowed-methods" value="verto"/>
<param name="jsonrpc-allowed-event-channels" value="demo,conference,presence"/>
每个用户的xml配置文件中conf/directory/default/1000.xml,修改如下:
<user id="1001">
<params>
<param name="password" value="$${default_password}"/>
<param name="vm-password" value="1001"/>
<param name="verto-context" value="public"/>
<param name="verto-dialplan" value="XML"/>
</params>
如需使用会议功能,请修改会议配置文件conf/autoload_configs/conference.conf.xml
在<profiles>和</profile>中检查conference-flags项目,确保其中包含livearray-sync和livearray-json-status
拨号计划配置例如:
<extension name="HTML5 Verto">
<condition field="destination_number" expression="^(10[0-9][0-9])$">
<action application="export" data="dialed_extension=$1"/>
<action application="set" data="call_timeout=30"/>
<action application="bridge" data="${verto_contact ${dialed_extension}@${dialed_domain}}"/>
</condition>
</extension>
至此freeswitch针对verto的配置已经完成,想要测试的话,需要使用freeswitch自带的verto demo,安装使用过程如下:
一、创建证书
因为wss方式的访问是加密的,所以需要配置https方式运行demo,先创建一个自签名证书,以供freeswitch和web服务使用,注意二者需要使用同一套证书才能顺利的访问freeswitch。
创建自签名证书,过程中按提示输入各种信息,过程中需要openssl的支持,如果未安装请提前自行安装。
wget http://files.freeswitch.org/downloads/ssl.ca-0.1.tar.gz
tar zxfv ssl.ca-0.1.tar.gz
cd ssl.ca-0.1/
perl -i -pe 's/md5/sha256/g' *.sh
perl -i -pe 's/1024/4096/g' *.sh
./new-root-ca.sh
./new-server-cert.sh self.verto
./sign-server-cert.sh self.verto
cat self.verto.crt self.verto.key > /usr/local/freeswitch/certs/wss.pem /*注意此路径和verto配置文件中的相同*/
二、安装web服务,以apache为例
sudo apt-get install apache2
配置apache
sudo a2enmod ssl
sudo a2enmod rewrite
修改/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:443> -- 修改为443
…………
--增加下面几行
SSLEngine On
SSLOptions +StrictRequire
SSLCertificateFile /usr/local/freeswitch/certs/wss.pem
SSLCertificateKeyFile /usr/local/freeswitch/certs/wss.pem
SSLCertificateChainFile /usr/local/freeswitch/certs/wss.pem
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
重启apache服务
sudo service apache2 restart
三、将verto demo放到apache的web页面目录中
cp -rf /home/verto/freeswitch/html5/verto/video_demo /var/www/html
此处我们直接复制带视频的demo过来,verto还提供了不带视频的demo和verto_communicator请自行尝试。
打开浏览器(我用的Chrome)访问https://IP地址/video_demo
提示未信任,点高级,继续前往。
至此安装完毕,其他请自行体验。
HTML5方式使用freeswitch——VERTO模块相关推荐
- freeswitch verto communicator客户端
概述 我们在web客户端使用sip协议时用的比较多的是sipml5库和jssip库. 但是sip协议比较重,又复杂,所以freeswitch内部就自定义了一个verto协议,方便在web页面上使用音视 ...
- html制作手机预览效果,新移动端Html5方式预览报表插件
2. Html5报表制作及手机效果 2.1 手机页面大小 制作手机上的报表与PC端报表制作过程是一样的,为了让用户制作出适合手机尺寸的报表,在模板>>移动端属性地方,勾选设置为手机模板画布 ...
- FreeSWITCH mod_cti模块 结合 fail2ban 实现封堵恶意IP(SIP安全,防攻击)
原文链接 http://www.ddrj.com/callcenter/fail2ban.html 介绍 运行在公网的FreeSWITCH服务器,每天都会接收到很多恶意的呼叫请求和注册请求,尝试盗打电 ...
- 方式四:修改模块导入段来拦截API
一个模块的导入段包含一组DLL,导入段还包含一个符号表,其中列出了该模块从各DLL中导入的符号, 当该模块调用一个导入函数的时候,线程实际上会先从模块的导入表中得到相应的导入函数的地址,然后再跳转到那 ...
- 用python操作浏览器的三种方式_python的webbrowser模块支持对浏览器进行一些操作...
python 的 webbrowser 模块支持对浏览器进行一些操作 主要有以下三个方法: webbrowser.open(url, new=0, autoraise=True) webbrowser ...
- html5读取umd,JS通用模块模式 UMD
历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...
- 【HTML-5】小米耳机产品模块
1. 以下为效果图 2.以下为源代码 <!DOCTYPE html> <html lang="en"><head><meta charse ...
- FreeSwitch Sofia模块加载过程
模块加载入口函数mod_sofia_load(),首先一系列switch_event_reserve_subclass()调用,注册事件类型.然后调用switch_queue_create( ...
- html5文件io,html5plus io模块resolveLocalFileSystemURL 异步操作的问题
我有个方法是相册里多选图片,遍历多选的图片,判断图片的大小,如果超过500k就对图片进行压缩,但是读取图片信息的方法是异步的,导致最后我收集到图片的数组数据会丢失图片,我觉得是异步的问题导致,不知道大 ...
- freeswitch模块之event_socket
这是我之前整理的关于freeswitch mod_event_socket的相关内容,这里记录下,也方便我以后查阅. mod_event_socket以socket的形式,对外提供控制FS一种途径, ...
最新文章
- WEB客户端和服务器
- 网络分析系统_MetagenoNets:在线宏基因组网络分析实操教程
- 算法----------字符串相乘(Java 版本)
- vue拖动改变模板_可视化拖拽 UI 布局之拖拽篇
- 《SolidWorks 2016中文版机械设计从入门到精通》——1.10 范例
- Delphi中拖动无边框窗口的5种方法
- java 同步 变量,在java中的对象上同步,然后更改同步的变量的值
- nuxt webpack配置css,基于nuxt通过webpack配置ant-Design-vue的主题切换配置
- cocos2d-x的CCSequence与CCRepeatForever的混用
- tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
- ArduinoUNO实战-第二十二章-红外遥控实验
- CSS绘制渐变黑白背景栏
- 社保能找公司代缴吗?小心问题找上门
- 【项目实战】Java从单体到微服务打造房产销售平台(一) - 整体概述
- 华为2288hv5服务器安装ESXI 6.7(一):远程访问服务器管理口
- 百万CT网上卖,东软医疗这样推动行业阳光采购
- 【转】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
- 网站服务器费用是什么,建网站费用都包含什么
- 高薪程序员面试题精讲系列34之List、Set、Map可不可以存空值?
- BRD、MRD 和 PRD 之间的区别--学习记录