标签: stun

为什么STUN服务器需要两个不同的公共IP地址

我已经看了一眼昏迷中的服务器设置的Openfire从那里,这样的说法:

"为了充当STUN服务器,需要在同一台机器上使用两个不同的公共IP地址,以及每个IP的两个不同的端口号."

我在google上进行了研究,一般来说,昏昏欲睡的服务器需要两个公共IP,原因是什么?

p2p protocols openfire stun

16
推荐指数
2
解决办法
1万
查看次数

NAT跟踪如何在像bittorrent这样的对等协议的情况下工作.

我知道NAT遍历和STUN,TURN和ICE及其使用.我想知道这些是否在像bittorrent这样的点对点文件共享应用程序中实现.跟踪器是否通过帮助使用STUN创建直接连接或通过TURN中继来促进NAT之后的对等体彼此通信.在分布式哈希表(DHT)的情况下,一个对等体如何与NAT后面的其他对等体通信?

p2p bittorrent dht nat stun

15
推荐指数
1
解决办法
4474
查看次数

什么是STUN,是否需要端口转发服务器?

我已经对没有基本服务器的p2p通信做了一些研究,并且通过了STUN.从我读过的内容来看,STUN是NAT"打孔"的一种方式,它不需要将对等端口转发连接到.这是正确的,打孔究竟是什么意思?如果它不需要端口转发,它似乎非常脆弱,因为它越过防火墙,我不完全理解STUN的作用.STUN可以用于Java中的p2p程序或其他语言,例如聊天客户端,它通过TCP/UDP端口向没有基本服务器的对等端发送消息,或者不要求用户端口转发?

java udp tcp portforwarding stun

14
推荐指数
1
解决办法
9903
查看次数

了解 WebRTC 中的 SFU、TURN 服务器

如果我正在构建 WebRTC 应用程序并使用 Selective Forwarding Unit 媒体服务器,这是否意味着我将不需要 STUN / TURN 服务器?

据我了解,STUN 服务器用于客户端发现其公共 IP/端口,而 TURN 服务器用于在客户端无法通过 STUN 直接相互连接时在客户端之间中继数据。

我的问题是,如果我使用公共地址部署我的 SFU 媒体服务器,这是否消除了对 STUN 和 TURN 服务器的需求?由于数据将始终通过 SFU 中继,并且客户端/对等方实际上永远不会直接相互交谈?

但是,我注意到 Kurento(具有 SFU 功能的流行媒体服务器)的安装指南包含有关配置 STUN 或 TURN 服务器的部分。为什么需要 STUN 或 TURN 服务器?

stun webrtc turn kurento

14
推荐指数
1
解决办法
3009
查看次数

远程VideoStream无法与WebRTC一起使用

编辑:我写了一个详细的教程,解释如何构建一个简单的Videochat应用程序,包括一个信号服务器:

教程:使用HTML和JavaScript创建自己的Videochat应用程序

如果您觉得它有用且易于理解,请告诉我.谢谢!


我试图让Streams通过WebRTC和Websocket(nodejs-server)工作.据我所知,通过SDP的握手工作,并建立了Peerconnection.问题是 - 远程视频没有播放.src-Attribute获取了Blob并设置了自动播放,但它只是不会播放.也许我对ICE候选人做错了(它们用于媒体流,对吧?).有没有办法检查PeerConnection是否设置正确?

编辑:也许我应该解释代码是如何工作的

  1. 在网站加载时建立与websocket-server的连接,创建使用谷歌STUN服务器的PeerConnection,并收集视频和音频流并将其添加到PeerConnection

  2. 当一个用户点击"创建商品"时 - 按钮将包含其会话描述(SDP)的消息发送到服务器(客户端功能sendOffer()),该服务器将其广播给其他用户

  3. 另一个用户获取消息并保存他收到的SDP

  4. 如果用户单击"接受要约",则将SDP添加到RemoteDescription(func createAnswer()),然后将该回复消息(包含应答用户的SDP)发送给产品用户

  5. 在产品用户端执行func offerAccepted(),将其他用户的SDP添加到他的RemoteDesription中.

我不确定在什么时候确切地调用了icecandidate处理程序,但我认为它们应该可以正常工作,因为我在两侧都有两个日志.

这是我的代码(这仅用于测试,所以即使有一个叫做广播的功能,也意味着一次只有2个用户可以在同一个网站上):

index.html的标记:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style>
            #acceptOffer  {
                display: none;
            }
        </style>
    </head>
    <body>
        <h2>Chat</h2>
        <div>
            <textarea class="output" name="" id="" cols="30" rows="10"></textarea>
        </div>
        <button id="createOffer">create Offer</button>
        <button id="acceptOffer">accept Offer</button>

        <h2>My Stream</h2>
        <video id="myStream" autoplay src=""></video>
        <h2>Remote Stream</h2>
        <video id="remoteStream" autoplay src=""></video>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script src="websocketClient.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是服务器代码:

"use strict";

var webSocketsServerPort = 61122;

var webSocketServer = require('websocket').server,
http = …
Run Code Online (Sandbox Code Playgroud)

p2p stream websocket stun webrtc

13
推荐指数
1
解决办法
1万
查看次数

如何使用AWS EC2创建stun turn服务器实例

实际上我想使用我自己的stun/Turn服务器实例,我想使用Amazon EC2.如果有人对此有任何想法,请与我分享创建步骤或任何参考链接.

amazon-ec2 amazon-web-services stun webrtc turn

13
推荐指数
1
解决办法
1万
查看次数

WebRTC如何处理多对多连接?

如果我和其他7个用户在一个房间,我想知道WebRTC是否强迫每个用户与其他每个参与者建立连接.

显然它会消耗类似7kb/s*7下载甚至上传的内容,如果连接已经很忙,很多连接都无法处理.相反,对于某种类型的媒体中继,带宽使用量仅为7kb/s,但您将失去对等体之间的带宽适应性.

你知道任何媒体中继,或解决这个问题的方法吗?是适合这种工作的TURN服务器(如https://code.google.com/p/rfc5766-turn-server/)(包括多播)?

javascript voip stun webrtc

10
推荐指数
2
解决办法
9692
查看次数

为 WebRTC PeerConnections 强制使用 TCP

是否可以强制与 WebRTC 建立 TCP 隧道 (TLS) 连接?

我们正在为我们的业务开发 WebRTC 应用程序,但我们遇到了由内部网络引起的传入 UDP 流的一些重大问题。我们已经在使用 TURN 服务器,并且我们正在获得一堆 ICE 候选(甚至中继 UDP 的)。

问题是,正如我上面所说的,我们传入的 UDP 流量在这里工作不可靠(口吃,非常糟糕的图像质量,非常低的 fps)。这足以给浏览器留下印象,WebRTC 可以将其用于 PeerConnection,但实际结果在 UDP 上非常糟糕。

如果我阻止所有传出和传入的 UDP 流,我可以看到(在 Wireshark 中)WebRTC 通过使用我们的轮流服务器回退到 TCP 流量。

通过 TCP 连接,我们获得了非常好的结果(具有高帧率和非常好的图像质量)。

我已经尝试了几件事来强制 TCP:

  1. 我删除了 m=video 行中的 UDP 部分

    m=视频 TLS/RTP/SAVPF 100 116 117 96

  2. 我已经从我的候选人名单中排除了每个 UDP 候选人

在每种情况下,我什至无法建立连接。

我可以做些什么来强制 WebRTC 中的 TCP 或者我们真的完全依赖浏览器吗?

google-chrome sdp stun webrtc turn

9
推荐指数
2
解决办法
9016
查看次数

即使对等点可以互相发送 UDP 数据包,WebRTC 也无法连接 P2P

我的印象是,尽管有 NAT,WebRTC 仍竭尽全力实现 P2P 连接。[1][2] 这就是为什么我惊讶地发现 WebRTC 在某些很容易实现 P2P 连接的情况下无法连接对等点。我想了解为什么会发生这种情况,以及我是否可以采取任何措施来改善这种情况。


为什么我说P2P在某些情况下很容易实现呢?我之所以这么说是因为我在不同网络上的两台设备上进行了实验:

  • 设备 F 连接到全锥 NAT 后面的互联网
  • 设备 S 通过对称 NAT 连接到互联网

我可以通过以下方式轻松实现这些设备之间的 P2P 连接:

  1. 设备 F 将连接绑定到随机(不可预测)端口,并通过该端口将 UDP 数据包发送到 Internet 上的任何位置。由于 F 位于全锥 NAT 后面,因此该数据包已“打孔”打开的端口,允许任何外部地址现在通过该端口发送数据包。就我而言,我在本地打开的端口似乎与外部端口相同。(如果外部端口与本地端口不同,我们可以使用 STUN 之类的东西来找出外部端口。)

  2. 设备 S 将连接绑定到随机(不可预测)端口,并通过该端口向设备 F 的外部 IP 和端口发送 UDP 数据包。该数据包可以传送,因为该端口在步骤 1 中已打洞打开。之后数据包时,设备 S 通过自己的端口打洞,允许来自设备 F 的数据包通过它发回。设备F会知道将数据包发送到哪里,因为S发送的数据包包含外部IP和端口。由于设备 S 具有对称 NAT,打洞不会为所有流量打开端口,仅针对来自设备 F 的流量(设备 F 的外部 IP 和端口)。

我使用 Python 来验证我是否能够在这些设备之间打开 P2P 连接并双向发送消息,如上所述。我不明白为什么WebRTC无法实现这样的P2P连接。


为什么我声称 WebRTC 在某些应该很容易连接的情况下无法连接?我之所以这么说是因为我尝试使用 3 个不同的代码示例来实现 WebRTC P2P 连接。当设备位于同一本地网络时,所有示例均有效,但当设备位于不同网络时,所有示例均无效(上述设置)。我尝试过的库都没有提供任何有用的调试信息来找出问题所在,并且 chrome://webrtc-internals 也没有提供任何有用的信息。我还尝试在 …

javascript p2p nat stun webrtc

9
推荐指数
0
解决办法
1303
查看次数

WebRTC如何决定使用哪些TURN服务器

分支这个问题WebRTC - 我需要指定多少个STUN/TURN服务器?

当提供多个TURN服务器时,WebRTC如何确定要使用哪些TURN服务器?

javascript stun webrtc turn

8
推荐指数
1
解决办法
2546
查看次数