我可以使用以下代码创建新的对等连接对象:
var peer = new RTCPeerConnection();
发生这种情况时,chrome 会在chrome://webrtc-internals/
中将其显示为新的连接对象
我想稍后销毁这个对象。怎么办?我试过了
peer.close();
但这似乎没有任何作用,因为peer
变量仍然是 RTCPeerConnection 类型,我仍然可以看到它在chrome://webrtc-internals/
中处于活动状态。
如果我取消设置变量,例如
peer=false;
它仍然以chrome://webrtc-internals/
显示它.然而,如果我关闭网页,那么它会立即从chrome://webrtc-internals/
中消失。
释放RTCPeerConnection对象的正确方法是什么?我问是因为如果我不释放它们,我偶尔会被拒绝来自网络浏览器来创建新的 RTCPeerConnection,因为使用它们太多了。
实际上
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
你想在哪个事件上摧毁它? 代码中可能缺少使连接保持打开状态的部分 这是一本完整的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 上也有错误,它会使内存泄漏,不确定此错误是否仍然存在。
当用户退出时还有一件事,例如关闭浏览器窗口 如果我们仍处于"报价"、"答案"或"候选"状态,这可能会有所帮助
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");
});