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

如下:

  1. <configuration name="verto.conf" description="HTML5 Verto Endpoint">

  2. <settings>

  3. <param name="debug" value="10"/>

  4. <!-- seconds to wait before hanging up a disconnected channel -->

  5. <param name="detach-timeout-sec" value="120"/>

  6. <!-- enable broadcasting all FreeSWITCH events in Verto -->

  7. <!-- <param name="enable-fs-events" value="false"/> -->

  8. <!-- enable broadcasting FreeSWITCH presence events in Verto -->

  9. <param name="enable-presence" value="false"/>

  10. </settings>

  11. <profiles>

  12. <profile name="default-v4">

  13. <param name="bind-local" value="$${local_ip_v4}:8081"/>

  14. <param name="bind-local" value="$${local_ip_v4}:8082" secure="true"/>

  15. <param name="force-register-domain" value="$${domain}"/>

  16. <param name="secure-combined" value="/usr/local/freeswitch/certs/wss.pem"/> -证书的位置,一会儿存放证书时要用

  17. <param name="secure-chain" value="/usr/local/freeswitch/certs/wss.pem"/>

  18. <param name="userauth" value="true"/>

  19. <!-- setting this to true will allow anyone to register even with no account so use with care -->

  20. <param name="blind-reg" value="false"/>

  21. <param name="mcast-ip" value="224.1.1.1"/>

  22. <param name="mcast-port" value="1337"/>

  23. <param name="rtp-ip" value="$${local_ip_v4}"/>

  24. <!-- <param name="ext-rtp-ip" value=""/> -->

  25. <param name="local-network" value="localnet.auto"/>

  26. <param name="outbound-codec-string" value="opus,vp8,h264"/>

  27. <param name="inbound-codec-string" value="opus,vp8,h264"/>

  28. <param name="apply-candidate-acl" value="localnet.auto"/>

  29. <param name="apply-candidate-acl" value="wan_v4.auto"/>

  30. <param name="apply-candidate-acl" value="rfc1918.auto"/>

  31. <param name="apply-candidate-acl" value="any_v4.auto"/>

  32. <param name="timer-name" value="soft"/>

  33. </profile>

  34. <profile name="default-v6">

  35. <param name="bind-local" value="[$${local_ip_v6}]:8081"/>

  36. <param name="bind-local" value="[$${local_ip_v6}]:8082" secure="true"/>

  37. <param name="force-register-domain" value="$${domain}"/>

  38. <param name="secure-combined" value="$${certs_dir}/wss.pem"/>

  39. <param name="secure-chain" value="$${certs_dir}/wss.pem"/>

  40. <param name="userauth" value="true"/>

  41. <!-- setting this to true will allow anyone to register even with no account so use with care -->

  42. <param name="blind-reg" value="false"/>

  43. <param name="rtp-ip" value="$${local_ip_v6}"/>

  44. <!-- <param name="ext-rtp-ip" value=""/> -->

  45. <param name="outbound-codec-string" value="opus,vp8"/>

  46. <param name="inbound-codec-string" value="opus,vp8"/>

  47. <param name="apply-candidate-acl" value="wan_v6.auto"/>

  48. <param name="apply-candidate-acl" value="rfc1918.auto"/>

  49. <param name="apply-candidate-acl" value="any_v6.auto"/>

  50. <param name="apply-candidate-acl" value="wan_v4.auto"/>

  51. <param name="apply-candidate-acl" value="any_v4.auto"/>

  52. <param name="timer-name" value="soft"/>

  53. </profile>

  54. </profiles>

  55. </configuration>

为用户号码配置verto支持

修改directory/default.xml,在<params>和</params>中添加如下:

  1. <param name="jsonrpc-allowed-methods" value="verto"/>

  2. <param name="jsonrpc-allowed-event-channels" value="demo,conference,presence"/>

每个用户的xml配置文件中conf/directory/default/1000.xml,修改如下:

  1. <user id="1001">

  2. <params>

  3. <param name="password" value="$${default_password}"/>

  4. <param name="vm-password" value="1001"/>

  5. <param name="verto-context" value="public"/>

  6. <param name="verto-dialplan" value="XML"/>

  7. </params>

如需使用会议功能,请修改会议配置文件conf/autoload_configs/conference.conf.xml

在<profiles>和</profile>中检查conference-flags项目,确保其中包含livearray-sync和livearray-json-status

拨号计划配置例如:

  1. <extension name="HTML5 Verto">

  2. <condition field="destination_number" expression="^(10[0-9][0-9])$">

  3. <action application="export" data="dialed_extension=$1"/>

  4. <action application="set" data="call_timeout=30"/>

  5. <action application="bridge" data="${verto_contact ${dialed_extension}@${dialed_domain}}"/>

  6. </condition>

  7. </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模块相关推荐

  1. freeswitch verto communicator客户端

    概述 我们在web客户端使用sip协议时用的比较多的是sipml5库和jssip库. 但是sip协议比较重,又复杂,所以freeswitch内部就自定义了一个verto协议,方便在web页面上使用音视 ...

  2. html制作手机预览效果,新移动端Html5方式预览报表插件

    2. Html5报表制作及手机效果 2.1 手机页面大小 制作手机上的报表与PC端报表制作过程是一样的,为了让用户制作出适合手机尺寸的报表,在模板>>移动端属性地方,勾选设置为手机模板画布 ...

  3. FreeSWITCH mod_cti模块 结合 fail2ban 实现封堵恶意IP(SIP安全,防攻击)

    原文链接 http://www.ddrj.com/callcenter/fail2ban.html 介绍 运行在公网的FreeSWITCH服务器,每天都会接收到很多恶意的呼叫请求和注册请求,尝试盗打电 ...

  4. 方式四:修改模块导入段来拦截API

    一个模块的导入段包含一组DLL,导入段还包含一个符号表,其中列出了该模块从各DLL中导入的符号, 当该模块调用一个导入函数的时候,线程实际上会先从模块的导入表中得到相应的导入函数的地址,然后再跳转到那 ...

  5. 用python操作浏览器的三种方式_python的webbrowser模块支持对浏览器进行一些操作...

    python 的 webbrowser 模块支持对浏览器进行一些操作 主要有以下三个方法: webbrowser.open(url, new=0, autoraise=True) webbrowser ...

  6. html5读取umd,JS通用模块模式 UMD

    历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...

  7. 【HTML-5】小米耳机产品模块

    1. 以下为效果图 2.以下为源代码 <!DOCTYPE html> <html lang="en"><head><meta charse ...

  8. FreeSwitch Sofia模块加载过程

         模块加载入口函数mod_sofia_load(),首先一系列switch_event_reserve_subclass()调用,注册事件类型.然后调用switch_queue_create( ...

  9. html5文件io,html5plus io模块resolveLocalFileSystemURL 异步操作的问题

    我有个方法是相册里多选图片,遍历多选的图片,判断图片的大小,如果超过500k就对图片进行压缩,但是读取图片信息的方法是异步的,导致最后我收集到图片的数组数据会丢失图片,我觉得是异步的问题导致,不知道大 ...

  10. freeswitch模块之event_socket

    这是我之前整理的关于freeswitch mod_event_socket的相关内容,这里记录下,也方便我以后查阅. mod_event_socket以socket的形式,对外提供控制FS一种途径, ...

最新文章

  1. WEB客户端和服务器
  2. 网络分析系统_MetagenoNets:在线宏基因组网络分析实操教程
  3. 算法----------字符串相乘(Java 版本)
  4. vue拖动改变模板_可视化拖拽 UI 布局之拖拽篇
  5. 《SolidWorks 2016中文版机械设计从入门到精通》——1.10 范例
  6. Delphi中拖动无边框窗口的5种方法
  7. java 同步 变量,在java中的对象上同步,然后更改同步的变量的值
  8. nuxt webpack配置css,基于nuxt通过webpack配置ant-Design-vue的主题切换配置
  9. cocos2d-x的CCSequence与CCRepeatForever的混用
  10. tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
  11. ArduinoUNO实战-第二十二章-红外遥控实验
  12. CSS绘制渐变黑白背景栏
  13. 社保能找公司代缴吗?小心问题找上门
  14. 【项目实战】Java从单体到微服务打造房产销售平台(一) - 整体概述
  15. 华为2288hv5服务器安装ESXI 6.7(一):远程访问服务器管理口
  16. 百万CT网上卖,东软医疗这样推动行业阳光采购
  17. 【转】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
  18. 网站服务器费用是什么,建网站费用都包含什么
  19. 高薪程序员面试题精讲系列34之List、Set、Map可不可以存空值?
  20. BRD、MRD 和 PRD 之间的区别--学习记录

热门文章

  1. 如何JOPtionPane的showConfirmDialog对话框button设置监视器
  2. Python 面向对象编程(一)
  3. opc客户端_通过OPC接口将TOP Server与Proficy iFix配合使用(上)
  4. python实例变量命名规则_python变量命名规则
  5. 管理软raid磁盘队列
  6. 如何用Python打造你的第一个Slack Bot
  7. php支持的协议与封装协议
  8. Node.js 学习笔记 - 学习《深入浅出Node.js》-朴灵
  9. 清除浮动的七种方式方法(实例代码讲解)
  10. SQLLDR载数加速,优化参数