Javascript 即使我们知道连接的确切路线,缓存ICE候选和sdp是否也不起作用?

Javascript 即使我们知道连接的确切路线,缓存ICE候选和sdp是否也不起作用?,javascript,webrtc,stun,turn,ice,Javascript,Webrtc,Stun,Turn,Ice,我知道在P2P和更动态的环境中,缓存ICE候选者和sdp将不是一个好的做法,因为缓存的内容可能无法应用于下一个WebRTC连接。但是,在我们确切地知道连接路线应该是怎样的情况下,网络又如何呢 更具体地说, 假设我们有一个单圈服务器(没有负载平衡,所以没有内部路由) 以及2个固定IP的对等方,他们希望不时与WebRTC连接 在这种情况下,我们确切地知道对等方的IP是什么,我们确切地知道TURN服务器的IP是什么(假设它不会改变),缓存ICE候选者(TURN)和SDP或SDP的一部分是否可以,只是为

我知道在P2P和更动态的环境中,缓存ICE候选者和sdp将不是一个好的做法,因为缓存的内容可能无法应用于下一个WebRTC连接。但是,在我们确切地知道连接路线应该是怎样的情况下,网络又如何呢

更具体地说,

  • 假设我们有一个单圈服务器(没有负载平衡,所以没有内部路由)
  • 以及2个固定IP的对等方,他们希望不时与WebRTC连接
    在这种情况下,我们确切地知道对等方的IP是什么,我们确切地知道TURN服务器的IP是什么(假设它不会改变),缓存ICE候选者(TURN)和SDP或SDP的一部分是否可以,只是为了绕过ICE候选者和SDP交换部分?

    否。提供和回答包含的不仅仅是如何连接。它们包含此连接实例的唯一指纹,因为可以在相同的两个已知IP之间建立任意数量的安全连接,甚至可以同时建立

    比较来自两个不同RTPeerConnection对象的createOffer()结果,您会发现它们有所不同。除指纹外,它们还包含本地RTPeerConnection决定通过哪些端口发送/接收单个媒体,这些端口可能会有所不同

    要使用早期缓存版本,您不仅需要告诉远程RTPeerConnection对象要使用哪些端口,还需要告诉本地端口。这显然是行不通的:

    const[pc1,pc2,pc3]=[1,2,3].map(()=>newrtpeerconnection());
    (异步()=>{
    试一试{
    [pc1,pc2].forEach(pc=>pc.createDataChannel(“虚拟”);
    pc3.ondatachannel=()=>console.log(“pc3-ondatachannel”);
    等待pc1.createOffer();
    wait pc1.setLocalDescription(wait pc2.createOffer());//噢!pc2不是pc1
    等待pc3.setRemoteDescription(pc1.localDescription);
    wait pc3.setLocalDescription(wait pc3.createAnswer());
    等待pc1.setRemoteDescription(pc3.localDescription);
    }捕获(e){
    控制台日志(e);
    }
    })();
    pc1.onicecandidate=e=>pc3.addIceCandidate(e.candidate);
    pc3.onicecandidate=e=>pc1.addIceCandidate(e.candidate);
    pc1.oniceconnectionstatechange=e=>console.log(pc1.iceConnectionState);
    pc3.ontrack=e=>video.srcObject=e.streams[0]