本文介绍通过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. UI自动化(六)js

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  2. mybatis插入数据并返回主键(oracle)

    通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据 @insert("insert into t_user (id,name) values (suser.nextva ...

  3. Learning-Python【29】:网络编程之粘包

    粘包问题 上一篇博客遗留了一个问题,在接收的最大字节数设置为 1024 时,当接收的结果大于1024,再执行下一条命令时还是会返回上一条命令未执行完成的结果.这就是粘包问题. 因为TCP协议又叫流式协 ...

  4. Mac OS X 清除DNS缓存

    参考: Flushing your DNS cache in Mac OS X and Linux Mac OS X 清除DNS缓存 根据Mac OS X操作系统的版本选择以下命令: Mac OS X ...

  5. Yarn 踩坑 : Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    原因:yarn-site.xml 中,yarn.application.classpath 未配置 解决:其中 hadoop 版本对应更改 <property> <name>y ...

  6. 移动Web UI库(H5框架)有哪些,看这里就够了

    前言 今年上半年,项目组在项目开发的过程中建立了一套风格统一,组件丰富完善,命名统一规范的PC端UI库,适用于做大型站点,该UI库也是应用到了整个平台的项目中,在各个项目组中进行推广.因为项目的保密性 ...

  7. Linux wc -l 统计文件行数存在的问题

    1.使用这种方式效率较低,而且不注意可能出现错误 find  . -name "*.pc" |xargs wc -l 直接查看 total 不是正确的值. 原因: 这种方式存在一个 ...

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

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

  9. memory.h

    1.功能:提供内存操作函数 2.函数: extern void *memchr(const void *buffer, int ch, size_t count); extern void *memc ...

  10. python学习(五)