我正在通过 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 udp 2122194687 10.10.10.4 50816 typ host generation 0
09. a=candidate:2097250933 1 tcp 1518214911 10.10.10.4 0 typ host generation 0
10. a=candidate:3500406889 1 udp 1685987071 88.88.88.88 50816 typ srflx raddr 10.10.10.4 rport 50816 generation 0
11. a=ice-ufrag:2066nM5kqwFDQMBT
12. a=ice-pwd:thO7oP0H+H1VBHFNfT8SLFiI
13. a=ice-options:google-ice
14. a=fingerprint:sha-256 72:87:BF:AD:03:9C:09:A7:58:0C:3A:DF:.....:B7
15. a=setup:actpass
16. a=mid:data
17. a=sctpmap:5000 webrtc-datachannel 1024
我确信互联网可以通过 NAT 访问我的机器并且端口转发很好(我的机器是 NAT 转发到的默认主机)。
- 为什么我的报价/答案中没有报告 TCP 服务器自反候选人?
- Chrome 是否缺少服务器自反 ICE-TCP 候选发现?
- 给定 STUN 服务器报告的公共 IP,是否可以手动添加服务器自反候选?