协议: DTMF相关FAQ

最近工作中需要一些关于多媒体会议相关协议的知识,这里作一个笔记,以便以后查看。下面的知识来于网络,本人做了一个整理。原文请参考 文献链接。


Q. What is DTMF ?

A. 双音多频信号(Dual-Tone Multi-Frequency, DTMF),电话系统中电话机交换机之间的一种用户信令,通常用于发送被叫号码。在使用双音多频信号之前,电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。脉冲拨号需要电信局中的操作员手工完成长途接续。双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。

  双音多频的拨号键盘是4×4的矩阵,每一行代表一个频,每一列代表一个频。每按一个键就发送一个频和频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。

双音多频键盘
  1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D

注意:ABCD四个字母于现代电话已不用。

特殊音频

事件 低频 高频
忙音 480 Hz 620 Hz
回铃音(美及英式) 440 Hz 480 Hz
拨号音(美及英式) 350 Hz 440 Hz


Q. 当程序需要产生一个DTMF音频数字信号时,可以读取已经录制好的文件,但如何动态生成DTMF音频信号?

A. DTMF信号的原理是两个不同频率的正弦波叠加。

简单的生成正弦波的公式:sample=sin(n*2*PI*f/samplerate)
n:采样序数,由0开始递增
f:正弦波的频率
samplerate:采样频率
sample:序数n时的得出的采样值
 
如果要生成一个采样频率是8000hz,采样位是8bit的DTMF信号,则公式:
sample(n) = 128 + 63*sin(n*2*pi*f1/8000) + 63*sin(n*2*pi*f2/8000)
f1和f2分别是该DTMF信号的两个正弦波频率
其中128 = 256/2, 63 = 128 /2 – 1
同样地,如果要生成16bit的DTMF信号,则公式:
sample(n) = 32768 + 16383*sin(n*2*pi*f1/8000) + 16383*sin(n*2*pi*f2/8000)
 
计算DTMF信号是一个耗费资源的过程,你可以通过不同途径去优化你的代码,最简单的是预先计算好2*pi*f1和2*pi*f2的值,减少CPU的计算时间。
 
关于DTMF信号的时间间隔,CCITT对DTMF信号规定的指标是,传送/接收率为每秒10个数字,即每个数字100ms。代表数字的音频信号必须持续至少45ms,但不超过55ms。100ms内其他时间为静音,以便区别连续的两个按键信号。


Q. DTMF的传输方式:Info, In Band, Out of Band(RFC2833) ?

A. 

1, 用SIP信令的INFO方法携带DTMF信号。 该种方法还在研究讨论当中,有专家认为其并不适用,主要缺陷是因为SIP控制信令和媒体传输(RTP)是分开传输,很容易造成DTMF信号和媒体包不同步。 在 Voice Mail应用中,用户根据提示音输入一个DTMF信号,随后开始留言。Server是在接受到该DTMF信号后开始保存用户的留言。然而由于DTMF信号是通过SIP信令来传输的,而媒体流是通过RTP来传输的,有可能用户留言的RTP包先到,而该DTMF信号的INFO消息延迟,导致Server不保存用户的语音留言直至接受到INFO消息。
2, 将DTMF信号和媒体流用RTP包来传输,因而没有DTMF信号和媒体流不同步的问题,使用H323信令的VOIP就是采用该种方法,相对来说比较成熟。 而其中又分In band和Out of band(RFC2833)两种。
In Band DTMF
In Band DTMF是指直接将DTMF的音频数字信号不经任何处理直接打成RTP包在IP网中传输。其中可能和用户的语音媒体流混合(mix)在一起传输。程序要获知哪个包有DTMF信号,是什么DTMF信号,必须实时检查每个RTP包里面的媒体流数据,分析它的频域。
Out of Band DTMF(RFC 2833)
Out of Band DTMF是DTMF信号用专门的RTP包进行标识,在RTP包的头域中就可得知该包是DTMF包,并且知道是什么DTMF信号。RFC2833专门对此有定义。
Q. RFC2833如何传输DTMF?
A.RTP 2833: RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals. 
RTP的负载格式如下:
0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     event     |E|R| volume    |          duration             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

与DTMF相关的在telephone-event负载格式中的命名事件包括:
                     Event  encoding (decimal)
                     _________________________
                     0--9                0--9
                     *                     10
                     #                     11
                     A--D              12--15
                     Flash                 16

                     Table 1: DTMF named events
拨打911后的RTP数据包为:
0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V=2|P|X|  CC   |M|     PT      |       sequence number         |
   | 2 |0|0|   0   |0|     96      |              28               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           timestamp                           |
   |                             11200                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           synchronization source (SSRC) identifier            |
   |                            0x5234a8                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|   block PT  |     timestamp offset      |   block length    |
   |1|     97      |            11200          |         4         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|   block PT  |     timestamp offset      |   block length    |
   |1|     97      |   11200 - 6400 = 4800     |         4         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|   Block PT  |
   |0|     97      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     digit     |E R| volume    |          duration             |
   |       9       |1 0|     7     |             1600              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     digit     |E R| volume    |          duration             |
   |       1       |1 0|    10     |             2000              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     digit     |E R| volume    |          duration             |
   |       1       |0 0|    20     |              400              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          Figure 2: Example RTP packet after dialing "911"

Q. 带内信令和带外信令

A. 在很久很久以前(long long ago),那时候人们还处于模拟通信和机械式交换机的时代(纵横或者步进),那时候不存在独立的信令网,交换机之间的“语言交流(信令)”和语音信号在一条传输通道上跑。这就是带内信令。后来发展了,交换机之间的“语言交流(信令)”和语音信号的传输分别走不同的传输通道,建立起独立的信令网,这样信令信号走信令网,语音走语音的传输通道,两者分道扬镳,这就是带外信令!

带内信令是指信号的频率在话音频率范围之内(0.3~3.4kHz)。带内信号是在话音通道内传递的。
带外信令,又叫共路信令,是一种采用在信息传输频率/信道之外的频率/信道传输信令技术。在带内信令可能受到各种网络问题影响的情况下,带外信令经常被用于传输控制命令以报告相关的错误信息。


参考文献:

1,  http://zh.wikipedia.org/wiki/DTMF

2,  http://blog.csdn.net/kukumouse/article/details/2270279

3,  http://www.ietf.org/rfc/rfc2833.txt





你可能感兴趣的:(Network)