【问题标题】:SIP codec negotiationSIP编解码协商
【发布时间】:2014-10-04 10:33:06
【问题描述】:
[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

我正在发送带有 3 个支持音频的编解码器的 INVITE,结果我收到了 2 个与我的设置匹配的编解码器。 PCMU 和 PCMA。

我最终应该使用哪种编解码器来避免另一端的转码?我相信我可以通过查看 RTP 数据包的有效负载来确定传入流的编解码器。但是尚不清楚我应该使用哪种编解码器来编码传出流?列表中的第一个?列表中的任何一个?或用于传入流的相同编解码器

如果我用 PCMA 编码输出流并用 PCMU 解码输入流可以吗?

【问题讨论】:

    标签: sip


    【解决方案1】:

    我不同意 Liviu 和 Rajesh.. 您应该随时准备同时接收(PCMU 和 PCMA)。 (如果远端也需要,他们可以交替使用)。您已经建立并接受了这两个编解码器。我假设您也同时确认了这两个编解码器。

    如果您只想拥有一个编解码器;您必须重新邀请您要使用的人。 (请参阅 RFC 4317 的第 2.2 节)了解“第二个答案”。

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

    【讨论】:

      【解决方案2】:

      SDP 的回答清楚地确立了以下几点:

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

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

      【讨论】:

        【解决方案3】:

        继以前的用户回答之后,我只是想添加一些东西。

        我没有遇到 SDP 规范中指定编解码器的顺序是优先级/偏好顺序的行。但在大多数实施中,我发现情况确实如此。

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

        顺便说一句,由于两个编解码器都接受了答案,因此它确实显示了 UAS 能够处理同一端口上的任一编解码器。

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

        【讨论】:

          猜你喜欢
          • 2018-03-21
          • 2015-05-19
          • 2020-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-12
          • 2010-10-07
          • 1970-01-01
          相关资源
          最近更新 更多