mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
pikvm/pikvm#1057: web: fixed onremotestream bug if there is no video track
This commit is contained in:
parent
2b0515dc55
commit
68bfb04bb4
@ -220,26 +220,39 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_aud
|
||||
},
|
||||
|
||||
"onremotestream": function(stream) {
|
||||
__logInfo("Got a remote stream changes:", stream);
|
||||
if (stream.active) {
|
||||
_Janus.attachMediaStream($("stream-video"), stream);
|
||||
__sendKeyRequired();
|
||||
__startInfoInterval();
|
||||
// FIXME: Задержка уменьшается, но начинаются заикания на кейфреймах.
|
||||
// - https://github.com/Glimesh/janus-ftl-plugin/issues/101
|
||||
/*if (__handle && __handle.webrtcStuff && __handle.webrtcStuff.pc) {
|
||||
for (let receiver of __handle.webrtcStuff.pc.getReceivers()) {
|
||||
if (receiver.track && receiver.track.kind === "video" && receiver.playoutDelayHint !== undefined) {
|
||||
receiver.playoutDelayHint = 0;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
} else {
|
||||
// В каких-то случаях стрим может иметь флаг active=false,
|
||||
// но при этом янус работает. Хз почему.
|
||||
// - https://github.com/pikvm/pikvm/issues/1057
|
||||
let tracks = stream.getTracks();
|
||||
__logInfo("Got a remote stream changes:", stream, tracks);
|
||||
|
||||
let has_video = false;
|
||||
for (let track of tracks) {
|
||||
if (track.kind == "video") {
|
||||
has_video = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_video && __isOnline()) {
|
||||
// Найдено в Windows 11 и Chrome/Edge.
|
||||
// При перезагрузке целевого хоста браузер мьютит трек,
|
||||
// приходит стрим без видеотрека и всё умирает.
|
||||
// Связь должна как-то сама восстанавливаться,
|
||||
// но этого почему-то не происходит. Костыль решает проблему.
|
||||
__destroyJanus();
|
||||
}
|
||||
|
||||
_Janus.attachMediaStream($("stream-video"), stream);
|
||||
__sendKeyRequired();
|
||||
__startInfoInterval();
|
||||
|
||||
// FIXME: Задержка уменьшается, но начинаются заикания на кейфреймах.
|
||||
// - https://github.com/Glimesh/janus-ftl-plugin/issues/101
|
||||
/*if (__handle && __handle.webrtcStuff && __handle.webrtcStuff.pc) {
|
||||
for (let receiver of __handle.webrtcStuff.pc.getReceivers()) {
|
||||
if (receiver.track && receiver.track.kind === "video" && receiver.playoutDelayHint !== undefined) {
|
||||
receiver.playoutDelayHint = 0;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
},
|
||||
|
||||
"oncleanup": function() {
|
||||
@ -272,7 +285,6 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_aud
|
||||
|
||||
var __updateInfo = function() {
|
||||
if (__handle !== null) {
|
||||
let online = !!(__state && __state.source && __state.source.online);
|
||||
let info = "";
|
||||
if (__handle !== null) {
|
||||
// https://wiki.whatwg.org/wiki/Video_Metrics
|
||||
@ -290,10 +302,14 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __allow_aud
|
||||
info = `${__handle.getBitrate()}`.replace("kbits/sec", "kbps");
|
||||
}
|
||||
}
|
||||
__setInfo(true, online, info);
|
||||
__setInfo(true, __isOnline(), info);
|
||||
}
|
||||
};
|
||||
|
||||
var __isOnline = function() {
|
||||
return !!(__state && __state.source && __state.source.online);
|
||||
};
|
||||
|
||||
var __sendWatch = function() {
|
||||
if (__handle) {
|
||||
__logInfo(`Sending WATCH(audio=${__allow_audio}) + FEATURES ...`);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user