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。SIP编解码器协商

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

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

我不同意Liviu和Rajesh .. 您应该随时准备在BOTH(PCMU和PCMA)上接收。 (如果Far End想要,他们也可以交替)。你已经建立并接受了BOTH编解码器。我会推测你也同时承认了这一点。

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

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

在SDP响应中明确规定了以下内容:

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

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

借用以前的用户答案我只是想添加一些东西。

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

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

顺便说一下,既然答案已经被编码解码器接受,它确实表明UAS能够处理同一端口上的编解码器。

一些其他选项检查第一个数据包,并决定编解码器,从任一这些,然后在随后切换到同一重新INVITE使转换服务可以从通话中删除。