检查WebRTC点对点连接是否经过TURN服务器传输

10

我有一个使用HTML5 + WebRTC完美运作的视频会议应用程序。 STUN / TURN服务器由第三方公司提供,不免费。WebRTC在浏览器之间进行一些信息交换后选择最佳方式连接两个对等方,如果可能,它将使用不涉及TURN服务器的直接连接。

问题是,是否可以检测到RTCPeerConnection使用直接连接还是中间的TURN服务器建立?


1
这可能会有所帮助 https://testrtc.com/find-webrtc-active-connection/ - Keyne Viana
谢谢你的提示,它对于理解正在发生的事情至少有所帮助。 - Gonzalo
您可以在 Google Chrome 中检查,输入 chrome://webrtc-internals/ 在 URL 中,它将列出活动连接,粗体字的连接是您的活动连接,并且它将显示它是本地、反射还是中继(使用 TURN)。 - Mhadonis
1个回答

6

这段代码在谷歌浏览器中可用。

    const stats = await pc.getStats()
    let selectedLocalCandidate
    for (const {type, state, localCandidateId} of stats.values())
        if (type === 'candidate-pair' && state === 'succeeded' && localCandidateId) {
            selectedLocalCandidate = localCandidateId
            break
        }
    return !!selectedLocalCandidate && stats.get(selectedLocalCandidate)?.candidateType === 'relay')

这个想法是通过pc.getStats()迭代每个报告(stats)来查找选定的ICE候选者对,检查本地候选者的id并根据候选者的类型确定连接是否使用了TURN。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接