gpt4 book ai didi

javascript - WebRTC、STUN/TURN 在局域网外不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:47:11 27 4
gpt4 key购买 nike

index.html(提供者)

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.htmlAnswerer 做类似的事情。

setChannelEvents 函数中有 channel onmessage 的实现。

这在我家里的 LAN 上完美运行。

我已经使用 ngrok 服务将其放在网上,以便在我的本地网络之外尝试,但无法正常工作。

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

有什么我想念的吗?是否有我可以尝试的带有 TURN 的 WebRTC 工作示例?

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

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

最佳答案

这里是 XirSys 的家伙。 [=

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

为了快速了解我们的平台,我建议阅读以下指南:

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

关于javascript - WebRTC、STUN/TURN 在局域网外不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com