mod_conference ESL控制二(事件)
根据上篇所述功能需求,esl需要处理以下几类事件:
- ESL_EVENT_CHANNEL_* #channel相关事件,用户判断参会者是否应答、计费
- DTMF事件 #识别参会者按键,根据按键进行操作(静音相关)
- CUSTOM conference::maintenance #mod_conference 相关事件
这里主要介绍会议相关事件以及如何关联进行控制。
- esl订阅事件并过滤关心事件
esl_events(pHandle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_CREATE CHANNEL_ANSWER CHANNEL_HANGUP_COMPLETE DTMF CUSTOM conference::maintenance");
conference::maintenance事件
会议相关事件有以下几类(其他事件不关心,如需其他事件自行检测格式并封装)
- conference-create #会议创建,第一参会者应答后产生该事件
- add-member#加人
- floor-change#会议室状态改变
- del-member#参会者离开
- mute-member#参会者静音
- unmute-member#参会者恢复静音
- conference-destroy#会议结束
事件格式
Event-Subclass: conference%3A%3Amaintenance
Event-Name: CUSTOM
Core-UUID: 5560a1b8-a852-11e4-af5f-4d12ec2e8e2f
FreeSWITCH-Hostname: ds2
FreeSWITCH-Switchname: ds2
FreeSWITCH-IPv4: 115.29.227.76
FreeSWITCH-IPv6: %3A%3A1
Event-Date-Local: 2015-02-05%2014%3A33%3A00
Event-Date-GMT: Thu,%2005%20Feb%202015%2006%3A33%3A00%20GMT
Event-Date-Timestamp: 1423117980169214
Event-Calling-File: mod_conference.c
Event-Calling-Function: conference_thread_run
Event-Calling-Line-Number: 3049
Event-Sequence: 68603
Conference-Name: 3013-115.29.227.76
Conference-Size: 0
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: d45300f8-ad00-11e4-b446-4d12ec2e8e2f
Action: conference-create
Event-Subclass: conference%3A%3Amaintenance
Event-Name: CUSTOM
Conference-Name: 3013-115.29.227.76
Conference-Size: 1
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: d45300f8-ad00-11e4-b446-4d12ec2e8e2f
Floor: false
Video: false
Hear: true
Speak: true
Talking: false
Mute-Detect: false
Member-ID: 22
Member-Type: member
Member-Ghost: false
Energy-Level: 300
Current-Energy: 0
Action: add-member
Conference-Name: 3013-115.29.227.76
Conference-Size: 1
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: d45300f8-ad00-11e4-b446-4d12ec2e8e2f
Action: floor-change
Old-ID: none
New-ID: 22
Conference-Name: 3000
Conference-Size: 2
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: a28bcb66-ad02-11e4-b463-4d12ec2e8e2f
Floor: true
Video: false
Hear: true
Speak: false
Talking: false
Mute-Detect: false
Member-ID: 25
Member-Type: moderator
Member-Ghost: false
Energy-Level: 300
Current-Energy: 1
Action: mute-member
Conference-Name: 3000
Conference-Size: 2
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: a28bcb66-ad02-11e4-b463-4d12ec2e8e2f
Floor: true
Video: false
Hear: true
Speak: true
Talking: false
Mute-Detect: false
Member-ID: 25
Member-Type: moderator
Member-Ghost: false
Energy-Level: 300
Current-Energy: 1
Action: unmute-member
Video: false
Hear: true
Speak: true
Talking: true
Mute-Detect: false
Member-ID: 27
Member-Type: member
Member-Ghost: false
Energy-Level: 300
Current-Energy: 8
Conference-Name: 3000
Conference-Size: 1
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: a28bcb66-ad02-11e4-b463-4d12ec2e8e2f
Action: del-member
Conference-Name: 3000
Conference-Size: 0
Conference-Ghosts: 0
Conference-Profile-Name: default
Conference-Unique-ID: a28bcb66-ad02-11e4-b463-4d12ec2e8e2f
Action: conference-destroy
如上,隐藏了channel相关、event相关的键值,只保留了会议相关的属性。根据以上几个action,可以将不同的action进行封装,提取自己关心的参数。其中如果你的每一个会议都使用不同的Conference-Name,那Conference-Name可以作为关联会议的KEY值,或者使用Conference-Unique-ID。
在add-member和del-member中有Member-ID,是mod_conference命令操作参会者的参数,另外member相关的action中还携带该member的channel-uuid,与加人时指定的UUID相同,可以关联起来。
Member-Type参数显示了参会者的属性,是主持人还是普通参会者,创建会议时可以指定,如下:
conference 3000+flags{moderator} bgdial {bridge_early_media=false,ignore_early_media=true,effective_caller_id_number=02362909001}sofia/gateway/vos1/13800138000 #指定为主持人
DTMF事件
Event-Name: DTMF
Channel-Call-UUID: de747af8-ad00-11e4-b448-4d12ec2e8e2f
DTMF-Digit: 2
DTMF-Duration: 880
根据channel uuid可以识别是哪个参会者的按键,然后根据不同按键做不同操作即可。
以上,还缺少channel事件,这里不做介绍,一般情况下只关心CHANNEL_CREATE CHANNEL_ANSWER CHANNEL_HANGUP_COMPLETE三个事件即可满足基本需求。
mod_conference ESL控制二(事件)的更多相关文章
- mod_conference ESL控制三(程序)
第一篇描述了mod_conference控制原理,第二篇描述了conference相关事件,接下来对esl内联程序做简要说明. 由于event-socket采用TCP协议,因此需要一个线程与frees ...
- mod_conference ESL控制一(原理)
本文介绍通过freeswitch mod_conference 的配置和APP,以及如何通过这些事件实现会议控制. 需求 ESL内联,发起会议.加人.踢人.静音.恢复静音.申请发言.结束会议等基础功能 ...
- HTML 事件(二) 事件的注册与注销
本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...
- Java中的流程控制(二)
关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...
- GSAP JS基础教程--动画的控制及事件
好多天没有写无博文啦,今天无聊就再写一下! 今天要讲的是TweenLite的一些事件以及,TweenLite动画的控制,TweenMax类似,请自行参考官方文档:http://api.greensoc ...
- JS控制的事件
鼠标点击弹出提示事件: <input type="button" value="鼠标点击弹出提示" onclick="DianJi()" ...
- Database(Mysql)发版控制二
author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...
- bootstrap-table填坑之旅<二>事件
接着研究bootstrap-table... ... 这一篇研究bootstrap-table的事件及回调函数 先上一个demo HTML <div class="alert aler ...
- JQuery知识快览之二—事件
事件是脚本语言的核心.本文将为大家介绍JQuery支持的一些事件和如何自定义事件 JQuery内置事件 1.Document加载事件 JQuery提供了ready,load,unload三个Docum ...
随机推荐
- MySql 三大知识点,索引、锁、事务,原理分析
1.索引 索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容. 索引的优点:1. 天生排序,2. 快速查找. 索引的缺点:1. 占用空间,2. 降低更新表的速度. 注意点:小表使用全表扫描 ...
- ArchLinux 无密码Samba 配置
安装上迅雷后就必须把硬盘挂上去开个Samba,然后边下电影边看,这就是一个Nas了. 开搞! pacman -S samba 安装samba,然后进入/etc/samba/目录 vim smb.con ...
- jquery easyui的应用-1
下载地址是: www.jeasyui.com/download 当前版本是1.6.7 是由 jquery ui 扩展而来的. 像jquery ui, bootstrap, jquery easyui三 ...
- gitlab或github下fork后如何同步源的新更新内容?
两种方式: 项目 fetch 到本地,通过命令行的方式 merge 懒人方法,只用 Github ,不用命令行 1.项目 fetch 到本地,通过命令行的方式 merge 提示:跟上游仓库同步代码之前 ...
- mvc 之 学习地址
https://blog.csdn.net/mss359681091/article/details/52135861
- mysql常用的查询优化
原文链接:https://www.jb51.net/article/39221.htm 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2 ...
- 第 8 章 容器网络 - 065 - 容器在 Weave 中如何通信和隔离?
首先在host2 执行如下命令: weave launch 10.12.31.22 这里必须指定 host1 的 IP 10.12.31.22,这样 host1 和 host2 才能加入到同一个 we ...
- 《SQL 基础教程》第二章:查询基础
这一章的结构如下: SELECT 语句基础 算术运算符和比较运算符 逻辑运算符 SELECT 语句可用于查询数据,并且可以设定条件来查询具有特定值的记录.条件的设定就需要算数运算符.比较运算符和逻辑运 ...
- Spark数据分析-记录关联问题
1. 问题描述 记录关联问题(Record Linkage):有大量从一个或多个源系统来的记录,其中有些记录可能代表了相同的基础实体. 每个实体有若干个属性,比如姓名.地址.生日.我们需要根据这些属性 ...
- 【分布式搜索引擎】Elasticsearch中的基本概念
一.Elasticsearch中的基本概念 以下概念基于这个例子:存储员工数据,每个文档代表一个员工 1)索引(index) 在Elasticsearch中存储数据的行为就叫做索引(indexing ...