SIP编解码器协商

时间:2014-10-04 10:33:07

标签: sip

[Offer]

      v=0
      o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com
      s=
      c=IN IP4 host.atlanta.example.com
      t=0 0
      m=audio 49170 RTP/AVP 0 8 97
      a=rtpmap:0 PCMU/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:97 iLBC/8000
      m=video 51372 RTP/AVP 31 32
      a=rtpmap:31 H261/90000
      a=rtpmap:32 MPV/90000


[Answer]

  v=0
  o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com
  s=
  c=IN IP4 host.biloxi.example.com
  t=0 0
  m=audio 49172 RTP/AVP 0 8
  a=rtpmap:0 PCMU/8000
  a=rtpmap:8 PCMA/8000
  m=video 0 RTP/AVP 31
  a=rtpmap:31 H261/90000

我发送INVITE有3个音频支持的编解码器,因此我收到2个符合我设置的编解码器。 PCMU和PCMA。

我最终应该使用哪种编解码器来避免另一方的转码?我相信我可以简单地查看RTP数据包的有效负载来确定传入流的编解码器。但是,我不清楚应该使用哪个编解码器来编码传出流?首先从名单?列表中的任何一个?或者用于传入流的相同编解码器

如果我使用PCMA编码传出流并使用PCMU解码传入,是否可以?

3 个答案:

答案 0 :(得分:3)

我不赞同Liviu和Rajesh .. 您应该随时准备接收两台(PCMU和PCMA)。 (如果远端想要,他们可以交替)。你已经建立并接受了两种编解码器。我会认为你们也同意了这一点。

如果您只想拥有一个编解码器;你必须只使用你想要使用的那个重新邀请。 (参见RFC 4317第2.2节)的“second-Answer”。

在“现实世界”中,因为呼叫的双方都能够使用所提供的编解码器的“Either”并同意,所以允许选择第一个。但如果远端选择使用它,你也应该允许第二个。我不认为你提供的。然而;仅使用一个编解码器重新邀请,将确保只使用该编解码器。

答案 1 :(得分:2)

SDP答案清楚地确定了以下内容:

  • 用于传出流的编解码器
  • 用于传入流的编解码器

您应该在“m =”行中查找第一个编解码器,因为“a =”行可能会混淆。在我们的例子中,决定的编解码器是0(PCMU)

答案 2 :(得分:2)

借用之前的用户答案我只是想添加一些内容。

我没有遇到SDP规范中的一行,它指定编解码器的顺序是优先级/首选项顺序。但在大多数实施中,我发现情况就是这样。

因此,在这种情况下,通常0 [PCMU]是终点开始发送媒体的内容以及UAC应该选择的内容。如果UAC决定进行8 [PCMA],因为没有来自UAS的数据包,这可能导致需要对呼叫的任一侧进行转码/评级服务。

BTW,因为答案被接受了,所以它确实显示了UAS能够处理同一端口上的任一编解码器。

其他一些选项是检查第一个数据包并决定编解码器,从这些中的任何一个开始,然后在后续的Re-INVITE中切换到相同,以便可以从调用中删除转码服务。