Ein- und Anbinden von nicht lokalen Videoströmen und externen IP Kameras in Doorpi

  • Teil-1


    Hallo Zusammen,


    diese Anleitung beschäftigt sich mit der Ein- und Anbindung von nicht lokalen Videoströmen z.B von externen IP Kameras in die
    V4L Schnittstelle (Video for Linux) mittels einer Looback Schnittstelle (v4l2loopback) und einem Streamingwerkzeug (ffmpeg).


    Das Beispiel zeigt die Integration eines RTSP Streams, es können über ffmpeg auch andere Videoquellen angebunden werden, dies wird hier jedoch
    nicht beschrieben und sollte ausserhalb des Forums in den FFMPEG Foren zu finden sein.


    Ziel: Ein- und Anbindung von nicht lokalen Videoströmen oder Kamerahardware über IP in eine lokale Standardschnittstelle welche von Doorpi verwendet werden kann.


    Na dann mal los....


    1. Download Raspbian Image (Jessie Lite) unter raspberrypi.org/downloads/raspbian/


    2. Installation auf einer SD-Karte wie auf der offiziellen Webseite beschrieben.


    3. Lokal mittels (Funk)Tastatur anmelden.


    4. RaspConfig (sudo #raspi-config) ausführen und folgende Einstellungen setzen (raspberrypi.org/documentation/configuration/raspi-config.md)
    1 Expand Filesystem
    3 Boot Options -> B1 Console
    4 Internationalisation Options -> I1 Change Locale -> de_DE.UTF-8 UTF-8 (und auch als default auf der nächsten Seite setzen)
    4 Internationalisation Options -> I2 Change Timezone -> Europe -> Berlin
    4 Internationalisation Options -> I3 Change Keyboard Layout -> Generic 105-key (Intl) PC -> Other -> German -> German -> Rest bleibt Default
    5 Enable Camera -> NO (Da ich die RaspiCam NICHT nutze)
    7 Einen sexy Namen für den Raspi ausdenken und eintragen.
    7 SSH Server aktivieren -> Would you like the SSH server to be enabled? -> Yes
    7(Da ich den PiFace benutze) Advanced Options -> A6 SPI -> Yes -> Ok -> Yes
    Finish -> Yes
    Reboot -> Yes



    5. Nach dem Reboot SSH Konfiguration nach belieben anpassen, (Ich erlaube zur Konfiguration die Anmeldung von Root temporär. (Bei fertigen Systemen melde ich mich via SSH Schlüssel, BitVise als Client, gesteuert über LSC ERPM an))


    6. Password für das Konto pi setzen #passwd -> altes Password -> Neues Password -> Neues Password


    7. Password für das Konto "root" setzen #sudo passwd root -> Neues Password -> Neues Password


    8. Abmelden des Anwenders "pi" von der Konsole #exit


    9. Anmelden an der Konsole mit dem Anwender "root"


    10. Wenn notwendig IP Einstellungen anpassen (ich verwende ausschliesslich feste IP Adressen) (nano /etc/network/interfaces)


    Wenn alles passt dann einfach nochmal durchstarten mittels #reboot


    11. Nach dem Reboot Verbindung mit BitVise (Putty oder WinScp geht auch) herstellen Konsole öffnen


    12. Wenn die Basiskonfiguration steht erstmal das Betriebssystem aktualisieren mittels


    # apt-get update && apt-get upgrade (Dauert ein wenig)


    13.Pause! - Eine rauchen gehen und Kaffe nachfüllen :) während der Raspi aktualisiert


    14.Wenn alles passt dann einfach nochmal durchstarten mittels #reboot, da oftmals nicht alle Pakete und Kernelanteile neu geladen wurden nach dem Upgrade.


    15. Nach dem Reboot Verbindung mit BitVise (Putty oder WinScp geht auch) herstellen Konsole öffnen


    16. Befehl eingeben


    # uname -a


    - Als Ausgabe sollte "Linux (netbiosname) 4.4.34-v7+ #930 ....Datum Uhzeit)" erfolgen.


    - Von Interesse ist hier die aktuell verwendete Kernel Version (in meinem Fall) 4.4.34-v7+, das kann von Fall zu Fall und in der
    Zukunft anders aussehen, ist aber wichtig weil wir die entsprechenden Linux Header ebenfalls als Version 4.4.34-v7+ jetzt bereitstellen
    müssen das sonst der DKMS Loader bei einbinden der V4L Loopback Schnittstelle die Einbindung verweigert.


    17. Linux Kernel Header Dateien herunterladen.


    Ihr findet die für den Raspberry aktuellen aber auch älteren Linux Header Packete u.a hier:


    Linux Header


    In meinem Fall brauche ich also die Datei "linux-headers-4.4.34-v7+_4.4.34-v7+-2_armhf.deb", welche ich erstmal extern vom Raspi in einem Ordner speichere.


    18. Packet "v4l2loopback-dkms" herunterladen (bitte nicht via apt-get, aptitude oder was auch immer)


    In keinem Fall die Standardversion 0.8.0 aus der aktuellen Debian Jessie Distrubution verwenden, bitte sucht im Web in den Debian Standard Libarys im minimum die Version "v4l2loopback-dkms_0.9.1-4_all.deb".


    Hinweis! Version "v4l2loopback-dkms_0.10.0-1_all.deb" ist Stand 04.12.2016 noch als unstabil eingestuft.


    Loopback Package


    In meinem Fall nehme ich also die Datei "v4l2loopback-dkms_0.9.1-4_all.deb", welche ich erstmal extern vom Raspi in einem Ordner speichere (Dort wo auch die Linux Header Packete liegen.


    Wer will kann auch der Vollständigkeit wegen den Source dazu herunterladen "v4l2loopback-source_0.9.1-4_all.deb"


    19. Installation von Werkzeugen und Paketen (fswebcam)


    Ich verwende das Paket "fswebcam" um die mittels V4L bereitgestellen Schnittstellen auf der Kommandozeile testen zu können.


    Die Installation erfolgt hier via:


    # apt-get install fswebcam


    20. Installation von Werkzeugen und Paketen (ffmpeg)


    Das Packet "FFMPEG" ist nicht in der aktuellen Jessie Distrubution enthalten, deswegen muss man hier aktuell auf die offiziellen Debain Jessie Backport Quellen zurückgreifen.


    Dazu in der Datei "/etc/apt/sources.list" den folgenden Eintrag


    "deb http://ftp.uk.debian.org/debian jessie-backports main"


    hinzufügen.


    Hinweis: Bitte verwendet nicht die Debian Multimedia Gesocks Quellen, die meisten Pakete sind dort leider nicht brauchbar.


    Die Datei "/etc/apt/sources.list" speichern dann auf der Kommandozeile


    # apt-get update


    eingeben.... dann


    # apt-get install ffmpeg


    (ca. 150 Megabyte Platz werden gebraucht, alle abhängigen Pakete werden mit installiert)


    Nach der Installation von ffmpeg auf der Kommandozeile


    # ffmpeg


    eingeben, die Antwort sollte ensprechend sein


    "ffmpeg version 3.2-2~bpo8+2 Copyright (c) 2000-2016 the FFmpeg developers....." und weiter Blah Blah sein.


    Puh! - Fast fertig.... :)


    Teil-1 Ende

    SIP: Asterisk 14
    Dect: FrützBüx 7490
    O/S: Debain Jessie
    Automatisierung: CCU2 + CUXD + Pushover + Mail (YAHM)
    Aktoren: (bitte einfach fragen hab 250 Geräte im Einsatz)
    Anbindung Inet DynDns + VPN
    Sicherheit: Palo Alto, Fortigate, LSC ERPM
    Surveillance: Edimax, Digitus, Raspi
    Tracking: Cisco und LoraWan
    Netzwerke: CAT7 - 1Gb Uplink, FO (Multi-, Mono, POF), WLAN. Dect, BidCos, LoRa
    90% Hab ich sicher wieder vergessen - :D

    4 Mal editiert, zuletzt von Aldafera () aus folgendem Grund: Typos

  • Teil-2



    21. Installation von Werkzeugen und Paketen (dkms)
    Um das Laden und Unterstützung für dynamische Kernelmodule (v4l2loopback ist ein solches Modul) zu erhalten müssen wir dazu auf der Kommandozeile wiefolgt eingeben


    # apt-get install dkms


    22. Installation von Werkzeugen und Paketen (bc)


    Die Linux Kernel Header brauchen das Debianpacket "bc" welches wir mittels Kommandozeile installieren


    Kommandozeile


    # apt-get install bc


    23.Jetzt Linux Kernel Header und v4l2loopback DEB Pakete kopieren auf den Raspi nach /tmp


    Auf der Kommandozeile in das /tmp Verzeichnis wechseln


    # cd /tmp


    24. Als erstes die Linux Kernel Header installieren


    Kommandozeile


    # dpkg -i linux-headers-4.4.34-v7+_4.4.34-v7+-2_armhf.deb


    Die ganzen "make" Prozesse dauern etwas (ca. 10 Minuten)... deshalb Kaffee nachschütten und Pferde füttern gehen....


    25. Dann die v4l2loopback Schnittstelle installieren


    Kommandozeile


    # dpkg -i v4l2loopback-dkms_0.9.1-4_all.deb


    So sollte das danach aussehen....






    26. Test der Einbindung der v4l2loopback Schnittstelle


    Auf der Kommandozeile eingeben


    # ls /dev/video*


    Ist keine USB Kamera oder Raspi Kamera angeschlossen dann ist die Antwort:


    "ls: cannot access /dev/video*: No such file or directory"


    Wir haben also freie Bahn...


    Auf der Kommandozeile eingeben


    # modprobe -v v4l2loopback


    Die Anworte sollte so aussehen:


    insmod /lib/modules/4.4.34-v7+/kernel/drivers/media/media.ko
    insmod /lib/modules/4.4.34-v7+/kernel/drivers/media/v4l2-core/videodev.ko
    insmod /lib/modules/4.4.34-v7+/extra/v4l2loopback.ko


    Auf der Kommandozeile eingeben


    # ls /dev/video*


    Die Antwort sollte lauten:


    /dev/video0


    Damit lauert also die v4l2loopback Schnittstelle auf Eingabe.


    Wichtiger Hinweis:


    A: Die v4l2loopback Schnittstelle sollte wenn sie sauber funktioniert in den Startprozess vom Raspi eingebunden werden, wer das nicht will kann auch die v4l2loopback Schnittstelle immer noch dyamisch via Script starten.


    Um das ganze bei Systemstart zu erledigen einfach v4l2loopback in die Datei "/etc/modules" eingetragen.


    B: Ist bereits die Raspi-Cam oder eine andere USB Kamera angeschlossen wird das Kernelmodul die Ausgabe auf /dev/video1 oder /dev/video2 umleiten.


    Jetzt wird es spannend..... :)


    27. Externes RTSP Video mittels ffmpeg in die (V4L Loopback Schnittstelle umleiten).


    Via "# ls /dev/video*" haben wir herausgefunden das die V4L Loopback Schnittstelle ihre Ausgabe auf "/dev/video0" umleiten wird.


    Doch als erstes müsst ihr herausfinden, wie die die Video URL Eurer IP Cam angesprochen werden kann.


    In meinem Fall einer Digitus IP Cam geht das via:


    rtsp://oc1.oc2.oc3.oc4:Port/xkanal


    Um das zu testen, verwende ich unter Windows den VLC oder MS Media Player. (Ist einfach bequemer)


    Meine Kamera liefert 3 Kanäle (Main Stream, Medium Stream, Mobile Stream), ich verwende zum Test erstmal den "Medium Stream", auf der Kamera habe ich noch OSD und Zeitstempel aktiviert um bei Test sehen zu können of die Kamera neue Bilder liefert.


    Also dann.... starten wir mal ffmpeg mit folgenden Schaltern...


    Kommandozeile


    # ffmpeg -i "rtsp://192.xxx.xxx.xxx:xxx/xx" -vcodec rawvideo -y -f v4l2 /dev/video0


    Die Ausgabe sollte dann kontinuierlich Information liefern, welche anzeigt das der Stream ansteht.


    etwa so...


    "frame= 672 fps= 32 q=-0.0 size=N/A time=00:00:25.92 bitrate=N/A dup=33..... uvm.


    Das ganze ruhig mal 15 Minuten laufen lassen und sehen ob der Stream stabil bleibt und ffmpeg nicht abbricht.


    Hinweis: Stimmt was nicht erfolgt die Ausgabe von ffmpeg leicht zeitversetzt, also habt etwas Geduld.


    28. Test ob Video oder Bilddaten über die V4L Schnittstelle abgerufen werden können.


    Wir hatten ja das Werkzeug fswebcam installiert.


    Wir öffnen dazu ein zweites Konsolenfenster parallel zur ffmpeg Debugausgabe.


    Auf der Komandozeile wechseln wir in das Verzeichnis /tmp


    # cd /tmp


    dann erfolgt die Eingabe


    # fswebcam 1.jpg -d /dev/video0


    3 Sekunden warten und Snap und gleich noch eins.....


    # fswebcam 2.jpg -d /dev/video0


    3 Sekunden warten und Snap und gleich noch eins.....


    # fswebcam 3.jpg -d /dev/video0


    Im Verzeichnis /tmp müssten jetzt 3 Bilder liegen, diese bitte öffnen und nachsehen ob ffmpeg den RTSP Stream sauber Bildinformationen von eurer Kamera an die Loopback Schnittstelle übergibt, da die Bilder zeitversetzt aufgenommen wurden müsste im OSD Bereich jeweils ein anderer Zeitstempel zu sehen sein.


    Wer NIX sieht, hat was falsch gemacht, oder sollte die Kamera aus dem Kühl- oder Kleiderschrank rausholen.... :)


    Wer was auf den Bildern sieht hat es erstmal geschafft, somit ist die Ein- und Anbindung von einem externen Videostrom und einer externen Kamera über IP (RTSP) an die Loopback-Schnittstelle erfolgt.


    29. Hinweise...
    Hier wurde nicht beschrieben wie die V4L Loopback Schnittstelle und FFMPEG mit einen Videostrom nach einem Reboot wieder selbstständig eingebunden werden und starten, dies muss und kann jeder für sich selbst entscheiden und erledigen wie er seine Ressourcen beim Neustart einbinden will.


    30. Einen saufen gehen wenn es erstmal nicht klappt oder Doopi nach Vorgabe wie hier im Forum installieren, in die SIP Infrastruktur reinhängen, die Codecs sauber setzen usw.


    31. Doorpi anrufen und Live Video über externe IP Videoquelle geniessen.


    Megawichtiger Hinweis:


    Bitte fragt mich NICHT nach Schaltern innerhalb ffmpeg für Kamerhersteller XYZ oder Kameramodel ABC, auch pflege und verfüge ich NICHT über eine Sammlung von Kamera-API's, welche man mittels DMTF und HTTP Requests einbinden kann. Wer hierzu mehr wissen will und muss, wende sich bitte an seinen Händler oder Hersteller oder einem Hacker seines Vertrauens.


    Wer seine Überwachungskamera über WLAN reinhängt und sich über zu hohe Latenzzeiten und Verbindungsabbrüche wundert, sollte lieber ein Kabel verlegen und die Kamera über das lokale Netwerk betreiben, alternativ einfach die Kamera mit einer USB LAN Netzwerkkarte an den Raspi anschliessen.


    Ob ihr OSD über die Kamera oder ffmpeg einbindet ist Euch überlassen, ebenso ob ihr das Videomaterial muxen müsst oder nicht, auch hierzu kann ich aufgrund einer fehlenden Glaskugel, samt Talent und Bedienugsanleitung nix sagen. Danke!


    Aldafera aka Harald

    SIP: Asterisk 14
    Dect: FrützBüx 7490
    O/S: Debain Jessie
    Automatisierung: CCU2 + CUXD + Pushover + Mail (YAHM)
    Aktoren: (bitte einfach fragen hab 250 Geräte im Einsatz)
    Anbindung Inet DynDns + VPN
    Sicherheit: Palo Alto, Fortigate, LSC ERPM
    Surveillance: Edimax, Digitus, Raspi
    Tracking: Cisco und LoraWan
    Netzwerke: CAT7 - 1Gb Uplink, FO (Multi-, Mono, POF), WLAN. Dect, BidCos, LoRa
    90% Hab ich sicher wieder vergessen - :D

    6 Mal editiert, zuletzt von Aldafera ()