我有一个使用HTML5 + WebRTC完美运作的视频会议应用程序。 STUN / TURN服务器由第三方公司提供,不免费。WebRTC在浏览器之间进行一些信息交换后选择最佳方式连接两个对等方,如果可能,它将使用不涉及TURN服务器的直接连接。
问题是,是否可以检测到RTCPeerConnection使用直接连接还是中间的TURN服务器建立?
我有一个使用HTML5 + WebRTC完美运作的视频会议应用程序。 STUN / TURN服务器由第三方公司提供,不免费。WebRTC在浏览器之间进行一些信息交换后选择最佳方式连接两个对等方,如果可能,它将使用不涉及TURN服务器的直接连接。
问题是,是否可以检测到RTCPeerConnection使用直接连接还是中间的TURN服务器建立?
这段代码在谷歌浏览器中可用。
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。