我什么时候可以认为 RTCPeerConnection 已断开连接?



我正在尝试检测RTCPeerConnection的另一端何时断开连接。目前,我正在使用我的RTCPeerConnection对象执行以下操作:

rtcPeerConnection.oniceconnectionstatechange = () => {
const state = rtcPeerConnection.iceConnectionState;
if (state === "failed" || state === "closed") {
// connection to the peer is lost and unsalvageable, run cleanup code
} else if (state === "disconnected") {
// do nothing in the "disconnected" state as it appears to be a transient 
// state that can easily return to "connected" - I've seen this with Firefox
}
};

这似乎适用于我有限的测试,网络条件非常简单,但 MDN 的以下内容让我停下来,它可能不会在生产中站得住脚:

当然,">

断开连接"和"关闭"并不一定表示错误;这些可能是正常ICE协商的结果,因此请务必正确处理这些错误(如果有的话(。

我是否应该使用RTCPeerConnection.onconnectionstatechange并考虑如果连接"closed""failed""disconnected"RTCPeerConnection.connectionState永久关闭?

该规范对该主题进行了非常精心设计的建议:

建议在iceConnectionState转换为"failed"时执行 ICE 重新启动。应用程序还可以选择侦听iceConnectionState转换到"disconnected",然后使用其他信息源(例如使用getStats来测量在接下来的几秒钟内发送或接收的字节数是否增加(来确定是否建议重新启动 ICE 重新启动。

查看添加此内容的规范和 PR

请注意,由于错误,Chrome 不再在统一计划中进入"失败"。 "关闭"只有在您的代码调用 pc.close(( 时才会发生,因此从 Chrome 80 开始不再在 iceconnectionstatechange 中触发。

相关内容

  • 没有找到相关文章

最新更新