bfe47d5410b2bfefef01bbc197c426e997f654b1
AppRobotWebcam
Webcam-Service für den AppRobot. Liefert Live-MJPEG-Streams und HD-Standbilder über einen einzelnen HTTP-Port — als Docker-Container, ohne externe Streaming-Server.
Was es tut
| Live-Stream | MJPEG multipart im Browser <img>, ~139 ms Latenz |
| HD-Snapshot | Ein JPEG pro Kamera auf Knopfdruck oder per HTTP GET |
| Snapshot alle | Alle Kameras parallel in einem Schritt |
| REST-API | Kameraliste, Snapshots, Streams — für andere Container nutzbar |
Kameras (aktuell)
| ID | Modell | Live | HD-Grab |
|---|---|---|---|
| cam0 | Logitech C270 | 640×480 | 1280×960 |
| cam1 | Logitech C270 | 640×480 | 1280×960 |
| cam2 | Logitech C920 | 640×480 | 1920×1080 |
Konfiguration ausschliesslich über cameras.json — kein Redeploy bei Kamera-Änderungen.
Zugriff
http://<host>:8444/ Viewer
http://<host>:8444/api/stream/cam0 Live-MJPEG
http://<host>:8444/api/snapshot/cam0 640er JPEG
http://<host>:8444/api/snapshot/cam0/hires HD-JPEG
http://<host>:8444/api/cameras Kamera-Metadaten (JSON)
http://<host>:8444/health Status
Deploy (Portainer)
- Portainer → Stacks → Web editor →
docker-compose.yamleinfügen APP_PATHauf den absoluten Pfad des Projektverzeichnisses setzen- Deploy — der Container baut sich selbst (Node + FFmpeg)
# Minimal-Konfiguration:
APP_PATH=/home/user/appRobotWebcam
Architektur
cameras.json → server.js → CameraSwitch (/dev/videoN)
├── Live: ffmpeg → MJPEG → Browser
└── Grab: Live stoppen → hires → zurück
Ein FFmpeg pro Kamera, nie zwei gleichzeitig. Das close-Event ist der harte Beweis
„Gerät frei" — kein Race, kein 106%-CPU-Bug (der mit go2rtc aufgetreten war).
Dokumentation
| Datei | Inhalt |
|---|---|
doc/01_WebcamRoadmap.md |
Ziel, Architektur, Entwicklungsgeschichte |
doc/05_screenShot_roadmap.md |
HD-Grab, Encode-Qualität, Kamera-Eigenheiten |
doc/07_multipleCam_roadmap.md |
cameras.json-Referenz, Multi-Kamera-Setup |
doc/09_Bug_reports.md |
Bug-Dokumentation |
Description
Languages
JavaScript
83.7%
Python
9.6%
CSS
4.9%
HTML
1.8%