我有一个使用 webRTC 构建的视频通话应用程序。当用户断开通话时,通话会顺利结束,即使 connectionstatechange 变为 lined 也没关系。结束通话后,我正在运行此功能
async closeConnection() {
if (!this.peer) return;
if (this.peer?.onicecandidate) this.peer.removeEventListener("icecandidate", this.peer.onicecandidate);
if (this?.peer?.ontrack) this.peer.removeEventListener("track", this.peer.ontrack);
if (this?.peer?.onnegotiationneeded)
this.peer.removeEventListener("negotiationneeded", this.peer.onnegotiationneeded);
this.peer.close();
console.log('closing the peer connection....')
}
但是该信息在 chrome://webrtc-internals 中仍然可见,有时浏览器会冻结并显示内存不足,这意味着可能存在内存泄漏。
chrome://webrtc-internals 中的关闭状态
可以采取什么措施来解决这个问题?
关闭 webRTC 连接后,还应从 chrome://webrtc-internals 中删除它,浏览器应释放连接期间使用的所有资源。
这是预期的,因为您仍然在
this.pc
中保留对对等连接的引用。只有通过设置 this.peer = null
释放该引用后,它才能被标记为可用于垃圾回收。
即便如此,也可能不会立即发布。