zoukankan      html  css  js  c++  java
  • FreeSWITCH检测DTMF数据的方法

    一、RFC2833

    1. 介绍:
    RFC2833为带内检测方式,通过RTP传输,由特殊的rtpPayloadType即TeleponeEvent来标示RFC2833数据包。同一个DTMF按键通常会对应多个RTP包,这些RTP数据包的时间戳均相同,此可以作为识别同一个按键的判断依据,最后一包RTP数据包的end标志置1表示DTMF数据结束。
    另外,很多SIP UA默认的TeleponeEvent都为101,但可以人为修改,这时要求在进行RFC2833 DTMF检测之前需事先获取SDP协商的TeleponeEvent参数。
    2. 配置:
    这是FreeSWITCH默认的DTMF检测配置。

    二、SIPINFO

    1. 介绍:
    SIPINFO为带外检测方式,通过SIP信令通道传输DTMF数据。这种方式甚至比RFC2833更有效。但是由于SIP信令和RTP收发采用的是不同的端口,所以可能会造成收到DTMF和实际的声音不同步。
    2. 配置:
    修改profile,例如sip_profiles/internal.xml。

    <param name="dtmf-type" value="info"/>

    三、INBAND

    1. 介绍:
    INBAND为带内检测方式,而且与普通的RTP语音包混在一起传送。在进行INBAND DTMF检测时唯一的办法就是提取RTP数据包进行频谱分析,经过频谱分析得到高频和低频的频率,然后查表得到对应的按键,进行频谱分析的算法一般为Goertzel,这种算法的实现也很简单,网上有很多可以下到,但建议采用定点算法,浮点算法效率很低。
    2. 配置:
    2.1 修改profile,例如sip_profiles/internal.xml。

    <param name="dtmf-type" value="inband"/>

    2.2 在需要使用的dialplan中增加

    <action name="start_dtmf"/>

    附录

    DTMF
    全称:Dual Tone Multi Frequency(双音多频)
    定义:由高频音和低频音的两个正弦波合成表示数字按键(0~9 * # A B C D)

  • 相关阅读:
    狗蛋带仨妞【Beta】Scrum meeting 1
    实验九 团队作业5:团队项目编码与Alpha冲刺
    狗蛋带仨妞【Alpha】Scrum meeting 7
    狗蛋带仨妞【Alpha】Scrum meeting 6
    狗蛋带仨妞【Alpha】Scrum meeting 5
    狗蛋带仨妞 【Alpha】Scrum meeting 1-4
    Rosetta中准备配体的参数文件
    pymol安装
    chemshell的creation之后
    关于KIE的一点认识
  • 原文地址:https://www.cnblogs.com/yoyotl/p/7054428.html
Copyright © 2011-2022 走看看