From 7f32b82e594de6273ba997137fe3cb24fef2422d Mon Sep 17 00:00:00 2001 From: chk <79915315+ChKendel@users.noreply.github.com> Date: Sun, 7 Jun 2026 17:13:34 +0200 Subject: [PATCH] Compress ready --- cameras.json | 41 +++++++++++++++++++------------------- doc/14_ReRender_roadmap.md | 34 ++++++++++++++++++------------- 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/cameras.json b/cameras.json index f25ceb6..8c7ffbe 100644 --- a/cameras.json +++ b/cameras.json @@ -1,38 +1,37 @@ { "cameras": [ { - "id": "cam0", - "device": "/dev/video0", - "name": "Kamera 0", + "id": "cam0", + "device": "/dev/video0", + "name": "Kamera 0", "position": "front", - "stream": true, - "hires": true, - "note": "usb-046d_0825_3BB3FE20-video-index0", + "stream": true, + "hires": true, + "note": "usb-046d_0825_3BB3FE20-video-index0", "hiresSize": "1280x960", "liveSize": "320x240" }, { - "id": "cam1", - "device": "/dev/video2", - "name": "Kamera 1", + "id": "cam1", + "device": "/dev/video2", + "name": "Kamera 1", "position": "left", - "stream": true, - "hires": true, - "note": "usb-046d_081b_342D4F40-video-index0", + "stream": true, + "hires": true, + "note": "usb-046d_081b_342D4F40-video-index0", "hiresSize": "1280x960", "liveSize": "320x240" }, { - "id": "cam2", - "device": "/dev/video4", - "name": "Kamera 2", + "id": "cam2", + "device": "/dev/video4", + "name": "Kamera 2", "position": "right", - "stream": true, - "hires": true, - "note": "usb-046d_HD_Pro_Webcam_C920_9C5591DF-video-index0", - "hiresSize": "1920x1080", - "liveSize": "640x480", - "encode": "h264" + "stream": true, + "hires": true, + "note": "usb-046d_HD_Pro_Webcam_C920_9C5591DF-video-index0", + "hiresSize": "1920x1080", + "liveSize": "320x240" } ] } diff --git a/doc/14_ReRender_roadmap.md b/doc/14_ReRender_roadmap.md index 93e1c77..cd3f6a1 100644 --- a/doc/14_ReRender_roadmap.md +++ b/doc/14_ReRender_roadmap.md @@ -1,7 +1,9 @@ # 📦 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). +> Status: **Code implementiert (Phasen 1–3), unit-getestet.** Noch NICHT auf dem +> Host verifiziert — die FFmpeg-VAAPI/QSV-Pipeline lief bisher nur in Tests, nicht +> gegen echte Kameras/GPU. Alle Bitraten/Latenz-Zahlen bleiben Hypothesen bis zur +> Messung auf der Intel- bzw. AMD-Box (Phase 0 + 4). ## Problem @@ -217,24 +219,28 @@ Nicht „nur neue Args" — betroffen sind mehrere Stellen: --- -## Nächste Schritte (ToDo — ehrlicher Stand: nichts erledigt) +## Nächste Schritte (ToDo) -**Phase 0 — Messen (Vorbedingung, blockiert alles andere)** +Legende: ✅ Code fertig & unit-getestet · 🧪 nur auf dem Host verifizierbar · 🔲 offen + +**Phase 0 — Messen (Vorbedingung; auf User-Wunsch parallel zur Implementierung)** 1. 🔲 Bandbreite der heutigen Live-Streams (320×240 bzw. konfigurierte `liveSize`) auf dem Host messen, bei 1 und bei n Clients. 2. 🔲 Hypothese 1080p-Stream gegen die echte Zielauflösung abgleichen — lohnt der Umbau? -3. 🔲 Transport-Latenz-Test: ein Test-fMP4-Stream (MSE) vs. heutiges MJPEG, Methode wie in [doc/03_Protocoll_roadmap.md](03_Protocoll_roadmap.md) (Stoppuhr-Foto). +3. 🔲 Transport-Latenz-Test: H.264/MSE vs. heutiges MJPEG, Methode wie in [doc/03_Protocoll_roadmap.md](03_Protocoll_roadmap.md) (Stoppuhr-Foto). -**Phase 1 — Encode-Pfad (nur wenn Phase 0 positiv)** -4. 🔲 `/dev/dri`-Passthrough + VAAPI/QSV-Auto-Erkennung. -5. 🔲 FFmpeg-H.264-fMP4-Profil definieren; CPU/GPU/Latenz auf dem Host messen. +**Phase 1 — Encode-Pfad** +4. ✅ `/dev/dri`-Passthrough ([docker-compose.yaml](../docker-compose.yaml)) + GPU-Auswahl `GPU=intel|amd|none` / `HWENC` ([src/hwencode.js](../src/hwencode.js)). +5. ✅ FFmpeg-H.264-fMP4-Profil ([src/hwencode.js](../src/hwencode.js)). · 🧪 CPU/GPU/Latenz/Bitrate auf Intel- UND AMD-Box messen + Profil/Level ggf. anpassen. **Phase 2 — Server** -6. 🔲 `encode='h264'` in `videoOutArgs` / `CameraSwitch` (inkl. Init-Segment-Cache + Byte-Stream-Fan-out). -7. 🔲 H.264-Stream-Route + Modus in `/api/cameras`. +6. ✅ `encode='h264'` in [src/cameraSwitch.js](../src/cameraSwitch.js) (fMP4 + Init-Segment-Cache + MJPEG-Nebenausgang für Snapshots) + [src/fmp4Parser.js](../src/fmp4Parser.js). +7. ✅ H.264-Stream-Route (`video/mp4`, Init-first, Fan-out) + Modus/`mseCodec` in `/api/snapshot` & `/api/cameras` ([src/snapshotService.js](../src/snapshotService.js)). **Phase 3 — Client** -8. 🔲 MSE-`