DTMF采用RFC2833进行带内传输的实现

摘要:     本文主要说明采用 RFC2833 标准进行 DTMF 传送的方法和格式。
关键字: RFC2833,RTP DTMF
 
一. IP 电话传送 DTMF 的方式
       DTMF 就是双音多频,我们日常生活中拨打电话的过程中经常会用到,如拨打用户的分机号码,输入帐号和密码等。而随着 IP 电话的大量使用如何实现传送 DTMF 成为 IP 电话中的一个技术问题。
目前传送 DTMF 信号普遍有两种方式:带内传送和带外传送。
其中带外传送主要通过将 DTMF 消息封装到协议中进行传送,如 H323 协议中可以通过 Q931 H245 进行传送 DTMF
而带内传输主要有两种:透明传送和 RFC2833 方式。所谓透明传送就是将 DTMF 音作为语音一起打包到 RTP 中进行发送。由于网络丢包的影响,有时会造成 DTMF 信号丢失,而且 DTMF 音混合在语音包中,容易产生偏差,造成信号失真。所以目前普遍采用的是 RFC2833 方式,就是将 DTMF 数字按照一个的规则和格式组成一个数据包,然后封装到 RTP 中发送。接收端接收后进行解析,再还原成相应的 DTMF 信号,这种方式的优点是对丢包的容错性强以及识别差错率低。
 
.RTP
       在介绍 RFC2833 前,先来了解一下 RTP Real Time Protocal ),该协议可参见 RFC1889 RTP 协议是 IP 电话中以及 NGN 中最经典的协议。无论采用 H323 H248 MGCP 还是 SIP ,这些都属于信令层的协议,他们之间进行互通、交换其最终目的是为了实现媒体流的收发。而所有的媒体流都是采用 RTP 协议,无论是视频,语音还是图象,包括本文所提到的 DTMF 都是建立在 RTP 的基础上的。
RTP 协议用以传送实时数据。 RTP 协议通常运行在 UDP 层之上,二者共同完成运输层的功能。 UDP 提供复用及校验和服务,也就是通过分配不同的端口号传送多个 RTP 流。协议规定, RTP 流使用偶数( 2n )端口号,相应的 RTCP 流使用相邻的奇数( 2n+1 )端口号。因此,应用进程应在一对端口上接收 RTP 数据和 RTCP 控制数据,同时向另一对端口上接收 RTP 数据和 RTCP 控制数据。
 
       RTP 分组由 RTP 头部和净荷数据组成; RTP 分组由 UDP 包来进行传输,通常一个 UDP 包仅含一个 RTP 分组,若采用一定的封装方法,也可以包含多个 RTP 分组;其中的 RTP 净荷就是 RTP 传送的语音数据。 RTP 分组的头部的格式如表 1
 
0-1
2
3
4-7
8
9-15
16-31
V
P
X
CC
M
PT
序号
时戳
同步源( SSRC )标识
分信源( CSRC )标识( 0~15 个)
 
1 RTP 分组头部格式
 
       RTP 分组头部的各字段含义为:
 
1 V RTP 版本号。为“ 10 ”。
2 P :填充指示位。
       P 为“ 1 ”时表示分组结尾含有 1 个或多个填充字节。
3 X :扩展指示位。
       X 为“ 1 ”时,则表示固定头部后还有一个扩展头部,这种情况较复杂,很少使用。
4 CC CSRC 计数。
       指示固定头部后的 CSRC 的个数
5 M
       由应用文档解释,通常不用。
6 PT :净荷类型
       表示 RTP 分组的净荷类型。我们常用的有:
¨          0 ”:     G.711 μ
¨          8 ”:     G.711A
¨          4 ”:     G.723.1
¨          18 ”:   G.729
¨          96 ”: RFC2833
7 .序号:
       序号顾名思义就是表示 RTP 分组的次序。初值为随机数,每发送一个增加 1 。可供接收方检测分组丢失和恢复分组次序。
8 .时戳:
       表示 RTP 分组第一个字节的取样时刻。其初值为随机数,每个采用周期加 1 。如果每次传送 20ms 的数据,由于音频的采样频率为 8000Hz ,即每 20ms 160 次采样,则每传送 20ms 的数据,时戳增加 160
9 SSRC :同步源标识( Synchronous Source
       表示信号的同步源,其值应随机选择,以保证同一个 RTP 会话中任意两个同步源的 SSRC 标识不同。
10 CSRC :分信源标识( Contributing Source
       CSRC 标识由混合器插入,其值就是组成复合信号的各个分信号的 SSRC 标识,用以标识各个组成分信号的信源。 RTP 分组的头部最多可以包含 15 CSRC 标识,其数目由 CC 字段指明。
 
三. RFC2833
1 .标准格式
RFC2833(RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals) IETF 制定的,它规定了传送 DTMF 数字以及其他电话音和信号的标准。
0-7
8
9
10-15
16-31
event 
E
R
volume
 duration
 
2 RFC2833 净荷格式
2 给出 RFC2833 的标准格式
events: 事件号, 8 位,用于说明本数据包的事件。 RFC2833 除了传送 DTMF 信号外还能传送传真,调制解调器, MF 信号等。本文只关注 DTMF 信号,有关 DTMF 的事件看见表 2
Event
encoding ( 十进制 )
0―9
0--9
* 
10
# 
11
A―D
12―15
Flash
16
2DTMF 的事件
volume: 音量, 6 位,用于说明 DTMF 信号的音频 功率级 ,范围从 (0~ -63dbm) 。有效的 DTMF 范围是从 0 -36 dBm0 ;低于 -55 dBm0 则必须丢弃。
duration :数字信号的宽度, 16 位,以时戳单元表示。这样,事件从 RTP 时间戳表示的瞬间开始,并一直持续到该参数表示的长度。事件可以已经结束也可以没有结束。以 8000 赫兹
取样来说,本字段最长可以表示 8 秒。
E :结束位 ,1 位,若设置为 1 表明数据包中含有事件的结束。因此上述的 duration 参数即测定了事件的完整宽度。
R :本字段为以后使用而保留。发送方必须将它设为 0 ,接收端则应忽略它。
 
2 .举例
 
3 Sniffer 抓包截图
3 是采用 Sniffer 软件所捕获的数据包,从上面可以看到 RTP 数据为: 80 60 03 8e 7d 8b 6a d5 5a 12 02 80 05 f0 。我们将该报数据按照格式还原如表 3
 
0-1
2
3
4-7
8
9-15
16-31
V
P
X
CC
M
PT
序号
2
0
0
0
0
96=0x60
910  (03 8e)
时戳
2106288853 (7d 8b 6a d5)
同步源( SSRC )标识
5a 12 02 80
Event 
E
R
Volume
 Duration
05
1
1
0
 











3 DTMF ‘5’ 的数据格式
在表 3 中净荷类型为 96 ,这是 RFC2833 中规定的,在实际情况下可以自己定义类型,只要通信双方能够确认即可。
对于同一个 DTMF 信号,其时戳是相同的,这样接收方可以通过判断时戳来剔除冗余信息。
 
3. 安全性
 
参考资料:
 
1.  RFC1889 RTP: A Transport Protocol for Real-Time Applications
2.  RFC2833 RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals

你可能感兴趣的:(职场,休闲,DTMF,RFC2833)