1. SIP INFO携带DTMF信号
在RFC 2976 (The SIP INFO Method) 1.1节提到了(见红字)
1.1 Example Uses
The following are a few of the potential uses of the INFO message:
- Carrying mid-call PSTN signaling messages between PSTN
gateways.
- Carrying DTMF digits generated during a SIP session.
- Carrying wireless signal strength information in support of
wireless mobility applications.
- Carrying account balance information.
RFC说明了SIP INFO可以携带DTMF信息。
但从RFC里却没找到相关SIP INFO里携带DTMF信息的规范。
参考:http://www.voip-info.org/wiki/view/SIP+Info+DTMF
提到了两种SIP INFO DTMF消息体的格式, content-type application/dtmf-relay和content-type application/dtmf
文章最后提到了
Note: dtmf-relay or dtmf are not yet IANA registered application mime types
这说明这两种方式并不是已经规范的。
这两种消息体格式应该是来自Cisco自定义的
参见:http://www.cisco.com/en/US/docs/ios/12_2t/12_2t11/feature/guide/ftinfo.html
目前,此种方法还在研究讨论当中,有专家认为其并不适用,主要缺陷是因为SIP控制信令和媒体传输(RTP)是分开传输,很容易造成DTMF信号和媒体包不同步。简单举个例子,在 Voice Mail应用中,用户根据提示音输入一个DTMF信号,随后开始留言。Server是在接受到该DTMF信号后开始保存用户的留言。然而由于DTMF信号是通过SIP信令来传输的,而媒体流是通过RTP来传输的,有可能用户留言的RTP包先到,而该DTMF信号的INFO消息延迟,导致Server不保存用户的语音留言直至接收到INFO消息。
2. 在RTP媒体传输中携带DTMF信号
该方法是将DTMF信号和媒体流一样,用RTP包来传输,因而没有DTMF信号和媒体流不同步的问题,使用H323信令的VOIP就是采用该种方法,相对来说比较成熟。
而其中又分in-band和out-of-band(RFC2833)两种,即我们所说的带内和带外:
Ø in-band
概念:In-band signaling(带内信令),又被称为劫比特信令,是一种信令类型。在该信令中,元数据和控制信息可以在相同的数据通道中被发送。例如,每个64 kbps通道中的8 kbps来实现广域网同步和信令,那么,剩余的56 kbps会用于用户数据的传输处理。T1通道线路包含一个或一个以上的交换通道,并且交换56线路使用带内信令。
In-band DTMF是指直接将DTMF的音频数字信号不经任何处理直接打成RTP包在IP网中传输。其中可能和用户的语音媒体流混合(mix)在一起传输。程序要获知哪个包有DTMF信号,是什么DTMF信号,必须实时检查每个RTP包里面的媒体流数据,分析它的频域。
Ø out-of-band
Out-of-Band DTMF是DTMF信号用专门的RTP包进行标识,在RTP包的头域中就可得知该包是DTMF包,并且知道是什么DTMF信号。RFC2833专门对此有定义。
参考:
http://www.52rd.com/blog/Detail_RD.Blog_francy_6051.html
http://blog.chinaunix.net/u1/46940/showart_496869.html
http://www.voip-info.org/wiki/view/SIP+DTMF+Signalling