【问题标题】:Stop a playback in Freeswitch在 Freeswitch 中停止播放
【发布时间】:2015-05-06 16:59:05
【问题描述】:

我在 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)

【问题讨论】:

    标签: audio lua playback freeswitch


    【解决方案1】:

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

    来自the mod_commands documentation

    uuid_break

    中断正在发送到频道的媒体。例如,如果一个音频 文件正在播放到频道,发出uuid_break 将 停止媒体,呼叫将在拨号方案中继续, 脚本,或任何控制调用的东西。

    用法uuid_break <uuid> [all]

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

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

    我希望这会有所帮助:)

    【讨论】:

    • 确实是正确的方向,谢谢回答
    • 这里还有例子和脚本,我忘了给这个链接github.com/voxserv
    • 对于 perl 它的 $session->execute('break');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多