本文介绍通过freeswitch mod_conference 的配置和APP,以及如何通过这些事件实现会议控制。

需求

ESL内联,发起会议、加人、踢人、静音、恢复静音、申请发言、结束会议等基础功能;用户加入时放欢迎音,静音、恢复静音时语言提示。

首先介绍mod_conference 相关配置

conf/autoload_configs/conference.conf.xml是mod_conference默认配置文件,以下是删减版,只用到了default profile,参会者按键部分转为DTMF事件,由ESL自行控制。

<configuration name="conference.conf" description="Audio Conference">
<advertise>
<room name="3001@$${domain}" status="FreeSWITCH"/>
</advertise>
<caller-controls>
<group name="default">
</group>
</caller-controls> <profiles>
<profile name="default">
<param name="domain" value="$${domain}"/>
<param name="rate" value="8000"/>
<param name="interval" value="20"/>
<param name="energy-level" value="300"/>
<param name="muted-sound" value="conference/ecp_mutesound.wav"/>
<param name="unmuted-sound" value="conference/ecp_unmutesound.wav"/>
<param name="caller-id-name" value="$${outbound_caller_name}"/>
<param name="caller-id-number" value="$${outbound_caller_id}"/>
<param name="comfort-noise" value="true"/>
</profile> </profiles>
</configuration>

mod_conference 基础命令

  • conference 3000  bgdial sofia/gateway/vos1/13800138000 #呼叫external/13800138000并加入到会议3000中
  • conference 3000  kick 7 #从会议3000中踢出ID=7的参会者
  • conference 3000  mute 7 #静音
  • conference 3000  tmute 7 #切换静音状态
  • conference 3000  unmute 7 #取消静音
  • conference list #列出会议以及参会者

有以上命令基本上可以完整操作一次会议了。

关于DTMF识别

由于external网关不支持RFC2833和SIP-INFO,只支持inband DTMF,因此需要显示检测DTMF

conference 3000  bgdial {bridge_early_media=false,ignore_early_media=true,dtmf_type=inband,execute_on_answer=start_dtmf}sofia/gateway/vos1/13800138000

bridge_early_media=false,ignore_early_media=true #忽略掉早媒体,否则又可能将早媒体混音到会场

dtmf_type=inband #指定DTMF类型为带内

execute_on_answer=start_dtmf #当external应答是开启DTMF识别

会场控制

重要:mod_conference不用显式创建会议,会自动将接通的一方纳入到会议中,如上当13800138000 应答后才创建会议;在控制时可能不容易控制。因此可以考虑指定参会者的UUID,方便控制,如下:

originate {pstn=true,origination_uuid=5a88ca4f-7aad-4f5a-b1cf-e731895ea2ea,bridge_early_media=false,ignore_early_media=true}user/1001 3001 #呼叫user/1001,应答后transfer到3001会议室

originate {pstn=true,origination_uuid=5a88ca4f-7aad-4f5a-b1cf-e731895ea2ea,bridge_early_media=false,ignore_early_media=true}user/1001 3013 XML default #同上,显式指定拨号计划

至此,会议室ID有了,参会者UUID有了,可以建立UUID与会议ID的对应关系,容易控制了。

mod_conference ESL控制一(原理)的更多相关文章

  1. mod_conference ESL控制三(程序)

    第一篇描述了mod_conference控制原理,第二篇描述了conference相关事件,接下来对esl内联程序做简要说明. 由于event-socket采用TCP协议,因此需要一个线程与frees ...

  2. mod_conference ESL控制二(事件)

    根据上篇所述功能需求,esl需要处理以下几类事件: ESL_EVENT_CHANNEL_*  #channel相关事件,用户判断参会者是否应答.计费 DTMF事件 #识别参会者按键,根据按键进行操作( ...

  3. ElasticSearch之 控制相关度原理讲解

    控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...

  4. License控制实现原理(20140808)

    近期须要做一个License控制的实现,做了一个设计,设计图例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVjX2Zlbmc=/font/5 ...

  5. Kinect v2控制鼠标原理分析和源码

    https://blog.csdn.net/baolinq/article/details/54381284 此程序为利用Kinect v2实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那 ...

  6. Apache Ranger对HDFS的访问权限控制的原理分析(一)

    介绍 Aapche Ranger是以插件的形式集成到HDFS中,由Ranger Admin管理访问策略,Ranger插件定期轮询Admin更新策略到本地,并根据策略信息进行用户访问权限的判定.Rang ...

  7. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...

  8. ORA-00214: control file 控制文件版本不一致

    故障现象:今日学习oracle控制文件移动和修改,发现本机安装oracle数据库启动时只使用了一个控制文件.如下:SQL> select * from V$controlfile; STATUS ...

  9. ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器

    一 矩阵键盘控制蜂鸣器原理:  1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响.  1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响.  1.3 ...

随机推荐

  1. 分析hello1项目里面的web.xml

    在example目录下的web\jsf\hello1\target\hello1\WEB-INF路径里可以找到hello1的web.xml <?xml version="1.0&quo ...

  2. Cmd Markdown 编辑阅读器

    我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想和分享知识提供更专业的工具. 您可以使用 Cmd ...

  3. 【Visual Studio 扩展工具】使用ComponentOne中的GroupDefinition和SortDefinition属性保存和还原布局

    概述 在此前的ComponentOne中,我们为C1FlexGrid(最快,最灵活的.Net数据网格控件)添加了一个非常强大的动态分组功能,这篇技术博客<将动态分组添加到.NET表格控件Flex ...

  4. android -------- MVP+DataBinding 的使用

    今天来说说MVP+DataBinding 的使用 以一个登录案例来讲解 布局:(ConstraintLayout 作为根布局) <layout> <data> <vari ...

  5. Systemd程序及相关命令

    Systemd程序及相关命令 Systemd是一款用于Linux操作系统系统管理和服务管理的工具.它向后兼容SysV init脚本,并且支持许多类似于startup系统服务的功能,比如系统快照(sna ...

  6. 移动端解决悬浮层(悬浮header、footer)会遮挡住内容的方法

    固定Footer Bootstrap框架提供了两种固定导航条的方式: ☑  .navbar-fixed-top:导航条固定在浏览器窗口顶部 ☑  .navbar-fixed-bottom:导航条固定在 ...

  7. [LeetCode]题100:Same Tree

    Given two binary trees, write a function to check if they are the same or not. Two binary trees are ...

  8. HDU4609 计数问题+FFT

    题目大意: 给出n(1e5)条线段(长度为整数,<=1e5),求任取3条线段能组成一个三角形的概率. 用cnt[i]记录长度为i的线段的个数,通过卷积可以计算出两条线段长度之和为i的方案数sum ...

  9. CSS选择器 nth-child 和 nth-of-type

    Css 3 中两个新的选择器 nth-child 和 nth-of-type 都可以选择父元素下对应的子元素,但它们到底有什么区别呢? :nth-child(n) 选择器匹配属于其父元素下的第n个子元 ...

  10. python scrapy同时执行spiders多个爬虫

    假设spiders文件夹下多个文件: name.py     name = 'name' name1.py    name = 'name1' name2.py    name = 'name2' . ...