2012年(1)
分类: C/C++
2012-07-02 22:38:54
目前传送DTMF信号普遍有三种方式:
通信协议传输(SIP信令)
用SIP信令的INFO方法携带DTMF信号。
该方法是用SIP信令的INFO方法来明文定义来代表DTMF信号。主要缺陷是因为SIP控制信令和媒体传输(RTP)是分开传输,很容易造成DTMF信号和媒体包不同步。
举个例子,在Voice Mail应用中,用户根据提示音输入一个DTMF信号,随后开始留言。Server是在接受到该DTMF信号后开始保存用户的留言。然而由于DTMF信号是通过SIP信令来传输的,而媒体流是通过RTP来传输的,有可能用户留言的RTP包先到,而该DTMF信号的INFO消息延迟,导致Server不保存用户的语音留言直至接受到INFO消息。
B. 通过RTP的数据内容传输(Inband)
In Band是指直接将DTMF的音频数字信号不经任何处理直接打成RTP包在IP网中传输。其中可能和用户的语音媒体流混合在一起传输。程序要获知哪个包有DTMF信号,是什么DTMF信号,必须实时检查每个RTP包里面的媒体流数据,分析它的频域。主要缺陷是由于网络丢包的影响,有时会造成DTMF信号丢失,而且DTMF音混合在语音包中,容易产生偏差,造成信号失真。
C. 通过rfc2833的规则和格式包传输
RFC2833是DTMF信号按照一个的规则和格式组成一个数据包,有专门的RTP包进行标识,在RTP包的头域中就可得知该包是DTMF包,并且知道是什么DTMF信号。RFC2833专门对此有定义。该方法是将DTMF信号和媒体流一样,用RTP包来传输,因而没有DTMF信号和媒体流不同步的问题,接收端接收后进行解析,再还原成相应的DTMF信号,对丢包的容错性强以及识别差错率低,相对来说比较成熟。