From 0e706428ced6b580a87cac6341292bbf0632d21b Mon Sep 17 00:00:00 2001 From: chk <79915315+ChKendel@users.noreply.github.com> Date: Thu, 4 Jun 2026 17:56:40 +0200 Subject: [PATCH] Claude: server.js Cache -> Fraglich --- docker-compose.yaml | 24 +++++++----------------- server.js | 7 ++++++- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 3587c6b..a1f35a0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,7 +1,7 @@ name: approbotwebcam # ════════════════════════════════════════════════════════════════════════════ -# FINALER WebRTC-AUFBAU – go2rtc (Streaming) + Node.js (Viewer/Proxy/API) +# MJPEG-AUFBAU – go2rtc (Streaming) + Node.js (Viewer/Proxy/API) # ════════════════════════════════════════════════════════════════════════════ # # Portainer: Stack → Web editor → dieses YAML einfügen → Deploy. @@ -11,13 +11,13 @@ name: approbotwebcam # WICHTIG: Vor jedem Redeploy sicherstellen, dass server.js / public/ / src/ # auf dem Server unter APP_PATH aktuell sind (Synology-Sync abwarten). # -# Firewall (Internet): TCP 8444 (Viewer+API+Signaling) · UDP 8555 (WebRTC-Media) +# Firewall (Internet): TCP 8444 (Viewer+API) # Port 1984 (go2rtc) NICHT nach aussen – läuft nur intern via localhost. +# UDP 8555 (WebRTC) wird NICHT verwendet – Viewer läuft im MJPEG-Modus. # # Zugriff: # Viewer: http://:8444/ # Snapshot (Homing) http://:8444/api/snapshot/cam0 -# Hi-Res Snapshot http://:8444/api/snapshot/cam0/hires # go2rtc-Debug-UI http://:1984/ (nur intern/LAN) # ════════════════════════════════════════════════════════════════════════════ @@ -25,10 +25,9 @@ configs: go2rtc_yaml: content: | streams: - # Stabiler Stand: beide Kameras 640x480 MJPEG, Re-Encode in go2rtc - # (~50% CPU gesamt für 2 Kameras), keine Freezes, ~200ms. Viewer: MODE='mjpeg'. - # NICHT #video=copy verwenden: am 2026-06-04 getestet → CPU 50% → 107% - # (schlechter, Grund ungeklärt). Verworfen. + # 640x480 MJPEG, Re-Encode in go2rtc (~50% CPU für 2 Kameras mit Clients). + # Viewer läuft im MJPEG-Modus (MODE='mjpeg' in viewer.js) → keine Freezes, ~200ms. + # NICHT #video=copy: am 2026-06-04 getestet → CPU 50% → 107% (schlechter). Verworfen. cam0: "ffmpeg:device?video=/dev/video0&input_format=mjpeg&video_size=640x480&framerate=30#video=mjpeg" cam1: "ffmpeg:device?video=/dev/video2&input_format=mjpeg&video_size=640x480&framerate=30#video=mjpeg" webrtc: @@ -43,7 +42,7 @@ configs: services: - # ── go2rtc: Kamera-Capture · MJPEG-Passthrough · Streaming ──────────────── + # ── go2rtc: Kamera-Capture · MJPEG Re-Encode · Streaming ────────────────── go2rtc: image: ghcr.io/alexxit/go2rtc container_name: AppRobotGo2RTC @@ -59,15 +58,11 @@ services: target: /config/go2rtc.yaml # ── webcam: Node.js (Viewer · /api/ws-Proxy · Snapshot-API) ────────────── - # ffmpeg ist im Image damit der /hires-Endpunkt direkt auf das Gerät zugreifen - # kann, wenn go2rtc den Stream kurz freigibt (Blackout-Snapshot-Methode). webcam: build: context: /tmp dockerfile_inline: | FROM node:lts-bookworm-slim - RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg \ - && rm -rf /var/lib/apt/lists/* WORKDIR /usr/src/app EXPOSE 8444 image: approbotwebcam:latest @@ -77,11 +72,6 @@ services: command: sh -c "npm install --omit=dev && node server.js" volumes: - ${APP_PATH:-.}:/usr/src/app - devices: - - /dev/video0:/dev/video0 - - /dev/video2:/dev/video2 - group_add: - - video environment: - NODE_ENV=production - PORT=8444 diff --git a/server.js b/server.js index 627b917..a944d87 100644 --- a/server.js +++ b/server.js @@ -46,7 +46,12 @@ const go2rtcProxy = createProxyMiddleware({ app.use(go2rtcProxy); // ── 3. Statische Dateien ────────────────────────────────────────────────────── -app.use(express.static(path.join(__dirname, 'public'))); +// no-cache: Browser MUSS viewer.js/index.html vor Nutzung revalidieren. Verhindert, +// dass eine alte gecachte viewer.js (z.B. mit WebRTC-Modus) weiterläuft → sonst +// transcodiert go2rtc nach H.264 = ~108% CPU statt ~50% (MJPEG). +app.use(express.static(path.join(__dirname, 'public'), { + setHeaders: (res) => res.setHeader('Cache-Control', 'no-cache'), +})); // ── 4. go2rtc Stream-Monitor (server-seitiges Logging) ─────────────────────── // Pollt alle 5 s go2rtc /api/streams und loggt Änderungen.