本文介绍通过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. 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。

    问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...

  2. datetime字符串中含T

    json序列化datetime类型,返回给前端进行展示,字符串带T 例如:var time = 2018-08-08T09:07:04.767  =>  time.substr(0, 16).r ...

  3. idea下使用Git基本操作(转载)

    IDEA中Git的更新.提交.还原方法: https://blog.csdn.net/geng31/article/details/78585557 IDEA中Git的提交到GitHub http:/ ...

  4. 《温故而知新》JAVA基础三

    面向对象 现实定义: 购买手机 阐述描述配置尺寸啥的,要求能打电话,然后服务员给你拿出一款手机,你所阐述的就是类,服务员给你的就是对象 package com.xie public class Tel ...

  5. 力扣(LeetCode)482. 密钥格式化

    给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号).N 个 '-' 将字符串分成了 N+1 组.给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字##符,第一个 ...

  6. CKEditor富文本编辑器

    CKEditor 富文本即具备丰富样式格式的文本.在运营后台,运营人员需要录入课程的相关描述,可以是包含了HTML语法格式的字符串.为了快速简单的让用户能够在页面中编辑带格式的文本,我们引入富文本编辑 ...

  7. SQL SERVER 事务的使用(tran)

    sql server事务的使用是为了确保数据的一致性. 通常写法 begin tran --sql 语句1 --sql 语句2 --sql 语句3 commit tran 上面写法存在隐患,当操作(增 ...

  8. php添加pdo_mysql.so的扩展

    1. 首先进入你下载的php的安装包里找到pdo_mysql文件夹. /usr/local/php-/ext/pdo_mysql ps:有些教程说从http://pecl.php.net/这个网站上下 ...

  9. 『TensorFlow』分类问题与两种交叉熵

    关于categorical cross entropy 和 binary cross entropy的比较,差异一般体现在不同的分类(二分类.多分类等)任务目标,可以参考文章keras中两种交叉熵损失 ...

  10. 『TensorFlow』命令行参数解析

    argparse很强大,但是我们未必需要使用这么繁杂的东西,TensorFlow自己封装了一个简化版本的解析方式,实际上是对argparse的封装 脚本化调用tensorflow的标准范式: impo ...