[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解码传入,是否可以?
答案 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中切换到相同,以便可以从调用中删除转码服务。