【问题标题】:Why do STUN requests fail when sent from certain websites?为什么从某些网站发送 STUN 请求会失败?
【发布时间】:2020-11-11 19:22:25
【问题描述】:
(async function()
{
    var iceServers = [{ urls: ["stun:stun.l.google.com:19302"] }];
    
    var peer = new RTCPeerConnection({ iceServers });
    peer.channel = peer.createDataChannel("channel");
    
    peer.onicecandidate = function(e)
    {
        if(e.candidate)
            console.log(JSON.stringify(e.candidate, null, '\t'));
        else
            console.log("DONE");
    };
    
    peer.onicecandidateerror = (e) => console.error(e);
    
    var offer = await peer.createOffer();
    await peer.setLocalDescription(offer);
})();

我使用这个示例代码来测试连接到 STUN 服务器并列出生成的 ICE 候选。如果我将它粘贴到控制台中,取决于我当前访问的网站,icecandidateerror 事件会被触发。 IPV6 地址全是 x,看起来无效。它发生在 Chrome 而不是 Firefox 中。这是我收到的错误:

RTCPeerConnectionIceErrorEvent
address: "[0:0:0:x:x:x:x:x]"
bubbles: false
cancelBubble: false
cancelable: false
composed: false
currentTarget: RTCPeerConnection {…}
defaultPrevented: false
errorCode: 701
errorText: "STUN host lookup received error."
eventPhase: 0
hostCandidate: "[0:0:0:x:x:x:x:x]:33860"
isTrusted: true
path: []
port: 33860
returnValue: true
srcElement: RTCPeerConnection {…}
target: RTCPeerConnection {…}
timeStamp: 2621.4149999996152
type: "icecandidateerror"
url: "stun:stun.l.google.com:19302"

这是我尝试过此代码的网站列表:

某些域名会导致此错误的原因是什么?会不会是 Chrome 的错误?

【问题讨论】:

    标签: javascript google-chrome webrtc


    【解决方案1】:

    您可能已获得对标记为“良好”的网站来源的摄像头访问权限。这会改变行为。

    强制免责声明:webrtc 不是为了收集 IP 地址而构建的。

    【讨论】:

    • 你是对的;我为“好”网站启用了相机权限。我们的应用程序只需要数据通道,所以它从我身边溜走了。有没有办法在不请求许可的情况下解决错误(除了不记录它)?
    • 忽略它。 onicecandidateerror 是诊断性的,只有在失败时才有用
    猜你喜欢
    • 2016-03-19
    • 2021-01-23
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多