mod_conference
FreeSWITCH支持多人电话会议,该功能是由mod_conference
模块实现的。
mod_conference
是实现了一个conference
App和API。在默认的配置中,直接拨打3000就可以进入一个会议。
从下列Dialplan可以看出,它使用conference
App将来话送入一个会议:
<extension name="nb_conferences">
<condition field="destination_number" expression="^(30\d{2})$">
<action application="answer"/>
<action application="conference" data="$1-${domain_name}@default"/>
</condition>
</extension>
其中,conference
App的参数是一个会议的名称和一个会议的Profile,它们之间是以@
分隔的。domain_name
一般是一个IP地址,所以,假设我们呼叫的是3000
,FreeSWITCH的IP地址是192.168.1.2
的话,将上述参数进行变量替换后,结果是:3000-192.168.1.2@default
。
@
前面的就是会议的名称,后面的default
是会议的一个Profile。
会议的Profile定义了会议的一些特性,如各种提示音等。
为了简单起见,我们以3000
作为会议的名称,修改Dialplan如下:
<action application="conference" data=“3000@default"/>
这个,拨打3000就可以进入3000
这个会议(室)。通过conference
API命令,可以对会议执行一系列的操作,如下列命令将全部人员静音
conference 3000 mute all
取消静音:
conference 3000 unmute all
其中,会议中的每一路参与的电话称作一个成员(member),以member_id
来标识,使用下列命令可以列出会议中所有的成员,进而知道成员的member_id
:
conference 3000 list
得到了成员的member_id后,便可以对成员进行单独操作,如以下命令仅对member_id
为2
的成员静音:
conference 3000 mute 2
或将它踢出会议
conference 3000 kick 2
当然,该命令的参数还有很多,具体的可输入不带参数的conference
命令查看帮助。
conference
除语音会议外,FreeSWITCH也支持视频会议。1.4版以前的FreeSWITCH不支持视频的转码,因而仅支持主持人式的视频会议。具体的讲,所有与会成员中会有一个成员会获得一个video floor,持有该floor的人的视频会广播到其它所有成员的终端上,即,所有成员都会看到该成员的视频。在默认情况下,floor的持有和转换是通过声音激励的方式实现的,即,通过一点的算法,根据当前声音的能量值来决定谁持有floor,一般来说是当前说话的成员持有该floor,即谁说话看谁。
自1.6版开始,FreeSWITCH支持视频转码和视频会议,我们以后再讲。