根据上篇所述功能需求,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控制二(事件)的更多相关文章

  1. mod_conference ESL控制三(程序)

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

  2. mod_conference ESL控制一(原理)

    本文介绍通过freeswitch mod_conference 的配置和APP,以及如何通过这些事件实现会议控制. 需求 ESL内联,发起会议.加人.踢人.静音.恢复静音.申请发言.结束会议等基础功能 ...

  3. HTML 事件(二) 事件的注册与注销

    本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...

  4. Java中的流程控制(二)

    关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...

  5. GSAP JS基础教程--动画的控制及事件

    好多天没有写无博文啦,今天无聊就再写一下! 今天要讲的是TweenLite的一些事件以及,TweenLite动画的控制,TweenMax类似,请自行参考官方文档:http://api.greensoc ...

  6. JS控制的事件

    鼠标点击弹出提示事件: <input type="button" value="鼠标点击弹出提示" onclick="DianJi()" ...

  7. Database(Mysql)发版控制二

    author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...

  8. bootstrap-table填坑之旅<二>事件

    接着研究bootstrap-table... ... 这一篇研究bootstrap-table的事件及回调函数 先上一个demo HTML <div class="alert aler ...

  9. JQuery知识快览之二—事件

    事件是脚本语言的核心.本文将为大家介绍JQuery支持的一些事件和如何自定义事件 JQuery内置事件 1.Document加载事件 JQuery提供了ready,load,unload三个Docum ...

随机推荐

  1. IDEA设置(含永久破解IDEA)

    永久破解IDEA(很多license服务器都是非永久性的,太麻烦了) https://www.cnblogs.com/iathanasy/p/9469280.html,亲测. 在我们为 IDEA 等编 ...

  2. 【Alpha】Scrum Meeting 6

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第6次会议在4月10日22:00由PM在一公寓三楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当 ...

  3. 安装win10 和win中的一些杂项问题

    reg中的 policies是政策/策略, 主要是指 控制面板中的一些控制项目, 其中 explorer是 控制面板的 显示项目... DWORD值是一个32位(4个字节:即双字)长度的数值, 是数字 ...

  4. [译]RabbitMQ教程C#版 - "Hello World"

    先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难, ...

  5. zookeeper之 zkServer.sh命令、zkCli.sh命令、四字命令

    一.zkServer.sh 1.查看 zkServer.sh 帮助信息[root@bigdata05 bin]# ./zkServer.sh helpZooKeeper JMX enabled by ...

  6. 如何插入谷歌地图并获取javascript api 秘钥--Google Maps API error: MissingKeyMapError

    参考:https://blog.csdn.net/klsstt/article/details/51744866 Google Maps API error: MissingKeyMapError h ...

  7. [Hibernate] inner Join和 left Join

    @Test public void test11(){ Session ss=HibernateUtil.getSession(); //根据员工名称(SCOTT)找到和他所在的部门的其他员工的信息 ...

  8. C# 实现邮件收取发送功能

    .Net调用QQ邮箱发送邮件   话说网上发送邮件的代码很多,但是我由于不细心,导致拿别人的代码发送邮件老是失败,今天就说说几个要注意的地方吧!!! ? 1 2 3 4 5 6 7 8 9 10 11 ...

  9. Vue项目在真机测试

    一:修改config 找到config文件夹下的index.js文件并修改为: module.exports = { dev: { host: '0.0.0.0' // 原为: hotst: 'loc ...

  10. Hadoop 2.7.4 HDFS+YRAN HA部署

    实验环境 主机名称 IP地址 角色 统一安装目录 统一安装用户 sht-sgmhadoopnn-01 172.16.101.55 namenode,resourcemanager /usr/local ...