freeswitch检测信号音,包括回铃音、忙音、故障音

最近项目有相关回铃音检测需要,网上找了一圈,各种信息参差不齐,最后也算弄成了。这里直接给出实操教程。

用到的模块是mod_spandsp,默认编译时会预装的,之前检测DTMF的文章里也有用到这个模块。

conf/autoload_configs/spandsp.conf.xml的descriptors节点下面增加中国信号音的相关配置

<!-- China -->
    <descriptor name="cn">
        <tone name="标准回铃音">
            <element freq1="450" freq2="0" min="900" max="1100"/>
            <element freq1="0" freq2="0" min="900" max="4100"/>
	    <element freq1="450" freq2="0" min="900" max="1100"/>
            <element freq1="0" freq2="0" min="900" max="4100"/>
        </tone>
        <tone name="标准忙音1">
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="300" max="400"/>
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="300" max="400"/>
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="300" max="400"/>
         </tone>
	<tone name="标准忙音2">
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="250" max="350"/>
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="250" max="350"/>
            <element freq1="450" freq2="0" min="300" max="400"/>
            <element freq1="0" freq2="0" min="250" max="350"/>
         </tone>
	<tone name="三短一长错误音">
            <element freq1="450" freq2="0" min="50" max="150"/>
            <element freq1="0" freq2="0" min="50" max="150"/>
            <element freq1="450" freq2="0" min="50" max="150"/>
            <element freq1="0" freq2="0" min="50" max="150"/>
            <element freq1="450" freq2="0" min="50" max="150"/>
            <element freq1="0" freq2="0" min="50" max="150"/>
            <element freq1="450" freq2="0" min="300" max="500"/>
            <element freq1="0" freq2="0" min="300" max="500"/>
         </tone>
    </descriptor>

 

450是中国信号音频率,min和 max 和持续时间的最小和最大,可根据实际情况增加更多的顺序,最后一定要以静音结束,不然会一直循环报告信号事件

PS:descriptors节点名后面加上 debug-level="2" 可开启信号音检测详情,可根据详情调整或新增新情况

一般收到媒体事件(CHANNEL_PROGRESS_MEDIA)时,就可以开启检测了

API方式: spandsp_start_tone_detect uuid cn 

diaplan方式:bridge里面增加前置参数 {execute_on_media=spandsp_start_tone_detect cn}

 

一般通道应答后,就可以关掉了,节省资源

API方式:spandsp_stop_tone_detect uuid 

diaplan方式:bridge里面增加前置参数{execute_on_answer=spandsp_stop_tone_detect}

当检测到设置的各种tone时,控制台下会输出

DETECTED TONE: TONE_NAME

TONE_NAME就是配置里面相应的NAME(标准回铃音、标准忙音1等等)

相应的产生DETECTED_TONE事件,里面的Detected-Tone变量值就是TONE_NAME

愉快的去玩耍吧。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用FreeSWITCH的示例,演示如何通过频流播放声: 1. 首先,确保您已经安装并配置了FreeSWITCH。 2. 在FreeSWITCH的配置文件(通常是`vars.xml`)中,找到以下设置并取消注释: ```xml <!-- <X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMU,PCMA,GSM"/> --> ``` 这将启用GSM编解码器,以便我们可以使用GSM格式的频流。 3. 创建一个名为`stream_play.xml`的XML文件,并将以下内容添加到文件中: ```xml <document> <section name="dialplan"> <context name="default"> <extension name="play_stream"> <condition field="destination_number" expression="^play_stream$"> <action application="answer"/> <action application="sleep" data="1000"/> <action application="playback" data="silence_stream://2000"/> <action application="playback" data="http://example.com/audio/stream.gsm"/> <action application="hangup"/> </condition> </extension> </context> </section> </document> ``` 这个XML文件定义了一个名为`play_stream`的呼叫路由,当目标号码是`play_stream`时,将执行一系列动作来播放频流。 4. 将您的频文件(以GSM格式)上传到一个可通过HTTP访问的服务器,并将其URL替换为上述XML文件中的`http://example.com/audio/stream.gsm`。 5. 将`stream_play.xml`文件保存到FreeSWITCH的`dialplan`目录中。 6. 使用命令行工具(如fs_cli)启动FreeSWITCH,并使用以下命令加载新的呼叫路由: ``` reloadxml ``` 7. 现在,您可以拨打号码`play_stream`,FreeSWITCH将接听呼叫并播放频流。 请确保替换频流的URL为有效的URL,并确保您的网络设置正确以便访问该URL。此示例仅供参考,实际使用可能需要根据您的需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值