From 39fa6d07f5c7cb6cf92a6a5decaf05307b299699 Mon Sep 17 00:00:00 2001
From: chk <79915315+ChKendel@users.noreply.github.com>
Date: Sun, 7 Jun 2026 12:01:39 +0200
Subject: [PATCH] Roadmap & CSS
---
doc/14_ReRender_roadmap.md | 320 ++++++++++++++++++++-----------------
public/app.css | 84 +++++-----
2 files changed, 221 insertions(+), 183 deletions(-)
diff --git a/doc/14_ReRender_roadmap.md b/doc/14_ReRender_roadmap.md
index 349baa9..93e1c77 100644
--- a/doc/14_ReRender_roadmap.md
+++ b/doc/14_ReRender_roadmap.md
@@ -1,206 +1,240 @@
-# 📦 Re-Render & Compress
+# 📦 Re-Render & Compress (H.264)
+
+> Status: **Entwurf / noch nichts implementiert.** Alle Zahlen unten sind
+> Hypothesen, bis sie auf dem Host gemessen sind (siehe Phase 0).
## Problem
-Der aktuelle Video-Stream (insbesondere 1080p MJPEG) erzeugt **sehr hohe Datenraten (~30 MBit/s)**.
-Das führt zu Problemen bei:
+MJPEG überträgt jedes Frame als vollständiges JPEG → die Bandbreite skaliert
+linear mit Auflösung × Framerate × Clients. Bei höheren Auflösungen oder mehreren
+gleichzeitigen Clients kann das im WAN / mobil teuer werden.
-- mobiler Nutzung (Bandbreite / Datenvolumen)
-- mehreren gleichzeitigen Clients
-- schwachen Netzwerken
+⚠️ **Wichtig – aktuelle Realität prüfen, nicht annehmen:**
+Die Live-Streams laufen derzeit auf **320×240** (`liveSize` pro Kamera in
+[cameras.json](../cameras.json)), **nicht** 1080p. Das `1920x1080` dort ist die
+**`hiresSize`** — also das *Einzelbild* beim HD-Knopf bzw. im Snapshot-Modus, kein
+Dauerstream. Die oft zitierten „~30 MBit/s" gelten also bestenfalls für einen
+hypothetischen 1080p-Dauerstream, nicht für den heutigen Betrieb.
+
+👉 Bevor hier irgendwas gebaut wird, gilt **Phase 0: messen**. Ohne belastbare
+Bandbreiten-Zahl ist unklar, ob sich der ganze Umbau überhaupt lohnt.
## Ziel
-Reduktion der Bandbreite durch **optionale Hardware-basierte Neukodierung**:
+Reduktion der Bandbreite durch **optionale, pro Kamera schaltbare** Neukodierung
+MJPEG → H.264 (GPU), **ohne** die schlanke Default-Architektur (Node besitzt die
+Kameras, MJPEG-Passthrough, `
`-Viewer) für den LAN-Fall aufzugeben.
-- Eingangsformat: MJPEG (von der Webcam)
-- Zielformat: H.264 (deutlich effizienter)
-
-👉 Zielbitrate: ~2–5 MBit/s bei vergleichbarer wahrgenommener Qualität
+Zielbitrate (Hypothese): ~2–5 MBit/s bei vergleichbarer wahrgenommener Qualität.
---
-## Lösungsansatz
+## ⚠️ Der eigentliche Knackpunkt zuerst: Wiedergabe im Browser
-Zwei Betriebsmodi sollen flexibel unterstützt werden:
+Das ist der Teil, der den Umbau groß macht — und der im ersten Entwurf als
+„UI-Checkbox" verharmlost war.
-### 1. 🟢 Unkomprimierter Modus (Default)
-- MJPEG bleibt unverändert
-- minimale Latenz
-- keine GPU-Abhängigkeit
+Der aktuelle Viewer rendert den Stream in einem **`
`**
+([public/viewer.js](../public/viewer.js)), gespeist aus
+`multipart/x-mixed-replace` ([src/snapshotService.js](../src/snapshotService.js)).
+Ein `
` kann **ausschließlich MJPEG** darstellen.
+
+> **H.264 läuft niemals in einem `
`.** „Der Browser soll mit beidem umgehen"
+> ist daher kein Schalter, sondern ein **zweiter, vollständiger Wiedergabe-Pfad.**
+
+H.264 + MJPEG schließen sich auch im Transport gegenseitig aus — H.264 lässt sich
+nicht in MJPEG-multipart verpacken. Es braucht einen eigenen Container und einen
+eigenen Player. Optionen:
+
+| Transport | Client | Aufwand | Latenz (Erwartung, zu messen) |
+|-----------|--------|---------|-------------------------------|
+| **MSE (fMP4)** | `