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)

  • 相关阅读:
    POJ1769 Minimizing maximizer(DP + 线段树)
    ZOJ3201 Tree of Tree(树形DP)
    POJ3613 Cow Relays(矩阵快速幂)
    POJ3635 Full Tank?(DP + Dijkstra)
    ZOJ3195 Design the city(LCA)
    POJ3368 Frequent values(RMQ线段树)
    POJ3686 The Windy's(最小费用最大流)
    HDU4871 Shortest-path tree(最短路径树 + 树的点分治)
    POJ3013 Big Christmas Tree(最短路径树)
    Gym100685G Gadget Hackwrench(倍增LCA)
  • 原文地址:https://www.cnblogs.com/yoyotl/p/7054428.html
Copyright © 2011-2022 走看看