Claude: server.js Cache -> Fraglich
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
name: approbotwebcam
|
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.
|
# 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/
|
# WICHTIG: Vor jedem Redeploy sicherstellen, dass server.js / public/ / src/
|
||||||
# auf dem Server unter APP_PATH aktuell sind (Synology-Sync abwarten).
|
# 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.
|
# 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:
|
# Zugriff:
|
||||||
# Viewer: http://<host>:8444/
|
# Viewer: http://<host>:8444/
|
||||||
# Snapshot (Homing) http://<host>:8444/api/snapshot/cam0
|
# Snapshot (Homing) http://<host>:8444/api/snapshot/cam0
|
||||||
# Hi-Res Snapshot http://<host>:8444/api/snapshot/cam0/hires
|
|
||||||
# go2rtc-Debug-UI http://<host>:1984/ (nur intern/LAN)
|
# go2rtc-Debug-UI http://<host>:1984/ (nur intern/LAN)
|
||||||
# ════════════════════════════════════════════════════════════════════════════
|
# ════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
@@ -25,10 +25,9 @@ configs:
|
|||||||
go2rtc_yaml:
|
go2rtc_yaml:
|
||||||
content: |
|
content: |
|
||||||
streams:
|
streams:
|
||||||
# Stabiler Stand: beide Kameras 640x480 MJPEG, Re-Encode in go2rtc
|
# 640x480 MJPEG, Re-Encode in go2rtc (~50% CPU für 2 Kameras mit Clients).
|
||||||
# (~50% CPU gesamt für 2 Kameras), keine Freezes, ~200ms. Viewer: MODE='mjpeg'.
|
# Viewer läuft im MJPEG-Modus (MODE='mjpeg' in viewer.js) → keine Freezes, ~200ms.
|
||||||
# NICHT #video=copy verwenden: am 2026-06-04 getestet → CPU 50% → 107%
|
# NICHT #video=copy: am 2026-06-04 getestet → CPU 50% → 107% (schlechter). Verworfen.
|
||||||
# (schlechter, Grund ungeklärt). Verworfen.
|
|
||||||
cam0: "ffmpeg:device?video=/dev/video0&input_format=mjpeg&video_size=640x480&framerate=30#video=mjpeg"
|
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"
|
cam1: "ffmpeg:device?video=/dev/video2&input_format=mjpeg&video_size=640x480&framerate=30#video=mjpeg"
|
||||||
webrtc:
|
webrtc:
|
||||||
@@ -43,7 +42,7 @@ configs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
# ── go2rtc: Kamera-Capture · MJPEG-Passthrough · Streaming ────────────────
|
# ── go2rtc: Kamera-Capture · MJPEG Re-Encode · Streaming ──────────────────
|
||||||
go2rtc:
|
go2rtc:
|
||||||
image: ghcr.io/alexxit/go2rtc
|
image: ghcr.io/alexxit/go2rtc
|
||||||
container_name: AppRobotGo2RTC
|
container_name: AppRobotGo2RTC
|
||||||
@@ -59,15 +58,11 @@ services:
|
|||||||
target: /config/go2rtc.yaml
|
target: /config/go2rtc.yaml
|
||||||
|
|
||||||
# ── webcam: Node.js (Viewer · /api/ws-Proxy · Snapshot-API) ──────────────
|
# ── 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:
|
webcam:
|
||||||
build:
|
build:
|
||||||
context: /tmp
|
context: /tmp
|
||||||
dockerfile_inline: |
|
dockerfile_inline: |
|
||||||
FROM node:lts-bookworm-slim
|
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
|
WORKDIR /usr/src/app
|
||||||
EXPOSE 8444
|
EXPOSE 8444
|
||||||
image: approbotwebcam:latest
|
image: approbotwebcam:latest
|
||||||
@@ -77,11 +72,6 @@ services:
|
|||||||
command: sh -c "npm install --omit=dev && node server.js"
|
command: sh -c "npm install --omit=dev && node server.js"
|
||||||
volumes:
|
volumes:
|
||||||
- ${APP_PATH:-.}:/usr/src/app
|
- ${APP_PATH:-.}:/usr/src/app
|
||||||
devices:
|
|
||||||
- /dev/video0:/dev/video0
|
|
||||||
- /dev/video2:/dev/video2
|
|
||||||
group_add:
|
|
||||||
- video
|
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- PORT=8444
|
- PORT=8444
|
||||||
|
|||||||
@@ -46,7 +46,12 @@ const go2rtcProxy = createProxyMiddleware({
|
|||||||
app.use(go2rtcProxy);
|
app.use(go2rtcProxy);
|
||||||
|
|
||||||
// ── 3. Statische Dateien ──────────────────────────────────────────────────────
|
// ── 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) ───────────────────────
|
// ── 4. go2rtc Stream-Monitor (server-seitiges Logging) ───────────────────────
|
||||||
// Pollt alle 5 s go2rtc /api/streams und loggt Änderungen.
|
// Pollt alle 5 s go2rtc /api/streams und loggt Änderungen.
|
||||||
|
|||||||
Reference in New Issue
Block a user