可以说我有两台电脑.
他们通过相互了解公共和私人IP ice4j
.
一个客户端正在侦听,另一个发送一些字符串.
我想通过UPD打孔来看到这种情况:
Let A be the client requesting the connection
Let B be the client that is responding to the request
Let S be the ice4j STUN server that they contact to initiate the connection
--
A sends a connection request to S
S responds with B's IP and port info, and sends A's IP and port info to B
A sends a UDP packet to B, which B's router firewall drops but it still
punches …
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何测试STUN/TURN服务器是否存活并正确响应连接.理想情况下,此测试将在外部机器上执行,以防万一STUN/TURN机器因此情况而停机,也应通过连接测试报告.
过去有没有人调查这个案子?建议采用什么解决方案?
我正在研究webrtc应用程序,必须实现以下TURN服务器.
https://code.google.com/p/rfc5766-turn-server/
我正在学习本教程.
http://www.dialogic.com/den/developer_forums/f/71/t/10238.aspx
它表示在创建RTCPeerConnection的javascript代码中如下引用TURN服务器.
var pc_config = {"iceServers": [{"url": "stun:stun.l.google.com:19302"},
{"url":"turn:<turn_server_ip_address>", "username":"my_username", "credential":"my_password"}]};
pc_new = new webkitRTCPeerConnection(pc_config);
Run Code Online (Sandbox Code Playgroud)
我有点困惑,为什么我们引用谷歌的公共STUN服务器.我以为RFC5766 TURN服务器里面有STUN.
RFC5766只有TURN服务器吗?而不是STUN服务器?我们不能实现自己的STUN服务器,而不是使用谷歌提供的服务器吗?
抱歉这样天真的问题.我是WebRTC的新手.
谢谢.
我需要在两个用户之间建立P2P UDP和TCP连接.他们都是NAT的背后.
除了jSTUN之外是否有任何Java解决方案(库),它似乎只能在UDP上运行.而TURN,ICE对于对称NAT问题要好得多.
我遇到的麻烦NAT traversal
和WebRTC
.视频流可以与某些人合作,但与在学生宿舍路由器后面的人不同.
我认为这应该通过使用TURN服务器来解决.我已经这样做了,它仍然无法工作,现在我想知道TURN服务器是否正常工作.因此,我想知道我是否可以或应该设置多个TURN服务器,如果是,如何.
我在另一个线程中找到了这个STUN/TURN服务器列表.现在我正在设置它们
var STUN = {
'url': 'stun:stun.l.google.com:19302',
};
var TURN = {
url: 'turn:homeo@turn.bistri.com:80',
credential: 'homeo'
};
var iceServers =
{
iceServers: [STUN, TURN]
};
var pc = new RTCPeerConnection(iceServers);
Run Code Online (Sandbox Code Playgroud)
所以我的问题基本上是:是否可以设置几个STUN/TURN服务器?如果可能,我应该这样做,那代码会是什么样的?
我对webrtc的STUN服务器的理解是,当客户端在NAT后面时(在大多数情况下,如果不是全部),STUN服务器将帮助webrtc客户端识别他们的地址和端口.我还读到一些文章说webrtc客户端需要一个信令服务器.信令服务器可以是web服务器,socket.io,甚至是通过电子邮件发送网址.我的第一个问题是:STUN服务器是信令服务器吗?
实际上现在我构建了一个非常简单的基于socket.io的服务,它将客户端的会话描述广播给所有其他客户端.所以我相信基于socket.io的服务器应该对客户端的地址和端口信息有足够的了解.如果是这种情况,为什么我们还要打扰另一台STUN服务器呢?
我无法通过它的PeerConnection和'onicecandidate'事件了解webRTC.
据我所知,您必须使用STUN(或TURN)服务器启动对等连接,因为它会将您的ICE候选者发送给您,以便与另一个对等方进行通信.
我已经看到了将PeerConnection对象的服务器参数留下的示例,我也不明白,但我们只是说它需要服务器参数.
所以,当我写下以下代码时:
var pc, ice = { "iceServers": [{ "url": "stun:stun.l.google.com:19302" }] };
if(typeof mozRTCPeerConnection === 'function') {
pc = new mozRTCPeerConnection(ice);
}
else {
console.log('google');
pc = new webkitRTCPeerConnection(ice);
}
pc.onicecandidate = function(event) {
console.log(event);
}
Run Code Online (Sandbox Code Playgroud)
我希望'onicecandidate'事件会触发,但它不起作用.我也尝试过其他公共STUN服务器,但没有任何反应.所以我认为我的理解可能有问题:)
我正在查看webrtc.html
和peerconnection_server
演示,它在两个Chrome浏览器之间正常工作.我的问题是,webkitPeerConnection的第一个参数究竟是什么?
pc = new webkitPeerConnection("STUN stun.l.google.com:19302", onSignalingMessage);
Run Code Online (Sandbox Code Playgroud)
它是Google为演示目的而提供的第三方STUN服务器吗?如果在我的JavaScript代码中,我替换"stun.l.google.com:19302"
了"toto"
,我仍然可以进行视频通话.但是当我在同一个子网上时,这可以解释......
我刚刚下载了一个视频聊天项目.它使用STUN服务器并指定URL stun:23.21.150.121
.如何使用自己的服务器而不是STUN服务器?我需要输入什么而不是此URL?
我已经看了一眼昏迷中的服务器设置的Openfire从那里,这样的说法:
"为了充当STUN服务器,需要在同一台机器上使用两个不同的公共IP地址,以及每个IP的两个不同的端口号."
我在google上进行了研究,一般来说,昏昏欲睡的服务器需要两个公共IP,原因是什么?