Unter Linux lässt sich eine IP-Kamera vergleichsweise einfach als Webcam einbinden. Möglich macht das die Video-Schnittstelle Video4Linux2 (V4L2). Neben zahlreichen USB-Webcams, TV-Karten und ähnlichen Geräten können auch RTSP-Streams (Real-Time Streaming Protocol) von IP-Kameras genutzt werden.
Klassische Videochat-Programme wie Skype oder Zoom können mit RTSP-Streams jedoch nichts anfangen; sie erwarten ein Gerät im Betriebssystem. V4L2 erlaubt das Anlegen sogenannter Loopback-Devices. Diese virtuellen Geräte täuschen den Anwendungen eine lokal angeschlossene Kamera vor.
Im Folgenden zeige ich exemplarisch, wie ein RTSP-Stream als virtuelle Kamera unter Ubuntu eingebunden wird. Das Beispiel versteht sich als Machbarkeitsstudie, nicht als vollständige Anleitung für den Produktivbetrieb. Die Latenz des Videobildes war für meinen Geschmack zu hoch – sie hängt u. a. stark vom Kameramodell und der Netzwerkverbindung ab.
1. Installation der benötigten Software
Alle Pakete stehen in den Standard-Archiven von Ubuntu/Debian bereit und lassen sich direkt per Kommandozeile installieren:
- v4l2loopback-dkms – Kernel-Modul zum Anlegen virtueller Video-Geräte
- v4l-utils – Werkzeuge wie v4l2-ctl zur Steuerung der V4L2-Treiber
- ffmpeg – mächtiges CLI-Tool zum Aufnehmen, Konvertieren und Streamen von Audio/Video
Installation (mit sudo):
sudo apt install v4l2loopback-dkms v4l-utils ffmpeg
Hinweise des Paketmanagers zur Installation zusätzlicher Abhängigkeiten können bestätigt werden.
Quellen des Loopback-Moduls: https://github.com/umlaeute/v4l2loopback
2. Kernel-Treiber einbinden
Dank DKMS (Dynamic Kernel Module Support) wird das manuell installierte Modul bei Kernel-Updates automatisch neu gebaut.
Modul laden:
sudo modprobe v4l2loopback
Prüfen, ob das Modul geladen ist:
lsmod | grep "v4l2loopback"
Beispielausgabe:
v4l2loopback 40960 1videodev 237568 2 v4l2loopback
Mehrere virtuelle Geräte anlegen (z. B. drei Stück):
sudo modprobe v4l2loopback devices=3
Die Geräte erscheinen unter /dev/videoX. Auflisten mit:
v4l2-ctl --list-devices
Beispiel:
Dummy video device (0x0000) (platform:v4l2loopback-000): /dev/video0
Taucht das virtuelle Gerät nicht auf, ist bei der Modulintegration etwas schiefgelaufen und die Ursache muss geprüft werden.
3. RTSP-Videostrom zur virtuellen Webcam streamen
Zum Einspeisen des Kamerastreams in /dev/video0 verwenden wir FFmpeg. Das Tool bietet viele Optionen zum Anpassen von Qualität und Latenz.
Annahme:
Die IP-Kamera hat die Adresse 192.168.80.100, liefert RTSP auf Port 554 ohne Authentifizierung, und der Hauptstream ist unter /11 erreichbar:
ffmpeg -rtsp_transport tcp -i rtsp://192.168.80.100:554/11 -pix_fmt yuv420p -f v4l2 /dev/video0
Ausgabe (gekürzt):
Input #0, rtsp, from 'rtsp://192.168.80.100:554/11': Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1280x720, 15 fps Stream #0:1: Audio: pcm_mulaw, 8000 Hz, monoOutput #0, video4linux2,v4l2, to '/dev/video0': Stream #0:0: Video: rawvideo (I420), yuv420p, 1280x720, 15 fpsPress [q] to stop, [?] for help
Der RTSP-Pfad variiert je nach Hersteller/Modell der IP-Kamera, ggf. bitte die Dokumentation prüfen.
FFmpeg-Parameter lassen sich - je nach Anforderung - weiter tunen.
4. Test der virtuellen Webcam
Zum schnellen Test nutze ich ffplay (Teil von FFmpeg):
ffplay /dev/video0
Erscheint das Video träge, helfen Latenz-optimierte Optionen:
ffplay /dev/video0 -fflags nobuffer -flags low_delay -framedrop
Kurz erklärt:
nobuffer: reduziert Analyse-Pufferung zu Beginnlow_delay: erzwingt geringe Verzögerungframedrop: verwirft Frames, wenn die Wiedergabe nicht synchron ist
5. Autostart via systemd
Standardmäßig endet das Streaming, sobald FFmpeg beendet wird; nach einem Neustart muss außerdem das v4l2loopback-Modul erneut geladen werden.
Dafür nutze ich zwei systemd-Units unter /etc/systemd/system.
sudo nano /etc/systemd/system/v4l2.service
[Unit]Description=Create_loopback_device[Service]ExecStart=modprobe v4l2loopbackType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target
sudo nano /etc/systemd/system/ipcam.service
[Unit]Description=Stream_IPcam_to_virtual_webcamAfter=network-online.targetWants=network-online.target[Service]ExecStart=ffmpeg -rtsp_transport tcp -i rtsp://192.168.80.100:554/11 -pix_fmt yuv420p -f v4l2 /dev/video0Type=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target
Wichtig: ipcam.service wartet auf eine vorhandene Netzwerkverbindung (network-online.target).
Zur dauerhaften Aktivierung der Skripte:
sudo systemctl daemon-reloadsudo systemctl enable v4l2.service
sudo systemctl enable ipcam.service
Nach einem Neustart steht die IP-Kamera automatisch als virtuelle Webcam /dev/video0 bereit.
Optionaler Praxis-Hinweis:
Für dauerhaften Betrieb ist bei ipcam.service oft Type=simple plus Restart=on-failure sinnvoll, damit FFmpeg als Dienst im Vordergrund läuft und bei Fehlern neu gestartet wird.