标签:sip
SIP通常有三种支持DTMF的方式。
一种是带外(out of band),采用SIP的INFO消息。在这种情况下,DTMF数字如0,1,3等在SIP的INFO消息里携带。
一种是带内(in band),就是通过RTP中的Codec,例如G.711。SDP中Payload Type或者Codec的定义见RFC3551。
不是所有的Codec都能够携带DTMF。比如G.729,因为压缩得厉害,就不能够携带DTMF。所以RFC2833(注:RFC4733对RFC2833有更新)定义了一种专门的Payload Type来传递DTMF信号。从SIP的角度看RFC2833定义的方式也是属于带内,因为它是在RTP流里面传而不是在信令里面传。但从RTP的角度看,他属于一种特殊的Payload Type,这种类型定义为“telephone-event”。(Payload Type和Codec我认为是等价的,一回事,不知对不对。)
RFC3551定义了96-127的Payload Type是Dynamic的。就是说这个范围内的数字本身没有定义Codec或Payload Type。
下面是截取的SIP消息中的SDP Body中的Payload Type部分。其中8和101代表的是两种Payload Type。8是静态的类型,代表”PCMA/8000”。101在96-127之间,是动态类型。需要直到后面的telephone-event才知道具体的Payload Type。
m=audio 2332 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
按惯例101代表telephone-event,但只是惯例。如下面消息,把101换成96在逻辑上和上面的消息是等价的。
m=audio 2332 RTP/AVP 8 96
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-15
关于SIP的SDP Offer/Answer模型,参见RFC6337。在RFC4317中也有SIP的SDP Offer/Answer例子。
标签:sip
原文地址:http://blog.csdn.net/xuhx/article/details/44177355