今天,我们来看dialplan/default/0000_local_extensioins.xml。
这一段dialplan跟我们在《FreeSWITCH权威指南》中的Loacal_Extensions类似,只不过简化了许多,而且,增加了一点点视频配置。
<condition field="destination_number" expression="^(10[01][0-9])$">
正则表达式,匹配被叫号码1000~1019。
<action application="set" data="hangup_after_bridge=true"/>
如果bridge成功,则正常挂机。注意bridge是阻塞的,它会一直持续到b-leg挂机。
<action application="set" data="continue_on_fail=true"/>
如果呼叫b-leg失败,则继续。
<action application="export" data="hold_music=local_stream://video"/>
设置保持音乐为local_stream://video。我们最后再讲。
<action application="bridge" data="user/
bridge被叫号码。如果bridge成功(a-leg与b-leg正常通话且b-leg挂机),则由于我们前面设置了hangup_after_bridge=true,所以,到此,a-leg也挂机了。否则(bleg未接听或空号或忙等情况),则继续。
<action application="answer"/>
FreeSWITCH应答。
<action application="sleep" data="1000"/>
暂停一秒,以等待RTP建立。一般情况下RTP建立是很快的,但在跟PSTN通信时,由于经过很多网关或网络环境比较复杂,或有srtp等需要加密的情况下,RTP建立需要一些时间。
<action application="bridge" data="loopback/app=voicemail:default
进入voicemail。这时使用了loopback这种Endpoint。loopback可以将一个App变成一个Session。关于这个,我们今天就不多讲了。
回过头来看hold_music=local_stream://video
local_stream是一个File Interface,它是一个不间断的「流」。以前,仅支持音频,现在,也支持视频了。如果你读过《FreeSWITCH权威指南》,就知道流在定义可以在autoload_configs/local_stream.conf.xml中找到。它的内容如下:
<directory name="video" path="$${sounds_dir}/music/video">
<param name="rate" value="48000"/>
<param name="shuffle" value="true"/>
<param name="channels" value="2"/>
<param name="interval" value="10"/>
<param name="timer-name" value="soft"/>
</directory>
从上面的配置中可以看出,它定义了FreeSWITCH安装目录下的music/video目录。在该模块启动时,它会找出该目录下的视频文件,并生成一个「流」。一旦有地方需要这个「流」时,便可以直接从流中读取。一个流可以被很多Channel同时用,有效的利用了资源。
由于在上面的Dialplan中我们通过hold_music使用该流,所以,当且仅当通话的双方有一方按下话机上的HOLD按键进入HOLD状态时,对方才能看到「流」里的视频。
想不想试一把?
我们讨论的例子都是FreeSWITCH的testing配置,如果你不知道testing是什么,点击「阅读原文」查看。
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!