2014-06-14 52 views
3

的index.html(发盘的WebRTC,STUN/TURN不工作LAN

var socket = io.connect('http://127.0.0.1:80'); //socket.io 
socket.emit("player 1"); 

var iceServers = { 
    iceServers: [ 
     {"url":"stun:turn1.xirsys.com"}, 
     {"username":"myusername","url":"turn:turn1.xirsys.com:443?transport=udp","credential":"mycredential"}, 
     {"username":"myusername","url":"turn:turn1.xirsys.com:443?transport=tcp","credential":"mycredential"} 
    ] 
}; 

var offererDataChannel, answererDataChannel; 

var Offerer = { 
    createOffer: function() { 
     var peer = new PeerConnection(iceServers); 
     var dataChannelOptions = { 
      reliable: true, 
      ordered: false 
     }; 
     offererDataChannel = peer.createDataChannel('channel', dataChannelOptions); 
     setChannelEvents(offererDataChannel); 
     peer.onicecandidate = function (event) { 
      if (event.candidate) { 
      socket.emit("candidate", event.candidate); 
     } 
     }; 
     peer.createOffer(function (sdp) { 
      peer.setLocalDescription(sdp); 
      socket.emit("sdp", sdp); 
     }, function (err) { peer.close(); }); 
     this.peer = peer; 
     return this; 
    }, 
    setRemoteDescription: function (sdp) { 
     this.peer.setRemoteDescription(new SessionDescription(sdp)); 
    }, 
    addIceCandidate: function (candidate) { 
     this.peer.addIceCandidate(new IceCandidate({ 
      sdpMLineIndex: candidate.sdpMLineIndex, 
      candidate: candidate.candidate 
     })); 
    } 
}; 

var Answerer = { 
    createAnswer: function (offerSDP) { 
     var peer = new PeerConnection(iceServers); 
     peer.ondatachannel = function (event) { 
      answererDataChannel = event.channel; 
      setChannelEvents(answererDataChannel); 
     }; 
     peer.onicecandidate = function (event) { 
      if (event.candidate) { 
       socket.emit("candidate", event.candidate); 
      } 
     }; 
     peer.setRemoteDescription(new SessionDescription(offerSDP)); 
     peer.createAnswer(function (sdp) { 
      peer.setLocalDescription(sdp); 
      socket.emit("sdp", sdp); 
     }, function (err) { peer.close(); }); 
     this.peer = peer; 
     return this; 
    }, 
    addIceCandidate: function (candidate) { 
     this.peer.addIceCandidate(new IceCandidate({ 
      sdpMLineIndex: candidate.sdpMLineIndex, 
      candidate: candidate.candidate 
     })); 
    } 
}; 

var peer = null; 

socket.on("client is connected", function() { 
    peer = Offerer.createOffer(); 
    socket.on("candidate", function (candidate) { 
     peer.addIceCandidate(candidate); 
    }); 
    socket.on("sdp", function (sdp) { 
     peer.setRemoteDescription(sdp); 
    }); 
}); 

之外我还有一个文件stream.html,做了类似的事情为回答者

setChannelEvents函数上有通道onmessage的实现。

这对我的家里的局域网完美的作品。

我用ngrok服务把这个在线试图在我的本地网络之外尝试,并且不工作。

我使用Google Chrome(已更新至最新版本,当前为35.0.1916.153)。

有什么,我失踪?是否有一个可以尝试使用TURN的WebRTC的工作示例?

如果需要,我可以添加其余代码加上candidatesdp的一些输出。

注意:当我启动ngrok时,套接字上的IP地址被修改。

+0

[Googles Apprtc示例](https://apprtc.appspot.com/)使用TURN服务器进行连接...在您的实现中,您是否看到候选对象正在生成并且正在被其他对等方接收? –

+0

@bwtrent是的,他们得到生成(RTCIceCandidate),其中有6我的本地IP(192.168.1.69)与端口56830,最后3(所以,总共有9候选人生成)也有外部IP,相同的端口,但仅限于UDP – genesisxyz

+0

您正在获得应用程序,所以turn server和ice进程正在运行。另一件事是确保对方获得候选人。是这样吗? –

回答

6

XirSys这里的家伙。 [=

我不太确定你的错误是什么,除了它不工作。如果错误仅仅是视频不流畅,您应该知道TURN将无法工作,因为您已经嵌入了TURN的凭证,而此凭证现在已过期。使用XirSys时,您必须致电/getIceServers以获取与您的帐户关联的“全新”STUN和TURN服务器。必须发出POST请求,并将结果放入iceServers变量,每次您发起呼叫

为了获得我们的平台快速了解,我建议你阅读下列指南:

非常感谢您对我们的服务表示出兴趣,如果您有任何问题或意见,请让我知道。

+2

没有问题我修改了我的投票权,并将它变成了一个:) –

+0

@bwtrent谢谢你,善良的先生! [= – onichase

+2

我做错了,证书是错误的...现在正在完美工作(唯一的问题是谷歌浏览器先尝试TURN而不是STUN)..谢谢! – genesisxyz