mod_conference ESL控制一(原理)
本文介绍通过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控制一(原理)的更多相关文章
- mod_conference ESL控制三(程序)
第一篇描述了mod_conference控制原理,第二篇描述了conference相关事件,接下来对esl内联程序做简要说明. 由于event-socket采用TCP协议,因此需要一个线程与frees ...
- mod_conference ESL控制二(事件)
根据上篇所述功能需求,esl需要处理以下几类事件: ESL_EVENT_CHANNEL_* #channel相关事件,用户判断参会者是否应答.计费 DTMF事件 #识别参会者按键,根据按键进行操作( ...
- ElasticSearch之 控制相关度原理讲解
控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...
- License控制实现原理(20140808)
近期须要做一个License控制的实现,做了一个设计,设计图例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVjX2Zlbmc=/font/5 ...
- Kinect v2控制鼠标原理分析和源码
https://blog.csdn.net/baolinq/article/details/54381284 此程序为利用Kinect v2实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那 ...
- Apache Ranger对HDFS的访问权限控制的原理分析(一)
介绍 Aapche Ranger是以插件的形式集成到HDFS中,由Ranger Admin管理访问策略,Ranger插件定期轮询Admin更新策略到本地,并根据策略信息进行用户访问权限的判定.Rang ...
- Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理
首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...
- ORA-00214: control file 控制文件版本不一致
故障现象:今日学习oracle控制文件移动和修改,发现本机安装oracle数据库启动时只使用了一个控制文件.如下:SQL> select * from V$controlfile; STATUS ...
- ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
一 矩阵键盘控制蜂鸣器原理: 1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响. 1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响. 1.3 ...
随机推荐
- 深度解析vuex
1.什么是vuex? vuex 是一个专为 Vue.js 应用程序开发的状态管理模式(通俗一点的说Vuex就是存储数据的工具,类似于cookie.sessionStorage.localStorage ...
- angular-material(一)
1.引入文件(angular-material.css.angular.min.js.angular-animate.js.angular-aria.min.js.angular-material.j ...
- 【CentOS&Core】CentOS7下安装.NET Core SDK 2.1
1.导入rpm源 sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm 2.更 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 扩展行显示细节
数据网格(datagrid)可以改变它的视图(view)来显示不同的效果.使用详细视图,数据网格(datagrid)可以在数据行的左边显示展开按钮("+" 或者 "-&q ...
- 实现mypwd&mybash&myod&读者写者
目录: 一.mypwd 二.mybash 三.myod 四.读者.写者 一.实现mypwd 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试m ...
- Python requests代理
self.ip=requests.get('http:ip获取') self.ip=(self.ip.text).replace('\r','').replace('\n','') print('IP ...
- element-ui <el-input> 注册blur事件
<template> <div class="demo"> <el-input placeholder="注册blur事件" v- ...
- LoadRunner遇到的错误及解决方法
1.返回的报文太长: intweb_set_max_html_param_len(const char * length); intweb_set_max_html_param_len(") ...
- QChart绘制折线区域
效果图: 代码: // 创建折线上点的序列 QLineSeries *splineSeries = new QLineSeries(); //QSplineSeries *splineSeries = ...
- STL 小白学习(2) string
#include <iostream> using namespace std; #include <string> //初始化操作 void test01() { //初始化 ...