lua - FreeSWITCH 中的 Lua 脚本在 bypass_media = true 时立即退出桥接
问题描述
当我将“bypass_media”设置为 true 时,如何让脚本等待网桥终止后再继续?
这个片段 -
freeswitch.consoleLog("err","session before="..tostring(session:ready()).."\n")
session:execute("set","bypass_media=true")
session:execute("bridge","sofia/gateway/carrierb/12345678")
freeswitch.consoleLog("err","session after="..tostring(session:ready()).."\n")
从音频的角度来看,它可以完美地与 bridge_media 设置为 true 或 false 一起工作,并且wireshark 跟踪显示音频通过 (false) 或端到端 (true)。
但是如果将 bypass 设置为 true,则脚本会继续运行而不会暂停,并且会话不再准备就绪(session:ready() == false)。
通道似乎进入了休眠状态,但是在桥接完成后我有家务要做,而我根本做不到。
如果我在 XML 拨号计划中进行桥接,也会发生同样的情况,立即继续导致我的内务处理提前触发。
FreeSWITCH (版本 1.6.20 git 43a9feb 2018-05-07 18:56:11Z 64bit) Lua 5.2
编辑 1 - 我可以让“api_hangup_hook=lua housekeeping.lua”工作,但是我必须传递大量变量,它会启动一个新的进程/线程/无论如何,这似乎有点矫枉过正,除非这是唯一的方法。
解决方案
我有一个解决方法,但如果有人有这个问题,我仍然希望得到答案(即如何阻止桥立即退出)。
如果我在桥之前设置这个:
session:execute("set","bypass_media=true")
session:execute("set","session_in_hangup_hook=true")
session:execute("set","api_hangup_hook=lua housekeeping.lua "..<vars>)
然后“housekeeping.lua”在桥实际终止时触发(这在脚本之后很长时间)。
在 housekeeping.lua 中,我可以这样做:
session:getVariable("billmsec")
它似乎有正确的价值观,让我可以做家务。
我的问题是在会话中使用变量的不确定性,该会话似乎已经脱离了未来某个时间点触发的脚本。
无论如何,在我找出如何在原始脚本中保持控制之前,它必须这样做。
推荐阅读
- python - 创建包含 ['a', 'bb', 'ccc', ....] 最多 26 个 'z' 的列表
- python - 如果没有进行任何更改,如何防止 Django 表单保存?
- ios - 可以使用 Xcode 11 beta 6 在 AppStore 中提交应用程序吗?
- r - 将 MMM-YY 转换为 1968 年之前的日期
- flutter - Flutter 中的 FloatingActionButton onLongPress 监听器
- python - 如何根据另一个数据框中的值更改一个数据框中的值?
- google-bigquery - BigQuery 给出不一致的结果
- jquery - Bootstrap modal pop 将成为 iframe 的顶部
- python - 在 tensorflow 的急切执行训练期间修复部分变量
- go-modules - 如何验证来自 Bash 的 go.sum 模块哈希?