是否可以在多个对等连接中使用相同的SDP?
我正在使用WebRTC构建视频会议。我们的想法是,呼叫者使用一些信令机制,通过SDP(每个用户使用相同的SDP)向所有其他用户发送广播消息,然后用户将使用他们的SDP进行响应。
当用户收到某人的SDP时,他会用它来设置远程描述,如下所示:
connection = new RTCPeerConnection()
desc = RTCSessionDescription({sdp: SDP, type: "offer"});
connection = setRemoteDescription(desc);
以下是SDP示例:
v=0
o=- 6843023960119608301 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio
a=msid-semantic: WMS
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:q36dZRVoaS4ixPYP
a=ice-pwd:K5yAm4A+zGoIKIgsX9o4VgDA
a=ice-options:google-ice
a=fingerprint:sha-256 62:3E:99:2F:FF:D4:58:7C:F0:A1:02:3F:09:2B:D1:F3:71:D7:F6:59:62:12:E4:1B:4A:68:01:4C:43:E0:D1:75
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=recvonly
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_32 inline:Tdz5Z3KHB3Xosqr5D53WZfi7Zndz+932X3H46Qvf
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:NJO4XhhHUgiJRCfyYzDgajkCJAF/9BX8QeU+FKQs
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
我在这里看不到任何独特的东西,所以如果B和D将它用作远程描述,它会起作用吗?如果是 - 我该如何生成此SDP?我现在知道的唯一方法是使用RTCPeerConnection.createOffer
,但这将创建不需要的对等连接对象(根据我的想法,应该在收到其他用户的响应后创建对等对象)。
答案 0 :(得分:7)
不,WebRTC不是这样设计的。您需要为一个对等体创建单独的PeerConnection。
答案 1 :(得分:2)
您可以使用相同的SDP,只要它不包含候选字段! 这些候选字段绑定到本地RTP端口,该端口不可重用。
答案 2 :(得分:1)
我认为你正在尝试开发多个广播(从上图),它可以在webrtc中创建多个对等体(例如,如果你想要播放你的视频两个浏览器,你需要两个对等连接方式)
SDP:此协议包含您的浏览器信息,如公共IP,端口,编解码器和通信方式(仅音频,仅视频,数据通道等)
所以上面的信息是常见的,如果你想与其他对等体(因为你的公共IP,端口,编解码器)相同,那么它可以与你共享sdp多个对等体(注意:你为每个用户打开新的对等体)
答案 3 :(得分:0)
否,如果您找到解决此问题的方法,那将是一个非常糟糕的主意。互联网上两个端点之间的“连接”概念实际上可以分解为两点之间协商的会话。该会话可能具有对于每个“连接”都相同的字段,但是其他字段对于每个对等方都是唯一的。 TCP是通过创建基本连接会话作为其规范的一部分而开发的。 WebRTC始终通过UDP通信(即使在通过TCP隧道传输的情况下),并且 UDP没有连接的概念。 WebRTC在创建连接会话的过程中使用SDP,并且SDP发现/定义每个连接所需的所有字段。