On bad network conditions disconnected can happen periodically (#161)

but it doesn't mean channel is already broken.
It's better wait `failed` state since `disconnected`
can be changed to `connected` at any moment.
Also fixes reconnect on Firefox.
This commit is contained in:
Sergey Radionov 2024-03-11 13:37:23 +07:00 committed by GitHub
parent 6ad14ad833
commit 6b0f94c78d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -156,6 +156,13 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_aud
__destroyJanus(); __destroyJanus();
}, },
"peerConnectionState": function(state) {
__logInfo("Peer connection state changed to", state);
if (state === "failed") {
__destroyJanus();
}
},
"iceState": function(state) { "iceState": function(state) {
__logInfo("ICE state changed to", state); __logInfo("ICE state changed to", state);
// Если раскомментировать, то он начнет дрючить соединение, // Если раскомментировать, то он начнет дрючить соединение,
@ -245,12 +252,10 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_aud
} }
if (!has_video && __isOnline()) { if (!has_video && __isOnline()) {
// Найдено в Windows 11 и Chrome/Edge. // Chrome sends `muted` notifiation for tracks in `disconnected` ICE state
// При перезагрузке целевого хоста браузер мьютит трек, // and Janus.js just removes muted track from list of available tracks.
// приходит стрим без видеотрека и всё умирает. // But track still exists actually so it's safe to just ignore that case.
// Связь должна как-то сама восстанавливаться, return;
// но этого почему-то не происходит. Костыль решает проблему.
__destroyJanus();
} }
_Janus.attachMediaStream($("stream-video"), stream); _Janus.attachMediaStream($("stream-video"), stream);