在 Freeswitch 中停止播放

Gab*_*iel 4 audio lua playback 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)
Run Code Online (Sandbox Code Playgroud)

Sta*_*gin 5

我有一个类似的任务,并通过为出站段启动一个新脚本来解决它。当出站支路得到应答时,我发送uuid_break到入站支路,并让通道桥接在一起。它是用 Perl 完成的,但 Lua 应该非常相似: https://github.com/xlab1/freeswitch_secretary_bug (脚本位于 script 目录中)。

文档mod_commands

uuid_break

中断发送到频道的媒体。例如,如果正在向某个频道播放音频文件,则发出uuid_break将中断媒体,并且呼叫将在拨号方案、脚本或控制呼叫的任何内容中继续进行。

用法uuid_break <uuid> [all]

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

但总的来说,通过 ESL 实现此类场景要容易得多:您的程序可以通过 ESL 异步处理多个通道,并轻松执行所有需要的播放和中断。这里我用Golang做了一个简单的原型,通过ESL实现类似的场景: https: //github.com/xlab1/go-fs-secretary-prototype(这里我使用了同步出站ESL套接字,但它不应该太在异步入站模式下也很难实现)。

我希望这有帮助 :)