在Freeswitch中停止播放。

我有一些用 Lua 编写的代码,它会回答一个电话,在执行一系列操作后将电话桥接到一个新的线路上。

这些操作需要几秒钟到几分钟的时间。

为了保持客户端,我需要播放声音,但问题是呼叫桥接后播放仍在继续。

具体的问题是,如何停止从播放中调用的声音?

我的代码像这样:

session:answer()
session:execute("playback", '/some/file.wav')
.
.
.
local connectionString = '{bypass_media=true,origination_caller_id_number=555,destination_number=646}'
connectionString = connectionString .. 'sofia/external/192.168.0.1@1000'
session:execute('bridge', connectionString)
点赞
用户1461066
用户1461066

我有一个类似的任务,通过启动一个新的脚本来解决了这个问题。当收到出站触发时,我发送 uuid_break 到入站触发,让通道桥接在一起。这是用 Perl 完成的,但 Lua 应该非常相似:https://github.com/xlab1/freeswitch_secretary_bug(脚本在 scripts 目录中)。

mod_commands文档中:

uuid_break

终止发送到通道的媒体。例如,如果一个音频文件正在播放到一个通道,发出 uuid_break 将中止该媒体并移动到拨号计划,脚本或控制呼叫的任何其他内容。

用法uuid_break <uuid> [all]

如果使用了 all 标志,则所有等待播放到通道的音频文件/提示等都将停止并从队列中删除,否则只会停止当前正在播放的媒体。

但总的来说,通过ESL实现这些场景要容易得多:你的程序可以异步地通过ESL处理多个通道,并轻松执行所有所需的播放和媒体终止。在这里,我用 Golang 制作一个简单的原型来通过 ESL 实现类似的场景:https://github.com/xlab1/go-fs-secretary-prototype (在这里,我使用同步出站 ESL socket,但在异步入站模式下实现也不难)。

希望这有所帮助 :)

2015-05-07 07:13:59