根据上篇所述功能需求,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. js前端文件收集(一)

    1.保存cookies的文件: /** * Cookie plugin * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual license ...

  2. 【问题解决:SFL4J】启动时SLF4J报错

    问题描述 启动时报错 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Default ...

  3. MSSQL 数据库 buildindex 出错

    错误1: Executing the query "ALTER INDEX [IX_liveConfigState_Service_ServiceId_..." failed wi ...

  4. HTML5的十大新特性

    为了更好地处理今天的互联网应用,HTML5添加了很多新元素及功能,比如: 图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api拖放元素,定位,包括网页 应用程序缓存,存储,网络工作者 ...

  5. Jquery动画效果(混合)

    1.图片随滚动条滚动 代码: var menuYloc = $("#right").offset().top; $(window).scroll(function () { var ...

  6. 1.6 安全认证与授权(springboot与安全)

    引言:以下文档是学习尚硅谷关于springboot教学视频后整理而来! 一.安全 认证(Authentication):证明你是谁? 授权(Authorization):你能干什么? 参考资料: Sp ...

  7. JVM(二)之GC(转)

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

  8. java笔记 -- java简单结构代码解析及注释

    结构代码解析 public class FirstSample { public static void main(String[] args) { System.out.println(2.0-1. ...

  9. Series.str——字符串批量处理方法

    针对dataframe中的某一行(或列)想做批量字符串处理时,可采用此方法 series.str.python内置的str方法 例如: series.str.replace('A','B')   # ...

  10. haoop fs 命令

    Hadoop fs 命令详解   参考文档:https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSy ...