ICE 候选人仅从一个网络接口收集
ICE candidates gathered only from one network interface
得到非常简单的代码:
<script type="text/javascript">
pc = new window.RTCPeerConnection();
pc.onicecandidate = function(event) {
console.log("onicecandidate\n", event);
}
pc.onicegatheringstatechange = function(event) {
console.log("onicegatheringstatechange\n", event);
}
dc = pc.createDataChannel("dataChannel");
errFunc = function(err) {
console.log("errFunc\n", err);
}
successCback = function() {
console.log("setLocalDescription is a success\n");
}
pc.createOffer()
.then(function(offer) { pc.setLocalDescription(offer)})
.then(successCback)
.catch(errFunc);
</script>
获得 ubuntu 运行 chromium 和 两个 本地以太网接口。
运行 上述代码仅产生 1 调用 onicecandidate 和
1 调用 onicegatheringstatechange。 (故意未指定任何 STUN/TURN 服务器,因此我确实只希望本地主机候选,但来自 all 接口)。 ICE 仅检查 one 以太网接口。
为什么?
除非您有 getUserMedia 的权限,否则 Chrome 会将 ICE 候选人限制在默认路由的界面。原理解释in this draft
得到非常简单的代码:
<script type="text/javascript">
pc = new window.RTCPeerConnection();
pc.onicecandidate = function(event) {
console.log("onicecandidate\n", event);
}
pc.onicegatheringstatechange = function(event) {
console.log("onicegatheringstatechange\n", event);
}
dc = pc.createDataChannel("dataChannel");
errFunc = function(err) {
console.log("errFunc\n", err);
}
successCback = function() {
console.log("setLocalDescription is a success\n");
}
pc.createOffer()
.then(function(offer) { pc.setLocalDescription(offer)})
.then(successCback)
.catch(errFunc);
</script>
获得 ubuntu 运行 chromium 和 两个 本地以太网接口。 运行 上述代码仅产生 1 调用 onicecandidate 和 1 调用 onicegatheringstatechange。 (故意未指定任何 STUN/TURN 服务器,因此我确实只希望本地主机候选,但来自 all 接口)。 ICE 仅检查 one 以太网接口。
为什么?
除非您有 getUserMedia 的权限,否则 Chrome 会将 ICE 候选人限制在默认路由的界面。原理解释in this draft