我有一个使用 HTML5 + WebRTC 完美运行的视频会议应用程序。STUN/TURN 服务器由第三方公司提供,但不是免费的。您可能知道,WebRTC 在浏览器之间进行一些信息交换后,它会选择连接两个对等点的最佳方式,并且如果可能,它使用不涉及 TURN 服务器的直接连接。
问题是,是否可以使用直接连接或中间 TURN 服务器检测 RTCPeerConnection 何时建立?
此代码片段适用于 Chrome
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')
Run Code Online (Sandbox Code Playgroud)
这个想法是迭代统计中的每个报告(通过 pc.getStats()),查找选定的 ICE 候选对,检查本地候选的 id,并通过查看候选的类型来确定连接是否使用 TURN。