我可以使用以下代码创建新的对等连接对象:
var peer = new RTCPeerConnection();
发生这种情况时,chrome将其显示为chrome://webrtc-internals/
中的新连接对象
我想稍后销毁该对象。怎么做?我尝试过
peer.close();
但是这似乎没有任何作用,因为peer
变量仍然是RTCPeerConnection类型,我仍然可以在chrome://webrtc-internals/
中看到它处于活动状态。
如果我未设置变量,例如
peer=false;
它仍显示在chrome://webrtc-internals/
中。但是,如果我关闭该网页,则该网页会立即从chrome://webrtc-internals/
中消失。
释放RTCPeerConnection对象的正确方法是什么?我问是因为如果我不释放它们,有时会因为使用太多它们而被Web浏览器拒绝创建新的RTCPeerConnection。
答案 0 :(得分:0)
实际上
peer.close();
是正确的方法。
您还可以执行以下操作:
peer.close();
peer = null;
以下是原始WebRTC代码示例的摘要:
function hangup() {
console.log('Ending call');
pc1.close();
pc2.close();
pc1 = null;
pc2 = null;
hangupButton.disabled = true;
callButton.disabled = false;
}
https://github.com/webrtc/samples/blob/gh-pages/src/content/peerconnection/pc1/js/main.js#L175
答案 1 :(得分:0)
您要销毁哪个事件? 您的代码中可能缺少一部分,使连接保持打开状态 这是一本完整的PDF书籍,解释了WebRtc如何在浏览器上工作,
我正在向您提供这本书,因此您可以检查代码中是否有任何部分使连接保持打开状态,即使您在该特定事件上关闭了对等方,该连接仍会显示并保持打开状态浏览器。
关于您的问题,假设您想通过单击按钮将其关闭,则将其称为“挂断”按钮, //挂断
hangUpBtn.addEventListener("click", function () {
send({
type: "leave"
});
handleLeave();
});
function handleLeave() {
connectedUser = null;
remoteVideo.src = null;
yourConn.close();
yourConn.onicecandidate = null;
yourConn.onaddstream = null;
};
当用户断开连接时,您应该清理其连接。您可以在关闭事件触发时删除用户。将以下代码添加到连接处理程序中
connection.on("close", function() {
if(connection.name) {
delete users[connection.name];
}
});
当用户单击挂起按钮时,它将向另一个用户发送“离开”消息,它将关闭RTCPeerConnection并在本地破坏连接
这应该关闭rtc连接,据我记得即使您关闭了chrome上的bug,也会导致内存泄漏,不确定此bug是否仍然存在。
用户退出时的另一件事,例如关闭浏览器窗口 如果我们仍处于“提供”,“答案”或“候选”状态
connection.on("close", function() {
if(connection.name) {
delete users[connection.name];
if(connection.otherName) {
console.log("Disconnecting from ", connection.otherName);
var conn = users[connection.otherName];
conn.otherName = null;
if(conn != null) {
sendTo(conn, {
type: "leave"
});
}
}
}
});
connection.send("Hello world");
});