问题标签 [stun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3508 浏览

javascript - 如何使用 JavaScript 查询 STUN 服务器以获取公共 IP 和端口?

我正在尝试使用 JavaScript 查找一些代码示例来查询 STUN 服务器以获取我的公共 IP 和端口。也许使用服务器

http://www.stunserver.org

虽然此处解释了 STUN 规范http://www.ietf.org/rfc/rfc3489.txt(这是一个很长的文档,显然我不希望您阅读它),但我一直无法找到任何代码示例完全没有,这会让我的生活更轻松。就像是

谢谢

0 投票
5 回答
13005 浏览

javascript - WebRTC 如何处理多对多连接?

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

显然,它会消耗 7kb/s*7 的下载甚至上传,如果他们的连接已经很忙,许多连接将无法处理这个问题。相反,使用某种媒体中继,带宽使用率仅为 7kb/s,但您将失去对等方之间的带宽适配。

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

0 投票
2 回答
17246 浏览

stream - 远程视频流不适用于 WebRTC

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

教程:使用 HTML 和 JavaScript 创建您自己的视频聊天应用程序

如果您觉得它有帮助且可以理解,请告诉我。谢谢!


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

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

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

  2. 当一个用户单击“创建报价”按钮时,一条包含其会话描述 (SDP) 的消息被发送到服务器(客户端 func sendOffer()),服务器将其广播给另一个用户

  3. 其他用户收到消息并保存他收到的 SDP

  4. 如果用户点击“accept offer”,SDP 被添加到 RemoteDescription (func createAnswer()),然后发送一个 answer-message (包含 answering-user 的 SDP) 给 offer-user

  5. 在提供用户端执行 func offerAccepted(),它将其他用户的 SDP 添加到他的 RemoteDesription。

我不确定在什么时候调用了 icecandidate-handlers,但我认为它们应该可以工作,因为我在两边都得到了两个日志。

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

index.html 的标记:

这是服务器代码:

这里是客户代码:

我还读到必须在发送任何报价之前收集本地媒体流。这是否意味着我必须在创建 PeerConnection 时添加它?即是这样的:

在此先感谢,感谢您的帮助!

EDIT2: 我现在更进一步了。由于“指定了无效或非法的字符串。”,添加远程冰候选(客户端代码中的切换案例 setIceCandidate)似乎不起作用。json.data.candidate-object 看起来像这样:

我试着像这样创建一个新的候选人

但我仍然遇到语法错误

0 投票
0 回答
73 浏览

sip - 后续 SIP 重新邀请中的 ICE 参数

在 ICE rfc 5245 中,有关于后续更新报价的说明。但是没有提及发送后续重新邀请时代理的行为应该是什么?我们应该包括 ice-candidates 吗?我们应该包括所有本地候选人还是只包括默认候选人?

0 投票
2 回答
1731 浏览

java - 有没有人有 JSTUN 文档或帮助解释更多?

我将使用 STUN 作为我的遍历 NAT 解决方案,并遇到 JSTUN。虽然我搜索了 arround stackoverflow,但我发现这篇文章提到 JSTUN 在源代码中有它的文档:Java 和我应该使用哪些 Stun 库?

但是,http://javawi.de/ 上的源代码损坏,然后我找到了下载 JSTUN 代码的替代方法https://github.com/tking/JSTUN

所以我在这里询问是否有人会给我文件,并想知道它是如何工作的:

1.de.javawi.jstun.test.demo.StunServer 要求我提供 2 个 ip 和端口。在我看来,STUN 服务器是一种提供“打孔”服务的方式,为什么它需要 2 个 ip 和端口?

2.运行de.javawi.jstun.test.demo.DiscoveryTestDemo后,返回ip,是什么意思?

问候,

史蒂夫

0 投票
0 回答
260 浏览

java - 在 Android 应用程序中通过 NAT 连接 2 个视频呼叫客户端

我四处寻找如何通过 NAT 连接 2 个客户端,所有这些都把我带到了 STUN。我发现了很多 API,例如 jstun 和 ice4j,但没有文档和示例。有人能帮我吗?谢谢大家,对不起我的英语。

编辑 我发现 IcedJava 似乎非常好,它使用新的 RFC 5389 进行 STUN、ICE 和 TURN,但它的文档非常糟糕。这个https://java.net/projects/siptools/pages/IcedJava 有人知道更好的文档吗?

0 投票
4 回答
5775 浏览

sip - VoIP Wireshark analysis, can see RTP stream but couldn't found SIP or H323

Forgive me if I'am asking the wrong question. Recently I am trying to analyze some voip traffic in Wireshark. But all I could see are small UDP packets; some containing RTP streams and I can see various codec information like G.711, G.723 etc. But there is no sign of SIP or any other signaling packets. Is it possible to hide SIP or H323 signalling within UDP packets in a way which are undetectable to Wireshark? or STUN can do some encoding to hide signalling packets?

0 投票
0 回答
682 浏览

traversal - STUN 协议问题

我正在做一个需要 p2p 连接的项目,我打算使用 XMPP 叮当 XEP_0176

但我对 STUN 的工作原理感到困惑(我的意思是流程)。

例如,我有两个客户 A 和 B。

客户端 A 作为发起者,客户端 B 作为响应者,我在这个例子中使用 google 的 stun 服务器。

客户端 A 的 LAN IP 为 192.168.0.3 端口 9887,然后客户端 A 向 google 的 stun 服务器发送绑定请求,该服务器响应 114.123.123.123 端口 9987

客户端 B 的 LAN IP 为 192.168.22.1 端口 9999,客户端 B 也执行相同的绑定请求,并收到 256.118.118.118 端口 9999。

此时,如何建立对等连接?我需要做什么或者我在这里遗漏了什么?

0 投票
1 回答
847 浏览

java - STUN UDP请求包故障

我正在尝试使用一些全球可用的 STUN 服务器,以便他们可以告诉我我的 NAT 映射,以便使用 UDP 遍历 NAT。服务器在此网页上: http ://www.tek-tips.com/faqs.cfm?fid=7542 我测试了它们,它们可以 ping。问题在于构造一个特殊的 STUN 请求数据包,因为服务器不会对所有传入的数据包做出响应。

STUN 协议的数据包结构解释得不是很好,我不想使用任何已经实现它的库。是否有一些 Java/C 代码或仔细解释的数据包结构的示例?我找不到任何关于它的信息。

0 投票
1 回答
378 浏览

networking - udp 数据包不会返回设备

我正在尝试从 Android 设备上的小型 Java 代码联系 UDP 服务器。当连接到我家的 Wi-Fi 互联网时,会联系服务器并用数据响应数据包,然后数据会到达设备。

但是,当连接到移动网络时,相同的程序会运行,数据包确实会到达服务器,但服务器回复数据包会丢失。此外,有人会说手机的移动运营商决定阻止传入的 UDP 流量或类似的东西,但我已经测试并尝试访问我的家庭服务器而不是之前的服务器,并且 UDP 数据包已经返回!

所以让我们总结一下:移动网络毫无问题地发送 UDP 数据包,但一些 IP 的回复数据包会被丢弃。我错过了什么吗?是否应该使用通用的 UDP 端口来防止这种情况?流行的 UDP 应用程序如何不会遇到此类问题?