EasyRTC仅在同一局域网内工作(ICE失败)

时间:2015-08-20 10:54:35

标签: javascript jquery webrtc chromium easyrtc

问题是只有两台计算机在同一个局域网环境中才能看到远程视频,即来自不同的ip,未看到远程视频,在js控制台中我收到错误ICE failed, see about:webrtc for more details

我正在尝试搜索解决方案并发现问题可能是因为“在收到应答之前接收到ICE候选人应该设置RemoteDescription”,但我不知道如何纠正它。

在其他部分webrtc脚本中,RTCMultiConnection例如没有这个问题。

任何解决方案?

EasyRTC - http://easyrtc.com/download/

运行EasyRTC- http://wdd.co.il:8280

更新:我的onIceCandidate

pc.onicecandidate = function(event) {
            if (newPeerConn.cancelled) {
                return;
            }
            var candidateData;
            if (event.candidate && peerConns[otherUser]) {
                candidateData = {
                    type: 'candidate',
                    label: event.candidate.sdpMLineIndex,
                    id: event.candidate.sdpMid,
                    candidate: event.candidate.candidate
                };

                if( iceCandidateFilter ) {
                   candidateData = iceCandidateFilter(candidateData, false);
                   if( !candidateData ) {
                      return;
                   }
                } 
                //
                // some candidates include ip addresses of turn servers. we'll want those 
                // later so we can see if our actual connection uses a turn server.
                // The keyword "relay" in the candidate identifies it as referencing a 
                // turn server. The \d symbol in the regular expression matches a number.
                // 
                if (event.candidate.candidate.indexOf("typ relay") > 0) {
                    var ipAddress = event.candidate.candidate.match(/(udp|tcp) \d+ (\d+\.\d+\.\d+\.\d+)/i)[2];
                    self._turnServers[ipAddress] = true;
                }

                if (peerConns[otherUser].connectionAccepted) {
                    sendSignalling(otherUser, "candidate", candidateData, null, function() {
                        failureCB(self.errCodes.PEER_GONE, "Candidate disappeared");
                    });
                }
                else {
                    peerConns[otherUser].candidatesToSend.push(candidateData);
                }
            }
        };

1 个答案:

答案 0 :(得分:0)

如果两个客户端可以在同一子网上相互访问,但不能跨子网访问,那么问题总是提供的STUN服务器列表不适用于您,或者您需要TURN服务器因为你的客户背后是令人讨厌的企业防火墙或阻止纯P2P的对称NAT。通常你需要一个TURN服务器。你可以通过demo.easyrtc.com上的演示来看看这个。它们由TURN服务器支持。如果您从他们的站点运行RTCMultiConnection演示(而不是将其下载到您自己的),它也可能由TURN服务器支持。

如果您查看easyrtc google群组,则每周左右会弹出一次此问题。

我写了EasyRTC的客户端并回答了easyrtc google组(https://groups.google.com/forum/#!forum/easyrtc)上发布的大部分问题。