Я искал почти везде и не могу найти какой-либо ресурс по этому сценарию по какой-то причине.Любая помощь будет принята с благодарностью.
Проблема заключается в следующем:
У меня 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.
Чтобы решить эту проблему, я попыталсясоздайте объект, подобный этому:
{room: 1, peer: RTCPeerConnection}
, сохраните его в массиве и получите одноранговое соединение в соответствии с идентификатором комнаты и установите соединение на основе RTCPeerConnection, котороехранится в соответствии с roomId.Но это не сработало.
Как мне обойти это, не устанавливая сокет-сервер, который обрабатывает эту связь?
В настоящее время я устанавливаю соединения следующим образом, если это помогает:
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();
}
Это не удается, потому чтоконечно, вы не можете хранить proto объекта в localStorage (RTCPeerConnection).Когда я читаю / разбираю его, атрибут peer становится пустым объектом.Если я пытаюсь использовать глобальную переменную вместо localStorage, она всегда будет пустой.Я очень признателен за любой совет по этому вопросу.