有非常简单的代码:
<script type="text/javascript">
pc = new window.RTCPeerConnection();
pc.onicecandidate = function(event) {
console.log("onicecandidaten", event);
}
pc.onicegatheringstatechange = function(event) {
console.log("onicegatheringstatechangen", event);
}
dc = pc.createDataChannel("dataChannel");
errFunc = function(err) {
console.log("errFuncn", err);
}
successCback = function() {
console.log("setLocalDescription is a successn");
}
pc.createOffer()
.then(function(offer) { pc.setLocalDescription(offer)})
.then(successCback)
.catch(errFunc);
</script>
让 ubuntu 运行 chromium 和两个本地以太网接口。 运行上述代码只会产生1次对 onicecandidate 的调用,并且1调用 onicegathering statechange。(任何 STUN/TURN 服务器都故意没有指定,所以我确实只期望本地主机候选,但来自所有接口(。ICE仅检查一个以太网接口。
为什么?
除非您拥有getUserMedia的权限,否则Chrome会将ICE候选限制为默认路由的接口。本草案解释了理由