FreeSWITCH 异步播放 wav 文件

写一个 lua 脚本控制 FreeSWITCH Session,这个很容易,是吧

但因为某些特殊原因,需要异步播放 wav 文件,代码逻辑如下:

sesion:execute("displace_session", "welcome.wav")

while session:ready() do

        local varx = session:getVariable("varx")

        if varx == "***" then break end

        sesion:sleep(100)        

end

sesion:execute("stop_displace_session", "welcome.wav")

但实际运行起来发现根本听不到播放的声音,原因在哪里

找呀找呀,终于找到安东尼的一段话:

it doesn't work with sleep because sleep does not write any packets.

send_silence_when_idle=400

于是做了下面这个操作:

fs_cli -x 'global_setvar send_silence_when_idle=400'

再试,就 OK 了

FreeSWITCH 东西真 tm 多,但东西也真他娘的好呀!


fs_cli -x 'show application' | grep displace
displace_session,Displace File,<path> [<flags>] [+time_limit_ms],mod_dptools
stop_displace_session,Stop Displace File,<path>,mod_dptools
 

flags 支持哪些组合呢?

1.  l,loop,循环播放

2. m,mute ,在以前通话的基础上叠加 wav 文件

3. rw, lega & legb 听到同一个 wav 文件

4. f,first, 设置成第一个 media bug,估计很少有人用

测试过下面的组合:

1. lm 循环播放,在 lega 上执行 dispace,lega & legb 互相可以听到,lega 听到 legb的同时 还能听到 wav 文件, 但 legb 听不到 wav

2. lrw 循环播放,lega 和 legb 互相听不到,但都听到同一个 wav 文件

此外,用 local_stream://moh 代替 wav 文件名,没问题


说到 moh ,默认的配置是 local_stream://moh

但也可以修改,办法是 在 vars.xml 里面增加一个配置:

<X-PRE-PROCESS cmd="set" data="hold_music={loops=-1}tone_stream://v=-30;%(250,0,350);%(250,0,440)"/>

那个写法叫 TGML,可以查到手册的

全文完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值