Raspberry Pi Überwachungskamera Livestream

Projekte, Webserver

Raspberry Pi: Überwachungskamera Livestream einrichten

Nachdem wir mit (USB) Kameras /  Webcams bereits einzelne Bilder aufnehmen können, wollen wir auch Live Bilder ansehen. Dies kann entweder am Smartphone stattfinden oder an einem PC außerhalb des heimischen Netzwerks. Dazu konfigurieren wir mit der Raspberry Pi Überwachungskamera einen Livestream. Das Tolle daran ist, dass fast jede USB Kamera (also auch Webcams) benutzt werden können. Je nach Platzierung, kann z.B. eine Kamera ohne Infrarot Filter sinnvoll sein, um so bessere Nachtaufnahmen zu ermöglichen.



 

Zubehör

Raspberry Pi Überwachungskamera Livestream NoIR

Der fehlende IR Filter sorgt für eine höhere Lichtempfindlichkeit.

Falls wir eine USB Kamera anschließen wollen, muss unser Raspberry Pi natürlich einen freien USB Port besitzen. Allerdings können wir auch die offizielle Kamera nutzen, welche es in zwei Ausführungen gibt:

  • Standardvariante (grün), welche u.a. 8MP hat und u.a. Videos in 1080p aufnehmen kann. Da ein Infrarot Filter eingebaut ist, eignet sie sich besonders für Tageslicht Aufnahmen bzw. für Orte mit genügend Lichteinstrahlung.
  • NoIR Variante (schwarz): Die Spezifikationen (Auflösung, etc.) sind identisch, allerdings ist kein IR Filter eingebaut, wodurch Aufnahmen mit wenig Licht besser erscheinen. Dies empfiehlt sich besonders bei dunklen Szenen.

Beide Kameras können direkt über den CSI Anschluss auf der Platine angeschlossen werden, wodurch kein USB Port belegt wird. Die neueren Zero Modelle (ab Generation 2) besitzen nun auch CSI Ports.

Alternativ kann auch eine beliebige USB Webcam benutzt werden, solange entsprechende Treiber für Linux vorhanden sind. Dies ist aber bei fast allen neueren Kameras der Fall. Sollte unser Raspberry Pi keinen integrierten WLAN Adapter haben, brauchen wir ggf. noch einen solchen, da eine Netzwerk- bzw. Internetverbindung unumgänglich ist.

 

Vorbereitungen für den Livestream treffen

Bevor wir den Stream unserer Raspberry Pi Kamera bzw. USB Webcam anlegen, müssen wir die Pakete aktualisieren:

sudo apt-get update
sudo apt-get upgrade

Anschließend kann das Tool Motion installieren, welches den Livestream möglich macht.

sudo apt-get install motion -y

Die Installation wird nun ein wenig dauern.

Hat soweit alles geklappt, so kann die Kamera angeschlossen werden (falls nicht bereits geschehen). Falls du eine USB Webcam nutzt, kannst du prüfen, ob sie erkannt wurde:

lsusb

 

Sofern keine speziellen Treiber notwendig sind, sollten mit folgendem Befehl alle angeschlossenen Videogeräte / Kameras angezeigt werden:

ls /dev/video*

Falls du eine der offizielen Kamera Module verwendest, ist es wichtig folgendes auszuführen, damit die Kamera gleich angezeigt wird (am besten per Autostart):

sudo modprobe bcm2835-v4l2

Ist nur eine einzige Webcam / Raspberry Pi Kamera angeschlossen, sollte Device /dev/video0 angegeben sein. Falls du mehrere Geräte angeschlossen hast, musst du im folgenden das Gerät auswählen, welches den Stream übertragen soll.

 

Raspberry Pi Livestream konfigurieren

Für die weiteren Schritte, in denen wir einige Einstellungen festlegen, schauen wir uns die Kamera Details an:

v4l2-ctl -V

Für meine USB Webcam habe ich folgende Ausgabe erhalten. Die Informationen zur Auflösung usw. werde ich gleich in der Konfigurationsdatei angeben.

pi@raspberrypi:~ $ v4l2-ctl -V
Format Video Capture:
        Width/Height  : 640/480
        Pixel Format  : 'YUYV'
        Field         : None
        Bytes per Line: 1280
        Size Image    : 614400
        Colorspace    : SRGB
        Flags         :

 

Bearbeiten wir also die Konfigurationsdatei von Motion:

sudo nano /etc/motion/motion.conf

Folgende Zeilen müssen angepasst werden (die Variable kann mit STRG+W gesucht werden, die hinteren Werte wurden geändert):

# Start in daemon (background) mode and release terminal (default: off)
daemon on
...
# Restrict stream connections to localhost only (default: on)
stream_localhost off
...
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /home/pi/Monitor

Folgene Zeilen sind optimal und sollten auch geändert werden (haben wir vorher ausgelesen):

v4l2_palette 15     # Nummer aus der Tabelle davor entnehmen, 15 enstpricht YUYV
... 
# Image width (pixels). Valid range: Camera dependent, default: 352 
width 640 

# Image height (pixels). Valid range: Camera dependent, default: 288 
height 480 # Maximum number of frames to be captured per second. 

# Valid range: 2-100. Default: 100 (almost no limit). 
framerate 10 

Gespeichert wird mit STRG+O und geschlossen mit STRG+X. Weitere Optionen (Port, etc.) können auch noch im Nachhinein angepasst werden (erfordert einen Neustart). Die Kurzbeschreibung der Einstellungen ist dabei aber recht aufschlussreich.

Jetzt müssen wir nur noch den Daemon aktivieren, damit wir den Service gleich laufen lassen können:

sudo nano /etc/default/motion

Hier ersetzen wir „no“ mit „yes“, womit folgender Text dort steht (ohne Kommentar):

start_motion_daemon=yes

 

Nun müssen wir den Ordner, den wir vorher als Speicherort für die aufgenommen Frames angegeben haben, noch erstellen und diesem die nötigen Schreibrechte erteilen:

mkdir /home/pi/Monitor
sudo chgrp motion /home/pi/Monitor
chmod g+rwx /home/pi/Monitor

Anschließend können wir den Service bereits starten:

sudo service motion start

 

 

Raspberry Pi Überwachungskamera Livestream testen

Um zu testen, ob unsere Kamera nun auch wirklich Livebilder sendet, haben wir prinzipiell zwei Möglichkeiten: Die eine Möglichkeit ist einfach den Browser (Mozilla Firefox, Chrome, etc.) zu verwenden und den Namen des Raspberry Pi’s, gefolgt vom Port (Standard: 8081) anzugeben. Wenn du den Hostnamen und Port nicht geändert hast, solltest du hierüber den Stream sehen können: http://raspberrypi:8081/ (alternativ kann die lokale IP Adresse verwendet werden, wie z.B. 192.168.1.51:8081).

Manche ältere Browser unterstützen diesen Stream allerdings nicht (Internet Explorer lässt grüßen 😀 ). Jene Nutzer können sich den Livestream z.B. über den VLC Player ansehen. Dazu einfach den VLC Player öffnen und im Menü unter „Medien“ -> „Netzwerkstream öffnen“ (STRG + N) die oben angegebene Adresse angeben. Dies ist im Übrigen auch im VLC Player für Smartphones und Tablets (Android, Apple) möglich. Dazu im Menü auf „Medienadresse öffnen“und die IP Adresse inkl. Port angeben.

Je nach angegebener Framerate (in der Konfigurationsdatei angegeben) ist das Bild flüssiger oder eben nicht. Natürlich muss die Kamera das auch entsprechend unterstützen. Falls die Kamera bspw. maximal 10 Frames pro Sekunde senden kann, bringt es natürlich nichts, falls mehr in der Konfiguration eingestellt wurden.

 

 

Außerhalb des Heimnetzwerks verfügbar machen

Da es kaum Sinn macht die Kamera im eigenen Netzwerk zu beobachten, wollen wir auch von außerhalb darauf zugreifen. Dafür brauchen wir eine feste IP oder aber einen DNS Service. Die meisten Telekommunikationsanbieter stellen feste IP Adressen jedoch (wenn überhaupt) nur gegen Bezahlung zur Verfügung, weshalb wir einen kostenlosen DNS Anbieter nutzen wollen. Natürlich kannst du auch einen anderen Anbieter deiner Wahl nehmen. Falls du bereits eine feste IP Adresse zuhause besitzt, so kannst du diesen Schritt überspringen.

Hinweis: Theoretisch kannst du auch eine nicht-statische IP Adresse verwenden, allerdings hat dies den Nachteil, dass du bei einem Reconnect eine neue IP Adresse bekommst und diese ggf. nicht mehr kennst. Da Provider ca. einmal am Tag (meist Nachts) einen Zwang-Reconnect durchführen, ist ein DNS Service sehr zu empfehlen, da sich die DNS Adresse eben nicht ändert.

Für all jene, die keine statische IP haben, habe ich hier gezeigt, wie man den DNS Service von NoIP installiert und konfiguriert.

Außerdem müssen wir noch den gewählten Port (z.B. 8081) in unserem Router zur Weiterleitung freigeben. Das bedeutet, dass wir von außerhalb des Netzwerks diesen Port ansprechen und uns darauf verbinden können. Da dies bei jedem Router etwas unterschiedlich ist, verweise ich auf das entsprechende Handbuch. Unter dem Punkt „Port Forwarding“ o.ä. kannst du den Port angeben, welcher für eine bestimmte lokale IP Adresse geöffnet wird. In meinem Router sieht das bspw. folgendermaßen aus:

Raspberry Pi NoIP PortForwarding

Das Menü des Routers ist meistens über 192.168.1.1 bzw. 192.168.0.1 über den Browser erreichbar. Sollte das nicht der Fall sein, wird in dem Handbuch aber auch stehen, wie du das Menü finden kannst.

Nutzt du den VLC Player musst du nun natürlich die lokale IP Adresse, die du vorher angegeben hast, mit deiner DNS- bzw. statischen IP Adresse ersetzen (Port ist weiterhin der selbe). Bei manchen Routern kann es sein, dass dies innerhalb des Netzwerks nicht klappt. Um es dennoch zuhause zu testen, kannst du am Handy z.B. kurzzeitig Mobile Daten anschalten (WLAN aus) und schauen, ob du den Livestream der Raspberry Pi Überwachungskamera sehen kannst. Je nach Internetverbindung (Upload Geschwindigkeit) wird das Bild ggf. etwas verzögert sein.



, , , , ,


19 Kommentare

  1. Ingo sagt:

    Wie geil! Das wollte ich schon immer haben. Werde ich die Tage sofort ausprobieren.
    Ich lasse momentan jeden Abend um 22:00 Uhr über ein Shell-Script ein 32 sec. Video von meinem Zweirichtungsstromzähler drehen… (Über GPIO LED-Lampe an, Video drehen, auf NAS speichern, LED aus.)
    Kann ich das LED-An und ausmachen noch bei diese Livestream-Sache einbauen?
    Ist der Stream eigentlich dauerhaft oder nur, wenn er über den Browser aufgerufen wird…?

    Gruß Ingo

    • Felix sagt:

      Der Webcam Server (Motion) läuft dauerhaft. Du kannst auch mit mehreren Clients den Stream abrufen. Auch kannst du ein Skript schreiben, das die LEDs schaltet und dieses per SSH/PHP/etc. ausführen, während du den Stream beobachtest.

  2. Daniel sagt:

    Servus,

    Schöne Anleitung. Drei Fragen hätte ich:
    1. Was hat das Ding für eine Verzögerung?
    2. Kann man damit quasi einen Türspion bauen (flüssiges Bild auf einem Pi Zero mit angeschlossenem Bildschirm?
    3. PiZero + CSI Kamera. Bekommt man damit eine flüssige Framerate hin?

    • Felix sagt:

      Hallo Daniel,
      bei mir war die Verzögerung ca. unter einer Sekunde (habe es nicht gestoppt). Wenn deine Kamera durch den Türspion passt, kannst du auch sicher das damit bauen. An den Pi Zero kannst du allerdings kein offizielles Touchschreen Modul hängen, da dafür der DSI Port gebraucht wird. (Neuer) PiZero + CSI Kamera sollte kein Problem sein, da wird es eher auf deine Netzwerkverbindung ankommen, falls du von außerhalb drauf zugreifen willst.

    • Daniel sagt:

      Die Anleitung scheint nicht mit der Raspicam zu funktionieren. Es wird kein Videogerät gefunden

    • Felix sagt:

      Ist sie auch per raspi-config aktiviert? Kannst du mit raspistill Bilder machen?

    • Daniel sagt:

      Jupp, ich kann Bilder damit machen. Nur taucht eben im /dev kein Video auf.

    • Felix sagt:

      Kannst du mal folgendes probieren und nochmal schauen?

      sudo modprobe bcm2835-v4l2
  3. Bernd sagt:

    Danke für das super Tutorial!!
    Bei mir gibt es allerdings das Problem, dass wenn sich etwas im Bild der Kamera bewegt, das Skript nicht mehr ausgeführt wird. Es stoppt also mit der Übertragung und das Skript muss neugestartet werden und funktioniert wieder bis zur nächsten Bewegung. Es ist weder ein Hardwareproblem noch ein Netzwerkproblem. Würde mich über eine Antwort sehr freuen.

    • Felix sagt:

      Hallo Bernd,
      ich hatte das Problem als ich es getestet anfangs auch – allerdings nur bei einer „Billigkamera“. Mit einer anderen Kamera funktionierte es dann reibungslos. Welche Fehlermeldung hast du bekommen?

    • Bernd sagt:

      Keine Fehlermeldung man merkt es nur an dem sich nicht mehr aktualisierendem Bild
      Danke für die schnelle Antwort

    • Felix sagt:

      Hast du einen Link zu deiner Kamera?

    • Bernd sagt:

      Nein aber es ist in der Tat eine alte „schrott Kamera“ Danke

  4. Daniel sagt:

    Aloha,

    ich habe es jetzt geschafft die Picam an einem Zero zum Laufen zu bringen. Ausgangssituation ist ein komplett frisches Raspbian auf einem Pi Zero 1.3, Raspi Camera Modul über CSI angeschloßen.

    Erstmal in raspi-config die Camera aktivieren.
    Deiner Anleitung bis einschl. install motion folgen.

    Es werden nun in der Anleitung folgende Kommandos angegeben:
    ls /dev/video*
    v4l2-ctl -V

    Diese Kommandos funktionieren nicht, es ist kein /dev/video vorhanden.
    Dein Tipp mit folgendem Kommando funktioniert erst nach einem Neustart:
    sudo modprobe bcm2835-v4l2

    Nach einem Neustart und der Eingabe von dem Commando kann man die zwei Kommandos oben ausführen. Dann kann man die Anleitung bis zum Ende weiter führen.

    Zumindest bei mir funktioniert die Kamera immer noch nicht. ein service motion status gibt nur an das der Service wegen einer Warnung nicht gestartet werden konnte.

    Jetzt mache ich einen neustart. Der Service Motion startet sich automatisch, läuft aber nicht. Ein service motion status zeigt, das das Gerät /dev/video0 nicht gefunden werden kann. Jetzt führt man nocheinmal sudo modprobe bcm2835-v4l2 aus, wartet 10 Sekunden (motion macht alle 10 Sekunden einen retry) und der Service Motion sollte normal laufen.

    Ich muss nur noch heraus finden wie ich das direkt am Start machen kann. crontab mag das irgendwie nicht ausführen.

    Ich hoffe ich konnte den einen oder anderen helfen.

  5. Daniel sagt:

    Ich habe jetzt ein paar Tage rum gespielt.

    Der Stream läuft flüssig solange sich nichts bewegt im Bild (sieht man an der Zeit unten rechts). Sobald sich aber was bewegt bricht der Stream ein und man hat erstmal ein paar Sekunden Standbild. Dann ruckelt es solange was im Bild ist und sobald sich nichts mehr bewegt läuft es wieder flüssig.

    Ich denke das liegt an dem Pixelvergleich was motion bei jedem Bild macht. Das scheint der Zero nicht zu packen. Eine Möglichkeit das auszuschalten habe ich noch nicht gefunden.

  6. Ingo sagt:

    Hallo, ich habe auf dem Browser folgendes laufen: http://www.forum-raspberrypi.de/Thread-powerpi-raspberry-pi-haussteuerung

    Wird es da Konflikte geben mit dem Livestream und PowerPi beim eintippsen der IP in den Browser? Oder sorgt der Port :8081 dafür, das beide Dienste laufen?
    (Bei PowerPi gebe ich die IP-Adresse ohne Port ein)

    Gruß Ingo

    • Felix sagt:

      Hallo Ingo,
      ich habe das nicht getestet, aber du ggf. den Port des Streams auch verändern, falls es zu Problemen kommen solle. Wenn du keinen Port angibst, wird es wahrscheinlich Port 80 sein.
      LG, Felix

  7. Juergen sagt:

    Hallo Felix,

    bei mir funktioniert der Livestream nicht:
    Meldung: „Video signal lost – Adding grey image“
    Einzelbilder kann ich mit der Webcam (USB) erzeugen.
    Einstellung: Palette = 2 (MJPG)

    MfG
    Juergen

  8. Koray sagt:

    Sehr schönes Tutorial
    Ich hätte dar mal ein paar fragen
    Wie kann man verhindern das es bei dem Stream Verzögerungen gibt?
    Und bei mir funktioniert die Raspberry Pi Kamera nicht
    könntest du mir bitte helfen?

    Vielen dank im Voraus

    MfG
    Koray

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!