Javascript 泄漏的RTC对等连接。即使在页面刷新之后

Javascript 泄漏的RTC对等连接。即使在页面刷新之后,javascript,webrtc,peer-connection,Javascript,Webrtc,Peer Connection,我有一个非常简单的RTPeerConnection应用程序正在运行。使用Firebase发送信号。建立RTPeerConnections,然后获取流,并对其执行以下操作: let streamURL = window.URL.createObjectURL(stream); 然后我使用streamURL并设置video.src=streamURL。这就是我如何让它看到远程用户的视频。然后,当我完成连接(我想结束对话)时,我会执行以下操作: peerConnection.getLocalStre

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

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();
这将结束连接,包括关闭本地网络摄像头的绿灯。这告诉我,事情在很大程度上已经结束了


然后我检查,连接仍然存在。即使在我刷新之后,连接仍然存在。这似乎很奇怪。即使在刷新之后,它怎么还能在那里?请帮忙。我是否没有正确结束RTPeerConnection?我认为这是正确的方法。我只是不明白webrtc内部如何在页面刷新后仍然显示它。请帮忙

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

peerConnection = null;
让对等连接本身被垃圾收集

正如我之前所说,我会避免使用createObjectURL,而是直接使用
video.srcObject=stream
,但如果忘记停止所有轨迹,这与释放相机有关

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

例子 您可以尝试在两个不同的选项卡或窗口中,远程查看失败的情况

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

因为我检查了
“failed”
状态并关闭了它的连接(尽管在生产中使用它更为常见)

铬 也就是说,我不会完全排除Chrome中的一个bug,因为它可能会比应该的时间更久地占用资源,因为我看到了与您描述的相同的事情(但请注意,例如,当我单击“停止!”时,“发送的数据包”会降至零,这是重要的部分)


与Firefox形成对比的是,where,when,when,when,when,when,when,when,when,when,when,when,when,when,when,when,when,when,when,when,whenchrome://webrtc-internals)点击刷新和[清除历史记录]按钮,我的对等连接将从列表中消失。

看看这个答案。这有助于正确创建流。这是我的Chrome。当你说页面刷新时,你是在刷新页面吗chrome://webrtc-internals 页面,还是你的页面?@jib我正在刷新我的页面。不是webrtc内部页面。这正是我想知道的。在尽我所能之后,我认为webrtc内部必须被破坏或其他什么的。而且,我将使用srcObject来代替我正在做的事情。谢谢你的建议。这些太棒了!
disconnected
failed
closed