收号傻瓜书(rfc2833)

来源:互联网 发布:java构造方法调用顺序 编辑:程序博客网 时间:2024/04/29 06:33
 

 

1话机历史

1876年贝尔发明第一部电话机

第一代话机,手摇式拨打电话,通过摇转手柄接通转接中心,由中心接线员负责转接,摇手柄主要是用于发电;

 

信令:拨号者和中心接线员的对话指示

 

第二代话机,脉冲拨号,不同脉冲序列代表不同号码,例如1个脉冲表是1,9个脉冲表示9,实际上即为0,1脉冲序列;

信令:0,1脉冲序列

 

第三代话机,双音多频信号(DTMF)拨号,这个时候已经没有接线员,由电话机与交换机通过DTMF信号协商。

 

信令:DTMF信号,也由贝尔试验室发明,信号如下图,每个按键由一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字,交换机只要检测到这两个频率即可判定为拨号。

 

 

2 带内收号和带外收号

带外outband传输号码,顾名思义,即不使用媒体传输通道传输,而是使用其他数据通道(如信令方式收号),详细描述见wiki定义。在当前H323域和SIP域的带外信令号码分别为放在UserInputIndication消息和INFO消息,示例分别见下图:

 

带内in-band传输号码即通过,媒体通道传输号码,IP域中目前有DTMF号码和2833。DTMF号码即把终端产生的语音封装成RTP语音包,作为语音包和语音一起传输,见下图为号码123的DTMF音。但是,采用这种方式可能由于网络抖动或丢包,可能造成解出的语音(DTMF音)失真,最终造成多检号或少检号。

而2833方式传输号码,通过一定规则对DTMF号码进行标识,并且和语音区别开,检号系统不需要解成语音来判别号码,同时2833方式通过这些规则(如一个号码发送多次)可以传输可靠性(对丢包、抖动网络也可较好保证号码被正确识别),降低误检率。

 

3 2833号码传输

 

2833方式传输号码,即通过参数化DTMF号码,通过各个参数结合传输规则(2833、RTP)进行传输。如下图,对一个DTMF按键音来说,需要起始时间(终端什么时候按键)、时间持续长度(按下去时间多长),电平(音量大小),此外还需要有一参数记录什么时候按键结束,按的是什么号码。

由于要检号系统要区分IP包是语音包还是号码包,因此还需要有参数标识是号码包。

 

2833承载在RTP包静荷中,分别见RTP协议定义头和2833协议头格式如下,各个字段详细定义点协议。

rfc3550(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         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                           timestamp                           |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |           synchronization source (SSRC) identifier            |

   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

   |            contributing source (CSRC) identifiers             |

   |                             ....                              |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

 

rfc2833

    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             |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

以上表红字有2833号码传输关键字段,对比前面描述

PT,PAYLOAD TYPE净荷类型,标识净荷类型,对2833号码而言,即表示这个包是2833号码包,取值在信令协商是确定;

Timestamp,时戳,如前描述,用于标识按键时间;

Event,2833事件号,用于说明本数据包的事件(这里用于标识按键号码),例如,0-9对应的事件号即为0-9;

E,事件结束标识位,如前描述用于表达这个按键结束;

Volume,音量,6位,参照前面,用于说明DTMF信号的音频功率级,范围从(0~ -63dbm),2833协议定有效的DTMF范围是从0 到-36 dBm0;低于-55 dBm0则必须丢弃;

Duration,事件持续时间,单位为采样点数,即按键开始时间到当前统计总的采样点数,以终端编码器采样率8Kh为例,duaration=160,时间跨度即为20ms(8khz即1ms8个采样点,160个点即20ms)。Duration字段长度为16位,即最多表示时间为8s。

 

规则&注意:

a. 2833包的发送规则是什么?

DTMF ON ----à DTMF OFF

一个号码的2833包序列必须是按键到放开按键,开始包到结束包的时戳必须一样,duration必须递增,知道该号码的结束包。

b. 如何判别两个2833包是不同时刻的号码?

通过时戳timstamp,时戳不同即号码按键时刻不同,即便event描述的号码相同,也是不同时刻的号码。

c. 如何判别一次号码结束?

E字段即为结束表示位

 

d. duration为何必须是递增?

每当终端侧发出某个号码的2833包,其时间必然是递增,因此duration统计的时间值也必然是递增。

 

e. 一个号码传递的2833包数量有没有限制?为何一个号码要传递多次?

避免网络丢包一个最有效的方法就是,多发几次包。

 

d. 网络抖动到一定程度,必然导致乱序,系统如何实现才能保证包乱序不多收号?

对包乱序,即包序列的时戳非递增(按RTP要求必须递增),如果单纯以时戳不一样作为判断是否新号码的标准,可能导致多检号码。一个有效的办法就是把比当前时戳小的包丢弃,一定程度上解决乱序问题。

 

 

 

 

原创粉丝点击