diff --git a/docker-compose.yaml b/docker-compose.yaml index aae83f5..c5a1cee 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -47,17 +47,19 @@ services: volumes: - ${APP_PATH:-.}:/usr/src/app devices: - - /dev/video0:/dev/video0 - - /dev/video2:/dev/video2 - - /dev/video2:/dev/video2 + # Jede Kamera aus cameras.json muss hier aufgeführt sein. + # Empfehlung: statt /dev/videoN → persistente by-id-Pfade verwenden + # (ls -la /dev/v4l/by-id/ auf dem Server zeigt die Namen) + - /dev/video0:/dev/video0 # C270 (046d:0825) → cam0 in cameras.json + - /dev/video2:/dev/video2 # C270 (046d:081b) → cam1 in cameras.json + - /dev/video4:/dev/video4 # C920 HD Pro → cam2 in cameras.json group_add: - video environment: - NODE_ENV=production - PORT=8444 - # Optional: Geräte/Auflösung überschreiben (sonst Auto-Detect + Defaults) - # - DEV0=/dev/video0 - # - DEV1=/dev/video2 + # Kamera-Konfiguration (Gerät, Name, Auflösung) → cameras.json im APP_PATH + # Globale Fallback-Werte (gelten wenn cameras.json keinen Wert hat): # - LIVE_SIZE=640x480 # - LIVE_FPS=30 # - HIRES_SIZE=1280x960 diff --git a/server.js b/server.js index 2fb1a00..7ebd524 100644 --- a/server.js +++ b/server.js @@ -34,11 +34,15 @@ for (const cam of camsConfig) { if (!cam.id || !cam.device) { console.error(`cameras.json: Eintrag ohne id/device: ${JSON.stringify(cam)}`); process.exit(1); } + // Per-Kamera-Felder in cameras.json überschreiben die globalen Env-Werte switches[cam.id] = new CameraSwitch({ id: cam.id, device: cam.device, - liveSize: LIVE_SIZE, liveFps: LIVE_FPS, - hiresSize: HIRES_SIZE, hiresFps: HIRES_FPS, - encode: ENCODE_MODE, onDemand: ON_DEMAND, idleGraceMs: IDLE_GRACE_MS, + liveSize: cam.liveSize ?? LIVE_SIZE, + liveFps: cam.liveFps ?? LIVE_FPS, + hiresSize: cam.hiresSize ?? HIRES_SIZE, + hiresFps: cam.hiresFps ?? HIRES_FPS, + encode: cam.encode ?? ENCODE_MODE, + onDemand: ON_DEMAND, idleGraceMs: IDLE_GRACE_MS, }); camsMeta.push({ id: cam.id,