首页 > 解决方案 > ICE 候选人仅从一个网络接口收集

问题描述

得到非常简单的代码:

<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 服务器,所以我只希望本地主机候选者,但来自所有接口)。ICE只检查一个以太网接口。

为什么 ?

标签: webrtcice

解决方案


除非您拥有 getUserMedia 的权限,否则 Chrome 会将 ICE 候选者限制在默认路由的接口上。本草案解释了理由


推荐阅读