• VOIP DTMF 笔记


    DTMF定义:由高频音和低频音的两个正弦波合成表示数字按键(0~9 * # A B C D)。

    VOIP中 检测DTMF通常有三种方法,sip info, inband, out band(rfc2833), 此外,在3gpp ims规范中 对dtmf的要求已经采用最新的rfc 4733 取代rfc 2833.

     

    1. sip info

         为带外检测方式,通过SIP信令通道传输DTMF数据。没有统一的实现标准,通过SIP INFO 方法 发送,包中的signal字段识别DTMF按键。注意当DTMF为“*”时不同的标准实现对应的signal=*或signal=10。SIP INFO的好处就是不影响RTP数据包的传输,但可能会造成不同步。

    2.out band (rfc2833)

        为带内检测方式,通过RTP传输,由特殊的rtp PayloadType即TeleponeEvent来标示RFC2833数据包。同一个DTMF按键通常会对应多个RTP包,这些RTP数据包的时间戳均相同,此可以作为识别同一个按键的判断依据,最后一包RTP数据包的end标志置1表示DTMF数据结束。另外,很多SIP UA 包括IAD都提供TeleponeEvent的设置功能如3CX Phone,Billion-IAD,ZTE-IAD等默认的TeleponeEvent都为101,但可以人为修改,这时要求在进行RFC2833 DTMF检测之前需事先获取SDP协商的TeleponeEvent参数。

    3. in band

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

    从使用情况看,一般使用rfc283 即out band 方式,一般软交换服务器这几种方式都支持,我所知道的asterisk 支持 sip info , rfc 2833及inband 方式,但是rfc2833 兼容性最好, 由于Ims 里对dtfm 这块采用了rfc 47233 而取代了rfc2833, 所以在ims客户端与软交换对接时可能存在兼容性问题。

  • 相关阅读:
    范仁义js课程---54、匿名函数在框架中的应用
    js中的匿名函数
    【转】使用VisualSVN Server搭建SVN服务器
    浅析Java中CountDownLatch用法
    【转】Android平台下利用zxing实现二维码开发
    【转】Android应用开发性能优化完全分析
    Android自由行之走进zxing,轻松实现二维码扫描
    【转】Java Thread.join()详解
    【转】Spring websocket 使用
    spring4使用websocket
  • 原文地址:https://www.cnblogs.com/einyboy/p/2779922.html
Copyright © 2020-2023  润新知