dbo*_*tha 2 javascript webrtc 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
}
};
Run Code Online (Sandbox Code Playgroud)
这似乎适用于我在非常简单的网络条件下进行的有限测试,但来自MDN的以下内容让我暂停,它可能不会在生产中保持不变:
当然,“断开”和“关闭”并不一定表示错误;这些可能是正常 ICE 协商的结果,所以一定要正确处理这些(如果有的话)。
RTCPeerConnection.onconnectionstatechange如果RTCPeerConnection.connectionState是"closed","failed"或者,我应该使用并考虑永久关闭连接"disconnected"吗?
该规范针对该主题提供了非常精心制作的建议:
iceConnectionState转换为时,建议执行 ICE 重新启动"failed"。应用程序还可以选择侦听iceConnectionState转换"disconnected",然后使用其他信息源(例如getStats用于测量在接下来的几秒钟内发送或接收的字节数是否增加)来确定是否建议重新启动 ICE。
请注意,由于错误,Chrome 在统一计划中不再“失败”。“关闭”只有在您的代码调用 pc.close() 时才会发生,因此从 Chrome 80 开始不再在 iceconnectionstatechange 中触发。
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |