首页 > 其他分享 >freeswitch两个DTMF转换接口的区别

freeswitch两个DTMF转换接口的区别

时间:2023-05-11 17:45:38浏览次数:35  
标签:inband dtmf 接口 DTMF start freeswitch 2833

 

概述

freeswitch支持三种模式的DTMF传输方式,分别时inband、INFO、2833。

在传统的PSTN网络中,所有的DTMF码都是inband模式,所以VOIP网络和PSTN网络对接中,需要将DTMF码做格式转换,通常是2833和inband之间的转换。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

inband到2833的两个接口

freeswitch中有两个inband到2833格式的转换接口,分别是“start_dtmf”和“spandsp_start_dtmf”。

两个接口的功能是一样的,都是检测inband中的DTMF按键波形。

<action application="start_dtmf" />

<action application="spandsp_start_dtmf"/>

 

fs官方的描述中已经有明确说明,“start_dtmf”接口为老版本接口,尽量使用“spandsp_start_dtmf”来实现业务。

那么,这两个接口有什么区别呢。

start_dtmf测试

配置dialplan拨号计划如下。

<include>

       <context name="out2in">

              <extension name="sbc-out2in" continue="true">

                     <condition field="destination_number" expression="^(\d+)$">

                            <action application="export" data="nolocal:execute_on_media=start_dtmf" />

                            <action application="bridge" data="{sip_invite_call_id=${sip_call_id}

                                 }sofia/external5066/sip:${destination_number}@10.55.55.138:5090"/>

                     </condition>

              </extension>

       </context>

</include>

  

 

从截图中,可以看出。

start_dtmf接口有识别出inband中的DTMF码,并转换为2833到A路。

但是红框中的媒体流中的DTMF波形并没有任何变化。

A路收到的媒体流中,既有inband的DTMF波形,也有2833的DTMF码。

spandsp_start_dtmf测试

配置dialplan拨号计划如下。

<include>

       <context name="out2in">

              <extension name="sbc-out2in" continue="true">

                     <condition field="destination_number" expression="^(\d+)$">

                            <action application="export" data="min_dup_digit_spacing_ms=40"/>

                            <action application="export" data="spandsp_dtmf_rx_threshold=-42"/>

                            <action application="export" data="spandsp_dtmf_rx_twist=8"/>

                            <action application="export" data="spandsp_dtmf_rx_reverse_twist=6"/>

                            <action application="export" data="spandsp_dtmf_rx_filter_dialtone=true"/>

                            <action application="export" data="nolocal:execute_on_media=spandsp_start_dtmf" />

                            <action application="bridge" data="{sip_invite_call_id=${sip_call_id}

                                 }sofia/external5066/sip:${destination_number}@10.55.55.138:5090"/>

                     </condition>

              </extension>

       </context>

</include>

  

 

从截图中,可以看出。

spandsp_start_dtmf接口有识别出inband中的DTMF码,并转换为2833到A路。

同时,红框中的媒体流中的DTMF波形被过滤掉了大部分,遗留部分的波形大概有30ms左右,当A路设备(如TG)会同时检测2833和inband时,仍然有概率会发生重码的问题。

A路收到的媒体流中,有2833的DTMF码,和少量inband的DTMF码波形。

总结

freeswitch的“spandsp_start_dtmf”接口,表现更好,功能性更完整。

freeswitch的DTMF从inband转换为2833的功能仍然有缺陷,表现为inband中的波形过滤不完全,会造成后续节点识别DTMF时重码的问题。

后续我们再研究如何解决该问题。

 

空空如常

求真得真

标签:inband,dtmf,接口,DTMF,start,freeswitch,2833
From: https://www.cnblogs.com/qiuzhendezhen/p/17391747.html

相关文章

  • 接口文档
    目录一、接口文档使用coreapi自动生成接口文档步骤代码两点说明一、接口文档在前后端分离的web应用模式下,我们编写后端只需要编写接口,前端根据我们的接口编写各式各样的前端界面。作为后端,我们十分清除自己编写的各种接口的作用,以及接口的要求,但是前端人员并不知道,因此我们需......
  • SpringBoot 接口并发限制(Semaphore)
    可以使用JMeter辅助测试 https://blog.csdn.net/weixin_45014379/article/details/124190381@RestController@RequestMapping({"/Test"})publicclasstest{Loggerlogger=LoggerFactory.getLogger(this.getClass());//使用Semaphore并发限制3个超过阻......
  • 接口测试:Eolink Apikit 和 Postman 哪个更好用?
    很多做服务端开发的同学,应该基本都用过Postman来测试接口,虽然Postman能支撑日常工作,但是总感觉还是少了点什么,比如需要Swagger来维护接口文档,需要人肉发送接口变更通知。如今,国产的接口管理工具做得越来越好了,比如,EolinkApikit,一站式API协作平台。EolinkApikit和Post......
  • springboot集成springSwagger生成接口文档
    1.首先引入pom.xml依赖<!--SwaggerAPI文档--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version><exclusions><exclus......
  • 记录一次接口性能优化
    查询接口性能优化两个查询接口,涉及四个不同的表,其中有一个表数据量较大;一开始编码实现的方法,调用接口发现耗时特别长,三四秒钟:使用SpringStopWatch分析代码运行时间,找到是哪里导致整个接口时间需要这么久的:StopWatchstopWatch=newStopWatch();//开始时间stopWatch.star......
  • JDK8新特性(二)--- Option\Stream\函数式接口
    OptionalOptional是一个没有子类的工具类,Optional是一个可以为null的容器对象。它的作用主要就是为了解决避免Null检查,防止NullPointerException。//常用方法Optional.of(Tt):创建一个Optional实例Optional.empty():创建一个空的Optional实例Optional.ofNullable(T......
  • mapper接口开发--条件,为什么是接口、参数
    三个必要条件_mapper.java和_mapper.xml需要在同一个目录这就是为什么看到resources有同样的包xml中的namespace为mapper.java的全限定路径mapper.xml的id和mapper.java的方法名字、参数类型、返回值一致最后通过sqlSession.getMapper(*mapper.class)得到接口,这样就可以......
  • Vue2项目中,在编译打包后通过读取配置文件,任意修改接口地址
    可以按照以下步骤进行操作: 1.在项目根目录下创建一个名为`config`的文件夹,并在该文件夹下创建一个名为`index.js`的文件,用来存放配置文件,如: ```javascriptmodule.exports={  apiRoot:'http://api.example.com'}``` 这里定义了一个`apiRoot`属性,用来存放接口地......
  • FreeSWITCH部署与功能配置
    一.FreeSWITCH服务部署1.wgethttp://www.freeswitch.org.cn/Makefile&&makeinstall2.cdfreeswitch3.运行./bootstrap.sh(作用:初始化环境)4.执行./configure(主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,但并不是所有的tar包都是源代......
  • FreeSWITCH安装教程
    最近学习freeswitch,网络上搜罗了大把的安装教程,基本都有坑。然而,对于解决坑的过程是坑坑有惊喜。在此记录一下安装及采坑的过程。如有问题,欢迎大家留言探讨~~~1、基础环境。操作系统:CentOSLinuxrelease7.9.2009位数:LinuxSSUAiServer3.10.0-1160.el7.x86_64#1SMPMo......