写一个 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 支持哪些组合呢?
-
l,loop,循环播放
-
m,mute ,在以前通话的基础上叠加 wav 文件
-
rw, lega & legb 听到同一个 wav 文件
-
f,first, 设置成第一个 media bug,估计很少有人用
测试过下面的组合:
-
lm 循环播放,在 lega 上执行 dispace,lega & legb 互相可以听到,lega 听到 legb的同时 还能听到 wav 文件, 但 legb 听不到 wav
-
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,可以查到手册的
全文完
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_56167818/article/details/144600836
转载请注明:SuperIT » FreeSWITCH 异步播放 wav 文件