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使转换服务可以从通话中删除。