我正在尝试找到一些代码示例,以使用JavaScript查询STUN服务器以获取我的公共IP和端口。也许在使用服务器
虽然http://www.ietf.org/rfc/rfc3489.txt此处解释了STUN规范(这是一个很长的文档,显然我不希望您阅读它),但我找不到任何代码示例根本可以让我的生活更轻松。就像是
function getMyIPAndPort() {
//query stun server for it
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我尝试制作P2P程序,并需要帮助来完成客户端的NAT.我在stackoverflow上已经阅读了很多问题,但我从来没有得到通过NAT的所有方法的缺点和好处.有多少路由器支持哪些方法?大公司常用哪种方法?(BitTorrent,TeamViewer,......)我列出的三种方法有哪些缺点/好处,哪些还存在?
我正在通过 DataChannels(CoffeeScript,对不起 JS 家伙)构建(又一个)手动信令 WebRTC 聊天。它在本地连接中工作正常,但不能通过 NAT 后面的互联网(不幸的是,我还不能尝试 NATless)。
我不想维护一个 TURN 服务器,但是如果只有一个对等点必须可以从 Internet 公开访问才能使设置工作,我也可以。因为我是唯一一个拥有可访问机器的人,所以我们需要我主持一个 TCP 连接。在 Firefox 中没有报告 TCP 候选,所以我猜 ICE-TCP 尚不支持。
在 Chrome 上,查看 SDP 提供/答案,STUN 服务器正确识别了两个对等方的公共 IP 并添加了每个服务器反射 UDP 候选(见下面的第 10 行),但没有TCP 服务器反射候选,因此连接永远不会成功。还包括一个 TCP 候选(参见下面的第 9 行),但它只是一个主机候选。
这是一个示例 SDP 报价(我的公共 IP 是 88.88.88.88):
01. v=0
02. o=- 7452583715680269460 2 IN IP4 127.0.0.1
03. s=-
04. t=0 0
05. a=msid-semantic: WMS
06. m=application 50816 DTLS/SCTP 5000
07. c=IN IP4 88.88.88.88
08. a=candidate:864190085 1 …Run Code Online (Sandbox Code Playgroud) 我想将视频从 IP 摄像机流式传输到 NAT 后面的远程 PC。为此,我使用 libnice 和 gstreamer。
一方面,我实现了以下管道。
rtspsrc <-> Nicesink
远程客户端管道
Nicesrc <-> rtph264depay <-> h264parse <-> ffdec_h264 <-> autovideosink
但是,我无法在远程客户端上获取视频流。我在远程客户端上的 Nicesrc 元素上获取视频数据包,但通过上面的管道,我无法看到视频。
我在 libnice 的接收回调中获取缓冲区长度打印。从那里,我还可以以 h264 格式录制视频并播放。但远程客户端上的上述管道并未发生实时流传输。
我还尝试将 capfilters 包含在 gstreamer 管道中,但没有成功。任何帮助都是appriced。谢谢
简单地说,我将运行本地流行的 WEBRTC 应用程序示例:github.com/webrtc/apprtc
apprtc 已安装,甚至无需转向服务器即可在本地运行(“同源策略”不允许使用 Google TURN 服务器,该服务器仅适用于 apprtc.appspot.com:access-control-allow-origin:” https://apprtc .appspot.com ”)。
但我知道在真实的互联网世界(nats 和防火墙)中,我需要转服务器。所以我决定使用自己的 STUN/TURN 服务器:
code.google.com/p/coturn/
我正在尝试将我的 apprtc 与 coturn 集成:
+apprtc: http://localhost:8080/?wstls=false
+coturn: http://localhost: 3478
Run Code Online (Sandbox Code Playgroud)
我有问题:
a) 我是否需要执行一些在 INSTALL 指南中描述的 turnadmin 命令?或者从示例运行 turnserver 就足够了:my_name@my_machine:~/WEBRTC/turnserver-4.4.5.2/examples/scripts/restapi$ ./secure_relay_secret.sh
其中包含:
if [ -d examples ] ; then
cd examples
fi
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/:/usr/local/mysql/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/usr/local/lib/:/usr/local/mysql/lib/
PATH="./bin/:../bin/:../../bin/:${PATH}" turnserver -v --syslog -a -L 127.0.0.1 -L ::1 -E 127.0.0.1 -E ::1 --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=logen --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q …Run Code Online (Sandbox Code Playgroud) 我浏览了编程 P2P 应用程序SO 帖子。但我想我仍然不清楚 STUN 是如何在引擎盖下工作的。
所以,我想发表我的理解,并希望得到纠正。
根据示例
假设机器 (A) IP 正在192.168.1.2运行(在 STUN 服务器上的 TCP 客户端请求)4900(TCP 客户端请求 STUN 服务器通过 TCP 运行4900)并且 Stun 服务器返回了 Nat 设备的公共 IP,即128.11.12.13 8888
现在我希望机器 B(假设现在 B 通过公共 IP 知道128.11.12.13)通过端口3000(TCP)连接到机器 A
这之后发生了什么——
B 尝试通过 IP 连接 A 128.11.12.13
问题1:但是哪个端口?(它不能直接连接到端口 3000 )
我想答案是我将4900请求转发到3000.
但这里有一件事
问题 2:连接到 4900 上 STUN 服务器的 TCP 客户端怎么样(发送指示等)。如果应用了端口转发,从 Stun 服务器到 TCP 客户端的所有流量现在都将被重定向到端口 3000。对吗?
我在这方面正确吗?
有什么办法解决这个问题,还是我在这里大声思考?:)
我们尝试coturn使用替代侦听端口进行配置,但它不起作用。我想澄清一下我们是否在做正确的事情,以及它是否因为/me stupid服务器或服务器而无法正常工作。
我们正在使用turns(安全)。我希望服务器侦听端口 5349 和 443,如果 443 具有阻止流量的 Web 代理,则默认端口和 443 以防其他一切都被阻止。我打算给客户端 2 个冗余服务器,每个端口一个。
当我配置coturn与
tls-listening-port=5349
alt-tls-listening-port=443
Run Code Online (Sandbox Code Playgroud)
只有 5349 件作品。当我更改规格顺序时,443 有效。
好像alt-tls-listening-port一点效果都没有。
我知道在使用 UDP 时,端口默认是连续的,但评论说
# Alternative listening port for TLS and DTLS protocols.
# Default (or zero) value means "TLS listening port plus one".
Run Code Online (Sandbox Code Playgroud)
和非 TLS 部分
# This is needed for RFC 5780 support
# (STUN extension specs, NAT behavior discovery). The TURN Server
# supports RFC …Run Code Online (Sandbox Code Playgroud) 我想了解是什么在不使用 STUN 服务器的本地 webRTC 应用程序中生成 ICE 候选对象。
我正在使用 Flutter WebRTC 来创建 P2P 视频通话。
我遇到了与网络相关的问题:我已经完成了应用程序,但它仅适用于移动数据。
将网络更改为 WiFi 时,它不起作用并且连接状态挂起Checking
我使用 Google 社区 STUN/TURN 服务器和 Node JS socket.io 来发送信号。当移动设备不在同一网络上但仅使用移动数据时,它也可以工作。
我一直在阅读一些有关 WebRTC 的内容,但我不明白为什么如果只有 1 个对等方使用对称 NAT,而另一个既不使用对称也不使用端口限制 NAT,那么为什么我们需要 Turn 服务器,所以让 \xe2\x80\x99s假设 A 使用 Full Cone NAT,B 使用对称 NAT:
\nSTUN SERVER会将B的正确IP地址发送给A,将A的正确IP+端口地址发送给B。
\nA 尝试连接到 B(现在 A 将能够接受来自 B 的消息,因为它位于目标地址列中的\xe2\x80\x99)。
\nB 尝试连接到 A,这将允许从 A 发送到 B 的请求(ofc A 需要将端口更新为从 B 而不是 Sdp 接收到的端口)。
\n我是否遗漏了一些东西,或者这是正确的(并已实现),还是这太复杂而无法实现?
\n如果这是正确的,那么理论上,如果我\xe2\x80\x99m对等体A并且我使用Full Cone NAT,任何对等体B都可以连接到我(只要我先发送连接请求),而不需要转动服务器。
\n谢谢
\n