Freeswitch : uuid_broadcast 不一致的行为

我正在使用 freeswitch 来进行呼入呼出通话。每个通话只涉及与 freeswitch 交互的一个人类用户。拨号计划由 lua 脚本定义。

在我的一些 lua 脚本中,我有时需要在后台播放音乐,同时拨号计划继续并行执行一些任务。

下面是我创建的两个函数来启动和停止音乐播放:

function START_PLAYBACK(playbackMusic)
    api:executeString("uuid_broadcast " .. session:get_uuid() .. " " .. playbackMusic)
    -- 我不得不播放一个短文件以触发 uuid_broadcast 的开始
    session:streamFile("short_blank.wav")
end

function STOP_PLAYBACK()
    --asyncAPICommand.lua 简单地将 api:executeString 与给定参数的命令调用
    --我必须从会话线程外部调用 uuid_break,否则它不起作用。
    api:executeString("luarun asyncAPICommand.lua 'uuid_break " .. session:get_uuid() .. "'")
    session:sleep(1000)
end

所以,当我需要播放音乐而继续执行 lua 脚本时,我会这样做:

START_PLAYBACK("music.wav")

-- 做一些事情 ...

STOP_PLAYBACK()

我的问题是 uuid_broadcast 的行为取决于调用的上下文。在呼出图的情况下,它与预期的功能相同。但在呼入调用中,完全相同的脚本将阻塞在 START_PLAYBACK 的 session:streamFile() 中,直到音乐播放完成。

因此,我的问题是:我应该怎么做才能使 uuid_broadcast 在呼入通话时不阻塞?还是有更好的解决方案来在后台播放音乐吗?

原文链接 https://stackoverflow.com/questions/70595248

点赞