- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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.html
为 Answerer 做类似的事情。
在 setChannelEvents
函数中有 channel onmessage 的实现。
这在我家里的 LAN 上完美运行。
我已经使用 ngrok 服务将其放在网上,以便在我的本地网络之外尝试,但无法正常工作。
我使用的是 Google Chrome(已更新至最新版本,当前为 35.0.1916.153)。
有什么我想念的吗?是否有我可以尝试的带有 TURN 的 WebRTC 工作示例?
如果需要,我可以添加剩余的代码以及 candidate
和 sdp
的一些输出。
注意:当我启动 ngrok 时,套接字上的 IP 被修改。
最佳答案
这里是 XirSys 的家伙。 [=
我不太确定你的错误是什么,只是它不起作用。如果错误仅仅是视频不流动,您应该知道 TURN 将无法工作,因为您已经为 TURN 嵌入了现在已经过期的凭据。使用 XirSys 时,您必须调用 /getIceServers
以获得与您的帐户关联的一组“全新”STUN 和 TURN 服务器。必须发出此 POST 请求并将结果放入您的 iceServers
变量每次您发起调用。
为了快速了解我们的平台,我建议阅读以下指南:
非常感谢您对我们的服务表现出兴趣,如果您有任何问题或意见,请告诉我。
关于javascript - WebRTC、STUN/TURN 在局域网外不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222238/
我需要的是,我将打开一个UDP服务器,在X端口(本地机器)和一个机器(公共(public)IP)中监听 可以发送 UDP 数据包给我。我的机器没有公共(public) IP。基本上我需要stun。 我
我正在查看 webrtc.html 和 peerconnection_server 演示,它在两个 Chrome 浏览器之间运行良好。我的问题是, webkitPeerConnection 的第一个参
我刚刚下载了一个视频聊天项目。它使用 STUN 服务器并指定 URL stun:23.21.150.121。我如何使用自己的服务器而不是 STUN 服务器?我必须输入什么来代替这个 URL? 最佳答案
我了解 STUN 和 TURN 服务器的用途以及它们在 WebRTC 中的用途,但我不完全明白: 如果我作为WebRTC客户端已经登录使用WebRTC服务,那么该服务不是已经拥有我的公共(public
我正在尝试使用一些全局可用的 STUN 服务器,以便它们可以告诉我我的 NAT 映射,以便使用 UDP 遍历 NAT。服务器位于此网页上: http://www.tek-tips.com/faqs.c
我正在编写一个 RTP 中继,但遇到了一个问题。 基于libnice threaded example我编写了软件部分使用 STUN 连接到在 chrome 中运行的 javascript。 基本上这
我在没有基本服务器的情况下对 p2p 通信进行了一些研究,并且研究了 STUN。从我读过的内容来看,STUN 是一种 NAT“打洞”方式,不需要对等端进行端口转发即可连接。这是正确的,打洞究竟是什么意
我想弄清楚如何测试 STUN/TURN 服务器是否处于事件状态并正确响应连接。理想情况下,此测试将从外部机器执行,以防万一 STUN/TURN 机器在这种情况下关闭,连接测试也应报告。 过去有人调查过
(async function() { var iceServers = [{ urls: ["stun:stun.l.google.com:19302"] }]; var p
我目前正在尝试通过 Internet 发送 UDP 消息,并且必须为端点 A 和 B(都位于 NAT 后面)设置防火墙。为此,我想使用 STUN 服务器进行打洞。 当 A 创建对 STUN 服务器的请
假设我们正在使用启用了 WebRTC 的 Asterisk。当我们尝试在不同网络上的两台主机之间建立连接时,我们需要使用STUN 服务器可以正确确定其公共(public)地址,以防它们位于 NAT 之
Java,我试图编写自己的 STUN 客户端,但似乎我犯了错误,因此,大多数时候它被卡住了。所以我想知道哪些 STUN 客户端库可用于 Java,以便开始。 跟进:(同时尝试跟进,仍然没有涉及NAT/
我已经阅读了 RFC 5389 和 RFC 5245 以及更新的 RFC 8445。我了解 STUN 如何返回服务器反身地址或中继地址。请求被发送到 STUN 服务器。 我的基本问题是关于使用 STU
我已经安装了 TURN 服务器,服务器代码中的一切工作正常。日志文件中没有错误。只是一个警告说明 0: WARNING: I cannot support STUN CHANGE_REQUEST f
我刚刚开始学习用于实现音频和视频应用程序的 WebRTC,并且知道有各种公共(public) stun 服务器可用于对等连接。但是我有点困惑我可以将这些公共(public)服务器用于商业应用程序吗?
我有自己的 ubuntu 19 服务器。 注意:我需要一个用于视频聊天 Web 应用程序的 stun/turn 服务器。如果两个设备都在同一个网络中,它已经可以工作了。 我已经成功安装并配置了cotu
我决定创建自己的 STUN 服务器,并将其与以下 JS 库一起使用 https://simplewebrtc.com 。 我决定使用这个:http://www.stunprotocol.org/ 我已
以下是来自此 GitHub 项目的引用 STUN IP Address requests for WebRTC . These request results are available to Jav
我正在为我的 WebRTC 应用程序(构建在 mediasoup 之上)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息,告诉我:“使用两个以上的 STUN/TURN
我的 Activity 中有 ProgressBar,它一直在旋转。我正在尝试连接到可用的网页 -我使用输入流 InputStream input = new URL(url).openStream(
我是一名优秀的程序员,十分优秀!