具有DTMF rtpmap / fmtp不匹配的SDP提供/应答模型

时间:2018-04-16 01:11:36

标签: sip sdp dtmf

想象一下提供SDP,它有一行“m”,包含编码器8和101,用于标记为sendrecv的DMTF:

m = audio 35904 RTP/AVP 8 101
a = rtpmap:8 PCMA/8000
a = rtpmap:101 telephone-event/8000
a = fmtp:101 0-15
a = sendrecv

得到答案SDP,其中一行“m”包含编解码器8但120表示DTMF,同样标记为sendrecv:

m = audio 1235 RTP/AVP 8 120
a = rtpmap:8 PCMA/8000
a = rtpmap:120 telephone-event/8000
a = fmtp:101 0-15
a = sendrecv 

来自RFC 3264

  

对于答案中标记为sendrecv的流,必须使用“m =”行   包含至少一个回答者愿意发送和编写的编解码器   从报价中列出的那些人那里收到。流可以   指示其他媒体格式,未在相应的列表中列出   在报价中流,回答者愿意发送或   收到(当然,它目前无法发送,   因为它没有列在报价中。)

在RFC3264的上面部分,证明在答案SDP中发送不同的DTMF fmtp(120到101)符合RFC3264,因为编解码器8(G711a)与商品SDP匹配。

DTMF信号是否正常或是否可能出现DTMF问题?

任何反馈意见。

1 个答案:

答案 0 :(得分:3)

一般情况下:

RTP有效负载类型编号0-95标识静态媒体编码。例如。有效载荷类型8表示时钟频率为8000 Hz(RFC3551)的PCMA音频。因此,此描述不必(但应该)包含在SDP提供/答案的媒体格式描述中,使用“a = rtpmap:”和“a = fmtp:”属性(RFC4566 )。

有效载荷类型编号96-127是动态的。这些可用于协商未包含在静态列表中的编码。使用其中一个数字时,必须在媒体格式描述中包含编码规范,以指定确切的编码参数。

两个谈判方都可以选择自己的动态有效载荷类型号来表示相同的媒体编码,这不必是相同的数字。当一方已经将特定动态有效载荷类型号分配给另一个编码时,这可能很有用。在您的示例中,一方在m-line中使用101,另一方使用120,但这些数字代表相同的媒体编码(请参阅“a = rtpmap:”行)。每一方告诉对方'当您使用编码X发送RTP时,您必须在RTP数据包标头中包含有效负载类型编号Y.

有效负载类型编号包含在RTP数据包报头(RFC 3550

的PT字段中

在这种情况下

答案中的“a = fmtp:”属性指定101作为有效负载类型编号而不是120.这意味着它不适用于电话事件有效负载,并且没有关于支持哪些DTMF事件的信息( RFC 4733)。我认为这是一个实现错误,fmtp属性适用于电话事件有效载荷。

这表明您应该期待DTMF问题。但它也可以正常工作。试一试......