测试 FreeSWITCH 的 mod_loopback

发布于:2025-06-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

bgapi originate loopback/answer,park/default/inline park inline

show channels as xml

show calls as xml

有 2 个 channels

有 2 个 calls

比较有意思

在 loopback-a 是播放 wav

在 loopback-b 上可以录音

这就是回环

有什么用呢?

除了做测试,还有 niao 用

对了,官方文档是这样描述 loopback 的呼叫字符串的

loopback/<exten\>[/context[/dialplan]]

某个大神写个一篇文章,很好

《使用FreeSWITCH检测声音文件中的DTMF信息》


按照大神的提示,如下:

-- dtmf.lua

function onInputCBF(s, type, obj, arg)
    if (type == "dtmf") then
        freeswitch.consoleLog("INFO", "Got DTMF: " .. obj.digit .. " Duration: " .. obj.duration .. "\n")
         end
         return ''
end
session:answer()
session:execute("start_dtmf", "")
session:setInputCallback('onInputCBF', '')
session:streamFile("local_stream://moh")

<!--dialplan-->

<extension name="dtmf">
    <condition field="destination_number" expression="dtmf">
    <action application="answer" data=""/>
    <action application="playback" data="tone_stream://v=-2;1234567890"/>
      <action application="sleep" data="3000"/>
    </condition>
</extension>

originate loopback/dtmf &lua(dtmf.lua)

一条腿播放带内DTMF,另外一条腿识别带内DTMF

发现效果不太好,有丢码

改了下 dtmf.lua, 如下:

function onInputCBF(s, type, obj, arg)
    if (type == "dtmf") then
        freeswitch.consoleLog("INFO", "Got DTMF: " .. obj.digit .. " Duration: " .. obj.duration .. "\n")
    end
    return ''
end
session:answer()
session:execute("spandsp_start_dtmf", "")

session:setInputCallback('onInputCBF', '')
session:streamFile("local_stream://moh")


这样就没问题了,不丢一个,不多一个

本文要说的其实是 spandsp_start_dtmf 比 start_dtmf 好用

有兴趣的可以试试,如果结果不一样,一定要告诉我