我几乎在所有地方搜索过,由于某种原因,似乎在这种情况下找不到任何资源。任何帮助将不胜感激。
问题是这样的:
我有4个用户。可以说:A,B,C和D。我想根据网址进行匹配。例如,如果A和B连接到&room = 1,C和D连接到&room = 2,我想在A和B对以及C和D对之间建立连接。
当前我的代码仅在A和B之间建立连接,并且如果C或D用户之一发起呼叫,则A和B之间的连接将断开,而C无法找到D。
为了解决这个问题,我试图创建一个像这样的对象:
{ 房间:1 对等方:RTCPeerConnection }
并将其存储在数组中,并根据房间ID获取对等连接,并根据根据roomId存储的RTCPeerConnection建立连接。但这没用。
在不建立处理该通信的套接字服务器的情况下,如何解决此问题?
我目前以这种方式建立连接,如果有帮助的话:
navigator.mediaDevices
.getUserMedia({
audio: true,
video: true
})
.then(function (stream) {
localStream = stream;
localVideo.srcObject = localStream;
try {
conn = new RTCPeerConnection(servers);
} catch (err) {
console.log("Can't establish connection");
return;
}
localStream.getTracks().forEach(function (track) {
conn.addTrack(track, localStream);
});
conn.onaddstream = function (event) {
setTimeout(() => {
callButton.click();
}, 2000);
remoteVideo.srcObject = event.stream;
};
conn.onicecandidate = function (event) {
if (event.candidate) {
chat.server.iceCandidate(
JSON.stringify({ candidate: event.candidate })
);
}
};
})
.catch(function (err) {
console.log("Error", err);
});
这是我失败的解决方案:
var connections = JSON.parse(localStorage.getItem("connections")) || [];
var connection;
if (connections) {
connection = connections.find(function (conn) {
return conn.id = roomId;
})
}
if (!connection) {
conn = new RTCPeerConnection(servers);
var data = {
id: roomId,
peer: conn
}
localStorage.removeItem("connections");
localStorage.setItem("connections", JSON.stringify(connections));
} else {
conn = JSON.parse(connection.peer);
conn.__proto__ = new RTCPeerConnection();
}
此操作失败是因为您当然不能在localStorage(RTCPeerConnection)中存储对象的 proto 。当我进行字符串化/解析时,对等属性作为一个空对象出现。如果我尝试使用全局变量而不是localStorage,则它始终为空。我非常感谢有关此问题的任何提示。
答案 0 :(得分:0)
就像您搞砸了localStorage变量一样,出于测试目的并避免了信令服务器的实现,我建议使用serverless-webrtc或更新的by jameshfisher
由此,您可以创建房间(分隔客户端)并显示一条sdp消息,以复制并粘贴到其他客户端(不使用localStorage)以建立对等连接。 最好在浏览器的Firefox <-> chrome,safari等之间进行测试。