Grunzer Logo (Piggy Nose) grunzer

Videostreaming mit einem Raspberry Pi

Raspberry Pi mit USB-Webcam

Ich bin nun endlich mal wieder in den Genuss gekommen, mit dem Minicomputer Raspberry Pi 3 zu arbeiten, nachdem er in letzter Zeit nur noch ein trauriges Dasein als Retrospielekonsole herhalten musste und selbst dort kaum noch genutzt wurde.

Doch diese Zeit hat nun ein Ende und die kleine Himbeertorte bekommt wieder einen Sinn, denn sie bekommt die ehrenvolle Aufgabe uns mit Live-Videomaterial zu unseren Kaninchen zu versorgen, während wir auf Reise sind. Da wir fast eine Woche abwesend sind, möchten wir darüber sicherstellen, dass es ihnen gut geht.

Der Minicomputer soll dabei rund um die Uhr Bilder einer alten USB-Webcam übertragen, welche ich noch auf Lager habe. Lasst uns also direkt in die Umsetzung starten.

Vorbereitung des Minicomputers

Zunächst einmal musste ich mich von den Altlasten befreien, welche noch auf dem SD-Speicher lagen.

  1. Formatierung der SD-Karte mit einem Tool (FAT32)
  2. Installation einer neuen NOOBS-Version auf der leeren SD-Karte
  3. Installation von Raspberry Pi OS Lite über NOOBS

Ich installiere hier die Lite-Version des Standard-Betriebssystems, da wir für das Streaming keine graphische Oberfläche benötigen.

Einrichtung des Betriebssytems

Standardmäßige enthält die Installation schon einiges an Software und einen Standard-Nutzer namens pi mit dem Passwort raspberry.

  1. Standardpasswort ändern mit dem Tool passwd
  2. Packetquellen aktualisieren: sudo apt update
  3. Installation einiger Tools: sudo apt install vim tree curl ufw dnsutils
  4. SSH-Zugriff mit dem vorinstallierten Tool raspi-config im Menüpunkt Interfacing Options aktivieren.

Anschließend können wir alles weitere über unseren Arbeitsrechner steuern, dazu einfach mit einem SSH-Client einloggen:

ssh pi@<ip-adresse>

Im Schritt 4 haben wir die Firewallsoftware ufw installiert. Bevor wir diese aktivieren müssen wir zunächst sicherstellen, dass der SSH-Port 22 freigegeben wird:

sudo ufw allow 22

Einrichtung der Webcam

Für die Webcam musste ich auf dem Gerät keine besonderen Einstellungen vornehmen.

Jedoch prüfe ich noch eben, ob das Gerät richtig erkannt wird mit:

lsusb

und

ls /dev/video*

Installation der Streamingsoftware

Das Streaming übernimmt in unserem Fall das mächtige Tool motion.

Installation:

sudo apt install motion

Damit der Stream im Hintergrund läuft und aus dem Internet aufrufbar ist, müssen wir noch einige Konfigurationen in /etc/motion/motion.conf vornehmen:

deamon on
ipv6_enabled on
stream_localhost off

Anschließend kannst du motion als Service starten, damit wird dieser auch beim Systemstart automatisch ausgeführt:

sudo service motion start

Anschließend noch prüfen ob es beim Start Probleme gab:

sudo service motion status

Wenn nicht schief gelaufen ist, dann sollte der Stream jetzt im Webbrowser unter http://localhost:8081 verfügbar sein.

Cheat Sheet:


# Service (Status, Start, Restart)
sudo service motion status
sudo service motion start
sudo service motion restart

# Logs prüfen:
cat /var/log/motion/motion.log

# Konfiguration ändern:
sudo vim /etc/motion/motion.conf

Freigabe für das Internet

Mit der Einstellung stream_localhost off haben wir motion bereits mitgeteilt, dass wir den Stream gerne auch mit der Internetgemeinde teilen wollen. Das reicht aber bei weitem nicht aus. Insbesondere die Konfiguration des Routers und der Umgang mit IPv6 war schwierig. Folgende Barrieren müssen durchschritten werden:

  1. Freigabe auf Applikations-Ebene (motion)
  2. Freigabe des Ports 8081 in der Firewall des Raspberry (ufw)
  3. Freigabe des Ports 8081 (TCP) im Router (bei mir eine Fritz!Box 7560)
  4. Freigabe des Gerätes selbst im Router (unter seiner entsprechenden IPv6)

Schritt 1 haben wir bereits erledigt und für Schritt 2 müssen wir eine entsprechende Regel erstellen:

sudo ufw allow 8081

Schritt 3 und 4 nehme ich in der Fritz-Box im Admin-Interface unter Internet --> Freigaben vor. Dort lege ich zunächst eine entsprechende Freigabe für mein Gerät und den Port 8081 an. Protokoll ist TCP.

Stellt sicher, dass ihr folgende Optionen wählt:

Raspberry Pi mit USB-Webcam

In dieser Ansicht seht ihr im oberen Bereich auch ein IPv6 Interface-ID. Diese muss mit den letzten 4 Blöcken der IP eures Minicomputers übereinstimmen, ansonsten funktioniert die Freigabe nicht. Beim Start des Pi wird die entsprechende IPv6 mit angezeigt, die Werte haben ich direkt von dort übernommen.

Anschließend sollte die Webcam auch von außen über die IPv6 erreichbar sein. Das könnt ihr prüfen indem ihr die Adresse im Browser eingebt. Eine typische Adresse sieht folgendermaßen aus:

http://[2001:16b8:5dca:400:16ae:c5d0:3bc1:cc12]:8081

Über folenden Befehl (aus dnsutils) könnt ihr testen, unter welcher IP euer Gerät im Internet erreichbar ist:

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

Achtung: Um eine IPv6-Adresse aufzurufen, benötigt euer Gerät ebenso eine solche IP. Das ist insbesondere im Mobilfunknetz nicht der Fall und daher habe ich mich entschieden den Datenverkehr über einen meiner VServer umzuleiten (nginx proxy_pass), sodass auch Geräte mit IPv4 darauf zugreifen können.