我需要在两个用户之间建立P2P UDP和TCP连接.他们都是NAT的背后.一点研究让我想到了STUN,TURN和ICE.
有没有支持相同的开源iOS(库)?
iPhone中的FaceTime也使用ICE,STUN,TURN到NAT遍历,iOS SDK也暴露了这样的API吗?
我在resiprocate源代码(www.resiprocate.org)中找到了nICRr代码,我可以在Mac OS X上测试STUN部分.有没有人尝试过使用相同的iOS 4.0或更高版本?
谢谢,罗德尼
我正在开发一个P2P应用程序,我需要使用STUN和/或TURN进行NAT遍历.我已经研究了仅使用STUN时出现的问题(基本上它并不总是有效,因为它是基于UDP的,有些防火墙不会那样 - 根据我的问题,原因并不那么有趣),而且我一直在看关于使用STUN和TURN进行回退的建议(ICE方案).
但在我看到的每个地方,我只看到人们STUN"不太可能一直工作".我正在寻找的是一些具体的数字/统计数据.我可能会尝试自己生成它们,但我没有足够的客户端来获取重要的样本.
所以我想知道是否有人可以对使用STUN进行NAT遍历的成功率进行统计.如果我没有使用TURN作为后备,有多少对等点无法连接?
我正在看这个站点,该站点应该是测试TURN服务器的表(根据此答案)。
plugin.temasys.com.sg/demo/samples/web/content/peerconnection/trickle-ice/index.html
我输入了服务器信息,但找不到任何可确定服务器是否正常工作的信息。即使没有选择服务器,“候选冰”部分也看起来相同。
我的TURN服务器安装在Amazon EC2上。我遵循了coturn存储库中的安装说明:
github.com/coturn/coturn/blob/master/INSTALL
以下是执行命令从此处启动TURN服务器时在服务器中获得的内容:
RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server
Version Coturn-4.2.1.2 'Monza'
0:
Max number of open files/sockets allowed for this process: 4096
0:
Due to the open files/sockets limitation,
max supported number of TURN Sessions possible is: 2000 (approximately)
0:
==== Show him the instruments, Practical Frost: ====
0: TLS supported
0: DTLS supported
0: AEAD supported
0: Redis supported
0: PostgreSQL supported
0: MySQL supported
0: MongoDB is not supported
0: OpenSSL …Run Code Online (Sandbox Code Playgroud) 我以前问过这个问题,但没有任何运气..我在本教程后遇到问题https://www.pubnub.com/blog/2014-10-21-building-a-webrtc-video-and-voice-chat - 应用/.我写了代码,它在本地网络上完美运行,但是当我尝试连接远程客户端(即不在同一网络上)时,代码不再起作用了.它只显示一个黑屏,客户端的视频应该是.
phone.receive(function(session){
session.connected(function(session){
$("#vid-box").append(session.video); //outputs black screen
});
session.ended(function(session) {alert("Call ended: "+session.number});
});
Run Code Online (Sandbox Code Playgroud)
我甚至联系了PubNub,但他们无法提供帮助.有人有什么想法吗?
我是WebRTC的新手。
我了解到转弯服务器。
下面的内容用于为Webrtc应用程序配置Turn Server在TCP上运行。
在webrtc应用程序中打开服务器配置示例:-
{
url: ‘turn:192.158.29.39:3478?transport=tcp’,
credential: ‘JZEOEt2V3Qb0y27GRntt2u2PAYA=’,
username: ‘28224511:1379330808?
}
Run Code Online (Sandbox Code Playgroud)
?transport = tcp的含义是它可以像他们所说的那样在TCP协议上工作。
我的问题是
轮流服务器基于TCP方式工作,它仅用于在其上基于TCP的轮流服务器之间建立连接,或者用于通过使用TCP协议的轮流服务器传输WebRTC媒体。TCP数据包用于哪个目的?
是否可以通过TCP数据包传输WebRTC媒体?
我正在尝试在 Digital Ocean Ubuntu 16.04.3 LTS 上安装 CoTurn 4.5.0.6。我无法使用,sudo apt-get install coturn因为它安装了 4.5.0.3 版。我也无法安装 Ubuntu 17.10,因为我需要长期支持 (TLS)。
我使用 Ubuntu 16.04.3 LTS 在 Digital Ocean 上创建了一个 Droplet。然后我下载了 CoTurn:
wget https://github.com/coturn/coturn/archive/4.5.0.6.tar.gz
Run Code Online (Sandbox Code Playgroud)
我打开它:
tar xvfz 4.5.0.6.tar.gz
Run Code Online (Sandbox Code Playgroud)
进入文件夹:
cd coturn-4.5.0.6
Run Code Online (Sandbox Code Playgroud)
安装所需的库和实用程序:
sudo apt-get install libssl-dev
sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
sudo apt-get install libevent-dev
sudo apt-get install libpq-dev
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
sudo apt-get install libhiredis-dev
Run Code Online (Sandbox Code Playgroud)
最后一个报错:E: Unable to locate package libhiredis-dev。
在那之后运行: …
假设我已经建立了WebRTC视频聊天网站,有些握手后的连接(ICE Candidates)会直接p2p,有些会使用STUN服务器,有些会使用“最后手段”TURN服务器来建立连接。与直接连接和 STUN 连接(免费)相比,基于 TURN 服务器的连接非常昂贵,因为所有流量实际上都必须经过 TURN 服务器。
我们如何估计需要通过 TURN 的随机用户连接百分比?想象一下,我们对预期观众知之甚少,除了大多数观众在美国。我相信这一定很难算,但我目前的估计在1%到99%之间,这个范围太宽了,至少可以缩小范围吗?
我知道在 P2P 和更动态的环境中缓存 ICE 候选者和 sdp 并不是一个好的做法,因为你缓存的东西可能无法申请下一个 WebRTC 连接。但是,在我们确切知道连接路线应该如何的情况下呢?
更具体,
在这种情况下,我们确切地知道对等点的 IP 是什么,并且我们确切地知道 TURN 服务器的 IP 是什么(假设它不会改变),是否可以缓存 ICE 候选(TURN)和 SDP 或SDP 的部分只是为了绕过 ICE 候选者和 SDP 交换部分?
我知道 TURN 中有 a client、 aTURN server和peer(s)。客户端本身在 TURN 服务器上创建一个分配,之后relayed transport address将 a 返回给客户端,以便将数据发送到一个或多个对等点。
我了解客户端如何绕过其 NAT,但是我在 RFC5766 中没有看到任何有关对等方本身如何能够通过其 NAT 从 TURN 服务器接受 UDP 的内容(否则无论是否通过 TURN,它都将是主动提供的) UDP)。对等点必须首先联系 TURN 服务器。
我缺少一个步骤吗?是否relayed transport address发送到对等方,以便在 TURN 服务器与其对等方之间进行通信之前可以开始 UDP 打洞?
我已经安装了 TURN 服务器,服务器代码中的一切工作正常。日志文件中没有错误。只是一个警告说明
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
Run Code Online (Sandbox Code Playgroud)
但是TURN服务器运行在服务器上。
这是我检查时显示的内容 lsof -i :3478
turnserve 999 root 15u IPv4 446811411 0t0 TCP domain.com:stun (LISTEN)
turnserve 999 root 23u IPv4 446811417 0t0 TCP domain:stun (LISTEN)
turnserve 999 root 24u IPv4 446810998 0t0 UDP domain.com:stun
turnserve 999 root 25u IPv4 446810999 0t0 UDP domain.com:stun
Run Code Online (Sandbox Code Playgroud)
当我在Trickle ICE 中检查 STUN 时,它会引发错误
The server stun:xxx.xxx.xxx.xxx:3478 returned an error with code=701:
STUN server address is …Run Code Online (Sandbox Code Playgroud)