的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的工作示例?
如果需要,我可以添加其餘代碼加上candidate
和sdp
的一些輸出。
注意:當我啓動ngrok時,套接字上的IP地址被修改。
[Googles Apprtc示例](https://apprtc.appspot.com/)使用TURN服務器進行連接...在您的實現中,您是否看到候選對象正在生成並且正在被其他對等方接收? –
@bwtrent是的,他們得到生成(RTCIceCandidate),其中有6我的本地IP(192.168.1.69)與端口56830,最後3(所以,總共有9候選人生成)也有外部IP,相同的端口,但僅限於UDP – genesisxyz
您正在獲得應用程序,所以turn server和ice進程正在運行。另一件事是確保對方獲得候選人。是這樣嗎? –