2014-06-14 109 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