sip中的DTMF




SIP DTMF

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(注:RFC4733RFC2833有更新)定義了一種專門的Payload Type來傳遞DTMF信號。從SIP的角度看RFC2833定義的方式也是屬於帶內,因爲它是在RTP流裏面傳而不是在信令裏面傳。但從RTP的角度看,他屬於一種特殊的Payload Type,這種類型定義爲“telephone-event”。RTP的角度看這種方式可能是帶外,因爲是在語音或視頻Codec之外傳DTMF。(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
  • 1
  • 2
  • 3
  • 4

按慣例101代表telephone-event,但只是慣例,最初大概是因爲Cisco的設備用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
  • 1
  • 2
  • 3
  • 4

關於SIP的SDP Offer/Answer模型,參見RFC6337。在RFC4317中也有SIP的SDP Offer/Answer例子。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章