gpt4 book ai didi

javascript - 泄漏 RTCPeerConnection。即使在页面刷新之后

转载 作者:行者123 更新时间:2023-11-30 11:48:25 24 4
gpt4 key购买 nike

我有一个非常简单的 RTCPeerConnection 应用在运行。使用 Firebase 发送信号。 RTCPeerConnections 建立,然后我获取流,并对其执行以下操作:

let streamURL = window.URL.createObjectURL(stream);

然后我使用那个 streamURL 并设置 video.src = streamURL。这就是我看到远程用户视频的方式。然后,当我完成连接(我想结束对话)时,我会执行以下操作:

peerConnection.getLocalStreams().forEach(stream=>{
stream.getTracks().forEach(t=>{
t.stop();
stream.removeTrack(t);
});
});
peerConnection.close();

这将结束连接,包括关闭我本地网络摄像头的绿灯。这告诉我大部分事情已经结束了。

然后我检查chrome://webrtc-internals并且连接仍然存在。即使在我刷新之后,连接仍然存在。这似乎很奇怪。刷新之后怎么可能还在呢?请帮忙。我没有正确结束 RTCPeerConnection 吗?我认为这是正确的方法。我只是想不通 webrtc 内部如何在页面刷新后仍然可以显示它。请帮忙!

最佳答案

你做得对。唯一缺少的是:

peerConnection = null;

让对等连接本身被垃圾收集。

因为我mentioned elsewhere我会避免使用 createObjectURL 并直接使用 video.srcObject = stream,但这与在您忘记停止所有轨道时释放相机有关。

我不会过多地阅读 Chrome 的 webrtc-internals 页面,因为查看对等连接对于调试很有用,即使在事后也是如此。重要的问题是:是否有任何 JavaScript 或可观察到的连接打开迹象?

例子

你可以试试this https fiddle在两个不同的选项卡或窗口中查看远程失败的情况。

确保您可以同时看到两个 fiddle ,然后单击其中一个中的 [Start!] 按钮进行连接。您应该在两个地方都看到视频。现在,当您单击 [Stop!] 按钮时,您应该会在另一端看到以下输出(这三个输出可能需要几秒钟才能显示):

disconnected
failed
closed

因为我检查了 "failed" 状态并关闭了它的连接(尽管在生产中更常见的是使用 data channels to communicate hangups )。

Chrome

就是说,我不会完全排除 Chrome 中的一个错误,因为它可能会比应有的时间更长时间地占用资源,正如我所看到的与您描述的相同(但请注意,例如“已发送的数据包”当我点击“停止!”时下降到零,这是重要的部分)。

对比 Firefox,当我转到 about:webrtc(相当于 chrome://webrtc-internals)并点击刷新和 [清除历史记录] 按钮时,我的对等连接从列表中消失了。

关于javascript - 泄漏 RTCPeerConnection。即使在页面刷新之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40198128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com