Обнаружение того, что браузер-сверстник закрыт в видеочате webrtc
Я использую видеочат webrtc.
Все работает плавно, за исключением случая, когда партнер закрывает браузер.
Я пытался обработать это событие, реализовав встроенный обратный вызов удаленного медиа-потока. Хотя этот обратный вызов, похоже, никогда не называется.
Как я могу обнаружить, что браузер-сверстник закрыт или соединение завершено с другой стороны?
Ответы
Ответ 1
Чтобы определить это, вы можете использовать статус соединения ICE. Если вы отключите один одноранговый узел, требуется несколько секунд (~ 5?) Для его повторной генерации, но он работает даже без сервера сигнализации.
(предполагая, что вы вызвали ваше одноранговое соединение pc
)
pc.oniceconnectionstatechange = function() {
if(pc.iceConnectionState == 'disconnected') {
console.log('Disconnected');
}
}
Ответ 2
Использовать шлюз сигнализации для отправки сообщения всем подключенным одноранговым узлам, которые вы оставляете; например:
window.addEventListener('beforeunload', function () {
userLeft();
}, false);
window.addEventListener('keyup', function (e) {
if (e.keyCode == 116)
userLeft();
}, false);
function userLeft() {
signalingGateway.send({
userLeft: true,
whoLeft: 'user-id'
});
}
signalingGateway.on('message', function (signal) {
if (signal.userLeft && signal.whoLeft != 'current-user-id') {
var relevantPeer = listOfPeers[signal.whoLeft];
if (relevantPeer) {
relevantPeer.close();
relevantPeer = null;
}
var relevantLocalStreams = listOfLocalStreams[signal.whoLeft];
if (relevantLocalStreams.length) {
for (var i = 0; i < relevantLocalStreams.length; i++) {
if (relevantLocalStreams[i].stop) {
relevantLocalStreams[i].stop();
}
// it is suggested to stop media tracks instead!
}
}
}
});
Ответ 3
Просто используйте
connection.onclose = function(event){
event.useid // gives the connection closed userid
}