我的一个webrtc应用程序在我测试的所有PC上都运行得很好,甚至是虚拟机,但它在Windows Server2012 R2上不起作用。我追踪到服务器上缺少服务器自反(srflx)候选服务器。
使用这段测试代码(在chrome dev控制台上运行它):
var rtc = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var r = new rtc({ iceServers: [{ urls: "stun:stun.l.google.com:19302" }] }, {});
r.onicecandidate = function (a) { console.log('candidate:', JSON.stringify(a.candidate)); };
r.onicecandidateerror = function(a) { console.log('error:', a); }
r.createDataChannel("");
r.createOffer().then(x);
function x(a) {
r.setLocalDescription(a, function () {}, function () {});
}
在我的PC上,它显示了如下内容:
candidate: {"candidate":"candidate:1221703924 1 udp 2113937151 a044b6a7-4d08-XXXX-XXXX-bc858326ac0f.local 59233 typ host generation 0 ufrag IYpO network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: {"candidate":"candidate:842163049 1 udp 1677729535 111.222.333.444 59233 typ srflx raddr 0.0.0.0 rport 0 generation 0 ufrag IYpO network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: null
但在服务器上,它看起来像这样:
candidate: {"candidate":"candidate:3704228534 1 udp 2113937151 e277d76d-XXXX-XXXX-9471-3461192326ad.local 50857 typ host generation 0 ufrag WWDW network-cost 999","sdpMid":"0","sdpMLineIndex":0}
candidate: null
是什么原因导致srflx候选丢失?使用带有凭证的turn服务器而不是stun来做同样的事情。也尝试关闭windows防火墙。
发布于 2020-10-31 09:38:00
这里也是一样。您的问题可能是udp通信被阻塞,但我的问题是在运行本地STUN服务器时中间没有NAT。使用MDNS解析无意义的候选主机。因为它与srflx候选的ip相匹配,所以它被丢弃。如果您在本地网络上,无法解析MDNS,则需要中继,这是垃圾。我的内网ip地址是10.43.212.107。全世界都可以拥有它。我才不会管一只会飞的猴子。MDNS是垃圾!
5.1.3。消除多余的候选者
接下来,ICE代理(发起和响应)消除多余的候选对象。两个候选人可以有相同的交通地址,但不同的基地,这将不会被认为是多余的。通常,当代理不在NAT之后时,服务器自反候选和主机候选将是冗余的。当且仅当一个候选者的传输地址和基地址等于另一个候选者的传输地址和基地址时,该候选者是冗余的。智能体应该剔除优先级较低的冗余候选。
发布于 2020-01-21 19:43:50
这通常意味着UDP在该机器上被阻塞( onicecandidateerror回调可能提供更多洞察)。
https://bloggeek.me/turn-public-ip-address/很好地总结了为什么除了TURN/UDP之外还需要转向/TCP和TURN/TLS。
https://stackoverflow.com/questions/59833954
复制相似问题