webrtc 连接断开但声音仍在

webrtc connection gets disconnected but sound is still on

我有一个使用 WebRTC 的视频聊天应用程序。有一个小问题:下面是我的 oniceconnectionstatechage 代码:

connection.oniceconnectionstatechange = function () {
    if (connection.iceConnectionState == 'disconnected' || connection.iceConnectionState == 'closed')
        console.log('connection gone.')
};

问题是,有时当网速不佳时,我的连接会断开,我在控制台中看到 "connection gone",但声音仍然存在。双方都能听到对方的声音,但视频消失了。这种情况怎么办才能完全断开连接?

当网络连接不稳定时,您会在控制台中看到 connection gone,因为 iceConnectionState 的状态可能 disconnected

a transient state, e. g. on a flaky network, that can recover by itself. (Mozilla Developer Network)

可能 - 这是一个假设 - 在 some/many 这种情况下,由于可用带宽不能同时支持音频和视频,视频会被丢弃。

如果你真的想在断开连接时完全关闭连接,你可以在[=26]中替换你的if语句(包括console.log) =]oniceconnectionchange 监听器,代码如下:

if (connection.iceConnectionState == 'disconnected'){
   console.log('Connection gone. Closing connection.');
   connection.close();
}

因此每个 disconnect 之后都会完全关闭连接。

但是,这可能是不好的做法: 为什么仅仅因为网络暂时出现问题就想关闭整个连接? 我假设在实际应用程序中使用此代码会导致糟糕的用户体验,因为在许多情况下会出现断开连接,否则用户不会注意到。我建议最好在(频繁)断开连接的情况下向用户显示警告。