我几乎到处搜索,但由于某种原因,似乎在这种情况下找不到任何资源。任何帮助将不胜感激。
问题是这样的:
我有 4 个用户。可以说:A、B、C 和 D。我想根据 url 匹配它们。例如,如果 A 和 B 连接到 &room=1 并且 C 和 D 连接到 &room=2 我想在 A 和 B 对以及 C 和 D 对之间建立连接。
目前我的代码只建立A和B之间的连接,如果C或D用户之一发起呼叫,A和B之间的连接断开,C找不到D。
为了解决这个问题,我尝试创建一个像这样的对象:
{ 房间:1,对等点:RTCPeerConnection }
并将其存储在一个数组中,根据 roomid 获取对等连接,并基于根据 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) 中。当我对它进行字符串化/解析时,它的对等属性是一个空对象。如果我尝试使用全局变量而不是 localStorage,它总是为空。我非常感谢有关此问题的任何提示。