Claude: Dokumentation
This commit is contained in:
@@ -1,31 +1,31 @@
|
||||
name: approbotwebcam
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# NODE-MJPEG-SCHALTER – ein Node-Container besitzt die Kameras selbst
|
||||
# AppRobotWebcam – Node-MJPEG-Schalter
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# Node startet pro Kamera EINEN FFmpeg (640 MJPEG passthrough) und verteilt den
|
||||
# Stream als multipart/x-mixed-replace an die Browser (<img>). Für HD-Snapshots
|
||||
# stoppt der Schalter den Live-FFmpeg sauber (Prozess-close = Gerät frei),
|
||||
# greift 1280×960, schaltet zurück. go2rtc wird NICHT mehr gebraucht.
|
||||
# Node besitzt jede Kamera direkt (eine CameraSwitch-Instanz pro /dev/videoN).
|
||||
# Live: FFmpeg → MJPEG multipart → Browser <img>. Latenz: ~139 ms.
|
||||
# HD-Grab: Live-FFmpeg stoppen (close-Event = FD frei) → hires-FFmpeg →
|
||||
# JPEG an Client → Live zurück. Auflösungen in cameras.json konfiguriert.
|
||||
#
|
||||
# Warum so: go2rtcs API konnte nicht zuverlässig melden, wann FFmpeg das Gerät
|
||||
# freigibt → Race (zwei Encoder auf /dev/videoN = ~108% CPU). Wenn Node FFmpeg
|
||||
# selbst startet, ist dessen 'close'-Event der harte Beweis „Gerät frei".
|
||||
# Siehe doc/09_Bug_reports.md.
|
||||
# Kameras (aktuell, by-id = stabil über Reboots):
|
||||
# cam0 C270 /dev/video0 Live 640×480, Hires 1280×960
|
||||
# cam1 C270 /dev/video2 Live 640×480, Hires 1280×960
|
||||
# cam2 C920 /dev/video4 Live 640×480, Hires 1920×1080
|
||||
#
|
||||
# Portainer: Stack → Web editor → dieses YAML → Deploy.
|
||||
# APP_PATH = /absoluter/pfad/zum/appRobotWebcam (Code muss dort liegen)
|
||||
# APP_PATH = /absoluter/pfad/zum/appRobotWebcam
|
||||
#
|
||||
# Firewall (Internet): TCP 8444 (Viewer + Stream + API). Sonst nichts mehr.
|
||||
# Firewall: TCP 8444 (Viewer + Stream + API)
|
||||
#
|
||||
# Zugriff:
|
||||
# Viewer: http://<host>:8444/
|
||||
# Live-Stream: http://<host>:8444/api/stream/cam0
|
||||
# Snapshot (Homing): http://<host>:8444/api/snapshot/cam0 (+ /hires)
|
||||
#
|
||||
# ROLLBACK auf den alten go2rtc-Aufbau: git checkout <commit> -- docker-compose.yaml
|
||||
# server.js public/ src/ (der go2rtc-Stand liegt in der Git-Historie).
|
||||
# Snapshot: http://<host>:8444/api/snapshot/cam0
|
||||
# HD-Snapshot: http://<host>:8444/api/snapshot/cam0/hires
|
||||
# Kamera-Liste: http://<host>:8444/api/cameras
|
||||
# Status: http://<host>:8444/health
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
services:
|
||||
@@ -69,10 +69,24 @@ services:
|
||||
# - IDLE_GRACE_MS=15000 # Karenz nach letztem Zuschauer vor dem Stop
|
||||
|
||||
# ── Hinweise ────────────────────────────────────────────────────────────────────
|
||||
# • Bleibt eine Kamera schwarz? Geräte prüfen: v4l2-ctl --list-devices
|
||||
# und ob 640x480 bzw. 1280x960 als MJPEG nativ angeboten werden:
|
||||
# v4l2-ctl --list-formats-ext -d /dev/video0
|
||||
# Nur MJPEG-native Auflösungen bleiben CPU-arm (YUYV → Software-Encode = teuer).
|
||||
# • Meckert Portainer über sehr alte Compose-Syntax (dockerfile_inline)? Dann
|
||||
# Compose/Docker-Engine aktualisieren – dieser Aufbau braucht Compose v2.
|
||||
# • Neue oder geänderte Kamera: cameras.json anpassen + Redeploy (kein Code-Änderung).
|
||||
# by-id-Namen ermitteln: ls -la /dev/v4l/by-id/
|
||||
# Neues Device hier eintragen (by-id → /dev/videoN), dann cameras.json-Eintrag.
|
||||
#
|
||||
# • Bleibt eine Kamera schwarz oder liefert falsche Auflösung?
|
||||
# Direkt auf dem Host testen (ohne Docker, beweist was die Kamera real kann):
|
||||
# node tools/hires-probe.js /dev/video4 1920x1080 copybsf
|
||||
# Alternativ manuell:
|
||||
# v4l2-ctl --list-formats-ext -d /dev/video4 # MJPG-Auflösungen anzeigen
|
||||
# Nur MJPEG-native Auflösungen in cameras.json verwenden (YUYV = Software-Encode = ~50% CPU).
|
||||
#
|
||||
# • HD-Grab liefert schlechte Qualität?
|
||||
# Standard ist copybsf (Kamera-JPEG pur, keine zweite Kompression).
|
||||
# "hiresEncode": "mjpeg" in cameras.json nur als Fallback, erzeugt Re-Encode-Artefakte.
|
||||
#
|
||||
# • Code-Stand im Container prüfen:
|
||||
# docker exec AppRobotWebcam grep -n "Grab (minWidth" src/cameraSwitch.js
|
||||
# Zeigt die neue Log-Zeile → aktueller Code läuft. "1280-Grab" → staler Code.
|
||||
#
|
||||
# • Compose v2 ist Pflicht (dockerfile_inline). Bei Portainer-Warnung: Docker-Engine updaten.
|
||||
# ────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user