Standbild

This commit is contained in:
chk
2026-06-07 10:42:28 +02:00
parent faccbf55ce
commit d3e45262ce
6 changed files with 155 additions and 19 deletions

View File

@@ -75,8 +75,12 @@ Separate Admin-Seite (kein Viewer-Umbau nötig). Pro Kamera eine Zeile mit Combo
**ComboBox-Optionen pro Kamera** (zentral als Konstante, von Server + Client geteilt):
`Aus`, `160×120`, `320×240`, `640×360`, `640×480`, `800×600`, `1280×720`
- `Aus``stream: false` (kein Live-Stream; Viewer zeigt Platzhalter nach Reload)
- Auflösung → `stream: true` + `liveSize: "<W>x<H>"`
- `Aus``stream: false` = **Snapshot-Modus**: kein Video. Der Viewer zeigt stattdessen
alle 5 s ein Einzelbild (`GET /api/snapshot/<id>`) mit grossem Banner „Single Picture
no Video". Server-seitig öffnet jeder Snapshot das Gerät kurz (one-shot via
`grabSnapshot()`) und schliesst es wieder → Gerät meist geschlossen, minimale Mobil-
Bandbreite (1 JPEG/5 s statt 30/s).
- Auflösung → `stream: true` + `liveSize: "<W>x<H>"` (kontinuierlicher MJPEG-Stream)
- Bei cam2 (C920) ein dezenter ⚠-Hinweis-Tooltip: „C920 braucht bei kleinen 4:3-Auflösungen
überdurchschnittlich Bandbreite siehe Doku."
@@ -126,11 +130,12 @@ async reconfigure({ liveSize, stream } = {}) {
}
```
> Hinweis: `stream:false`-Handling läuft primär über `camsMeta` (Viewer baut dann keinen
> `<img>` → kein `acquire()` → On-Demand lässt FFmpeg aus). `reconfigure` muss für `Aus`
> daher nichts hart killen; ein bereits laufender Stream stoppt nach Viewer-Reload via
> Idle-Grace. Optional kann bei `stream:false` zusätzlich `_killCurrentAndWait()` gerufen
> werden, falls sofortiges Stoppen gewünscht ist.
> **Umgesetzt:** `CameraSwitch` hat ein `streamEnabled`-Flag, das NUR den kontinuierlichen
> Live-Stream sperrt (`_spawnLive`/`acquire`/`_scheduleRestart` sind dadurch gegated).
> Einzel-Snapshots umgehen das über `grabSnapshot()` (one-shot open/grab/close an
> `liveSize`) so liefert eine „Aus"-Kamera weiterhin Bilder, ohne dauerhaft zu streamen.
> `reconfigure({stream:false})` killt einen evtl. laufenden Live-Prozess und startet ihn
> nicht neu.
**Wichtig laufende Browser-`<img>`-Streams:** Eine reine *Auflösungs*-Änderung ist für
den Client nahtlos der multipart-Stream läuft weiter, nur die Frame-Grösse ändert sich