如何解决RTCPeerConnections或 mediaStreams?即使在关闭后也会占用内存和 CPU
我目前正在使用 PeerJS(WebRTC 包装器)构建视频通话应用程序。在调试过程中,我注意到运行多个对等连接不仅占用了大量 CPU,而且在连接关闭和各自的 mediaStream 停止时 CPU 使用率并没有减少。
当对等方断开连接(关闭/刷新选项卡)并打开呼叫时,该连接将与另一端的对等方关闭。此外,在“关闭”事件中,另一个对等点停止终止的对等点的流轨道,并使用 jQuery remove()
从 DOM 中删除他们正在播放的视频容器。
conn.on("close",() => {
console.log("conn closed");
let streamToKill = document.getElementById(`${peerID}`).srcObject;
streamToKill.getTracks().forEach(track => track.stop());
$(`#${peerID}`).parent().parent().remove();
我在运行网站时观察了我的任务管理器。当对等方创建一个房间并流式传输他们的视频/麦克风时,大约会使用 10% 的 CPU。当另一个对等点调用它们并发送它们的流时,CPU 会跳到 80% 左右。
当第二个对等点断开/关闭连接时,由于流、视频元素和连接消失,我预计原始对等点的 CPU 使用率会回落,但它仍然飙升至 80% 左右,并且标签慢慢爬上来。这是我的硬件、代码、卸载/处理连接/流的问题吗?
解决方法
正如我在上面对@blanknamefornow 的回复中所指出的,DataConnection 似乎关闭得很好。我怀疑 connectionStateChange: failed
和 iceCandidateError
是由 MediaConnection 拖延并尝试重新连接引起的,可能仍在广播用户的 mediaStream。
我保留了一个数组来记录所有打开的媒体连接。因此,为了解决这个问题,我过滤了数组并关闭/删除了与关闭的 DataConnection 具有相同 peerID 的 MediaConnection。
for (var x = 0; x < openMediaConnections.length; x++) {
let openMediaConn = openMediaConnections[x];
if (openMediaConn.peer == peerID) {
openMediaConn.close();
openMediaConnections.splice(x,1)
}
};
现在,当通话断开时,CPU 会降低到 25% 左右,这是一个很大的改进。感谢您的空白名称!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。