Fix: Offline-Erkennung loeste Reconnect-Resets aus (Zaehlung gestoert)
Bei GRABBER_ALWAYS_ON=0 kappte kurzes Zuschauer-Aus (<img>-Reload der Auto-Recovery) die Kameraverbindung -> Reconnect -> Tracker/Zaehlzustand wurde zurueckgesetzt. Bei ~1 FPS riss das die Zaehlung auseinander. - Grabber: Karenzzeit (VIEWER_GRACE_SEC, Default 15s) bevor die Kamera bei fehlenden Zuschauern freigegeben wird -> kein Reconnect-Churn - Frontend: Overlay/Reload erst nach ~6s echtem Ausfall (3 Polls), nicht bei einzelnen langsamen Frames -> kein Verbindungs-Churn Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -288,7 +288,9 @@
|
||||
// --- Kamera-Online-Status pollen + Auto-Recovery des Streams ---
|
||||
const videoFeed = document.getElementById('videoFeed');
|
||||
const offlineOverlay = document.getElementById('offlineOverlay');
|
||||
let camWasOffline = false;
|
||||
let offlineStreak = 0; // aufeinanderfolgende Offline-Abfragen
|
||||
let reloadPending = false; // erst nach echtem Ausfall den Stream neu laden
|
||||
const OFFLINE_POLLS = 3; // ~6s -> erst dann "wirklich offline"
|
||||
async function checkCamStatus() {
|
||||
let online = false;
|
||||
try {
|
||||
@@ -297,12 +299,22 @@
|
||||
} catch (e) {
|
||||
online = false;
|
||||
}
|
||||
if (online && camWasOffline) {
|
||||
// MJPEG-<img> reconnectet nach Stream-Abbruch nicht von selbst -> neu anstossen
|
||||
videoFeed.src = "{{ url_for('webcam_feed') }}?t=" + Date.now();
|
||||
if (online) {
|
||||
// Nur nach einem laengeren Ausfall den MJPEG-Stream neu anstossen
|
||||
// (sonst Verbindungs-/Reconnect-Churn bei kurzen Aussetzern).
|
||||
if (reloadPending) {
|
||||
videoFeed.src = "{{ url_for('webcam_feed') }}?t=" + Date.now();
|
||||
reloadPending = false;
|
||||
}
|
||||
offlineStreak = 0;
|
||||
offlineOverlay.classList.remove('show');
|
||||
} else {
|
||||
offlineStreak++;
|
||||
if (offlineStreak >= OFFLINE_POLLS) {
|
||||
offlineOverlay.classList.add('show');
|
||||
reloadPending = true;
|
||||
}
|
||||
}
|
||||
camWasOffline = !online;
|
||||
offlineOverlay.classList.toggle('show', !online);
|
||||
}
|
||||
checkCamStatus();
|
||||
setInterval(checkCamStatus, 2000);
|
||||
|
||||
Reference in New Issue
Block a user