Problem mit automatisiertem Livestream

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen!

    Ich habe ein Problem mit einem automatisch gestarteten Livestream vom Pi auf die Android-App VLC. Gleich vorweg, das ist mein erstes Projekt mit dem Pi und ich kenne mich dementsprechend wenig mit dem Pi und Debian bzw. Linux im Allgemeinen aus.

    Was ich erreichen will, ist, dass der Pi (3B+, Raspian "Stretch", Verbindung per WLAN) direkt nach dem Hochfahren einen Livestream der PiCam startet und diesen im WLAN verfügbar macht. Der Pi soll dabei ohne Monitor und ohne Eingabegeräte starten. Das Runterfahren erledige ich über einen Taster, der an einem der GPIO-Pins hängt. Der Stream soll am Android-Tablet über VLC angezeigt werden.

    Was ich bisher hinbekommen habe:

    In der rc.local habe ich als letztes vor dem "exit 0" eine Bash-Datei gestartet, in welcher zwei Dinge passieren:

    1. Ein Pythonskript wird gestartet, welches in einer while-Schleife auf das Signal des Tasters wartet, um den Pi dann mit call("sudo shutdown -h now", shell=True) runterzufahren. Das Skript wird mit einem "&" am Ende gestartet, damit die Bash-Datei weiterläuft und nicht wartet.

    2. Der Stream wird gestartet mit dem Befehl "/opt/vc/bin/raspivid -o - -t 0 -w 800 -h 600 -fps 25 -b 1500000 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264"

    Das funktioniert auch tadellos - sobald der Pi hochgefahren ist, filmt die Kamera, und wenn ich testhalber einen Monitor an den Pi anschließe, wird mir der Stream auch am Monitor dargestellt. Drücke ich den Taster, fährt der Pi runter. Soweit funktioniert das also wie geplant.

    Hier tritt nur ein seltsames Problem auf, für das ich keinen Grund und erst recht keine Lösung finde: wenn ich mich nach dem Start des Streams mittels VLC vom Tablet aus mit dem Stream verbinde, bekomme ich am Tablet im VLC eine Meldung, dass "der Ort [IP-Adresse] nicht geöffnet werden kann". Wenn ich jetzt aber mittels SSH am Pi den Stream mit "killall raspivid" beende und die Bash-Datei, die beim Start in der rc.local aufgerufen wird, nochmal manuell starte, dann wird der Stream erneut geöffnet und wenn ich es jetzt nochmal am Tablet in der VLC-App versuche, dann klappt die Verbindung und der Stream wird mir auch auf dem Tablet angezeigt.

    Theoretisch funktioniert das also alles, nur beim automatisierten Start steht der Stream scheinbar nicht zur Verfügung, oder der Pi ist unter seiner IP nicht erreichbar. Ich hab zum einen testhalber versucht, den Start des Streams mittels "sleep(60)" zu verzögern, für den Fall, dass das WLAN noch nicht soweit ist, wenn der Stream startet, aber das hat auch nichts gebracht. Zum anderen habe ich den Start des Streams auf einen weiteren Taster gelegt, und nach dem Hochfahren ein paar Minuten gewartet, bevor ich den Stream dann per Taster gestartet habe, aber auch das hat nichts gebracht. Es ist jedesmal das gleiche Ergebnis: VLC kann sich mit dem automatisch gestarteten Stream nicht verbinden, mit dem anschließend manuell gestarteten Stream aber schon.

    Und hier hänge ich jetzt fest. Hat jemand von euch evtl. eine Idee?

    Gruß Benza

  • 2. Der Stream wird gestartet mit dem Befehl "/opt/vc/bin/raspivid -o - -t 0 -w 800 -h 600 -fps 25 -b 1500000 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264"

    ... Wenn ich jetzt aber mittels SSH am Pi den Stream mit "killall raspivid" beende und die Bash-Datei, die beim Start in der rc.local aufgerufen wird, nochmal manuell starte, dann wird der Stream erneut geöffnet und wenn ich es jetzt nochmal am Tablet in der VLC-App versuche, dann klappt die Verbindung und der Stream wird mir auch auf dem Tablet angezeigt.

    BTW: Die eleganteste Lösung ist das nicht, ... mit der rc.local.

    Aber poste mal (in spoiler und codeblocks) vor dem "killal rasivid", von deinem PI die Ausgaben von:

    Code
    sudo lsof -nPi
    ps aux | grep -i [r]aspivid
    systemd-analyze time
    systemd-analyze blame

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ich fürchte, dass im Hintergrund, nicht interaktiv, die Shell kein /dev/stdin kennt, und die Ausgabe von raspivid nicht über /dev/stdin an cvlc übergeben werden kann.

    Im /var/log/syslog sollte dazu auch ein Fehlerhinweis ersichtlich sein. (cvlc cannot open /dev/stdin oder so).

    Ich weiß allerdings nicht, wie die raspi-cam (ziemlich systemnah) am Pi eingebunden wird, und ob dies erst nach Starten von raspivid erfolgt. Allenfalls müsstest Du ein Video-, oder Framebuffer Device als Eingabe für (c)vlc verwenden.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (27. November 2018 um 10:09)

  • Ich kann leider vor dem killall raspivid nichts eingeben, ....

    Du meinst, eingeben schon (... denn Du gibst ja killall auch irgendwo ein) aber keine Ausgabe sehen bzw. erfassen?

    Evtl. die Ausgaben in eine Textdatei schreiben lassen und den Inhalt hier posten.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ok, hier die Ausgaben deiner vier Anweisungen. Das ist passiert, während der erste gestartete Stream noch lief, ich hatte also noch kein killall eingegeben (über das Konsolenfenster in Putty):

    Spoiler anzeigen


    1. sudo lsof -nPi

    Code
    sudo: lsof: Befehl nicht gefunden

    2. ps aux | grep -i [r]aspivid

    Code
    root 955 0.4 0.2 62492 2020 ? S1 09:36 0:01 /opt/vc/bin/raspivid -0 - -t -w 800 -h 600 -fps 25 -b 1500000

    3. systemd-analyze time

    Code
    Startup finished in 1.907s (kernel) + 9.087s (userspace) = 10.995s

    4. systemd-analyse blame

  • Das ist passiert, während der erste gestartete Stream noch lief, ich hatte also noch kein killall eingegeben (über das Konsolenfenster in Putty):

    Wenn lsof nicht installiert ist, dann die Ausgabe von:

    Code
    sudo netstat -tulpena

    und für blame hast Du nicht nach unten gescrollt (d. h. die Ausgabe von blame ist nicht vollständig).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ok, hier die Ausgaben:

    Spoiler anzeigen

    1. sudo netstat -tulpena

    2. nochmal systemd-analyze blame:

  • ok, hier die Ausgaben:

    OK, und jetzt die Ausgabe von:

    Code
    sudo netstat -tulpena

    nach dem killall (bzw. nach dem manuellen starten) und nach dem erfolgreichen Herstellen der Verbindung mit dem Tablet (VLC-App).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Spoiler anzeigen

    ok, netstat -tulpena nach dem killall:

    ...und nach der Verbindung mit VLC:

  • Code
    tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN      1000       13807      990/vlc
    tcp        0      0 192.168.178.32:8090     192.168.178.22:57336    VERBUNDEN   1000       13812      990/vlc
    tcp6       0      0 :::8090                 :::*                    LISTEN      1000       13808      990/vlc

    D. h., mit rc.local wird vlc nicht gestartet. Versuch mal mit dem absoluten Pfad für cvlc in der rc.local:

    Code
    ps aux | grep -iE '[v]lc|[r]aspivid|[c]vlc'

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ok, ich hab die von dir angegebene Zeile in die rc.local eingefügt, vor dem Aufruf der Bash-Datei, welche den Stream startet.
    Der Stream startet jetzt schon bevor der Desktop angezeigt wird, aber beim Verbinden mit VLC leider immer noch "Ort konnte nicht gelesen werden". Nach "killall raspivid" und erneutem Start der Bash-Datei klappt die Verbindung dann.

  • ..., aber beim Verbinden mit VLC leider immer noch "Ort konnte nicht gelesen werden". ...

    Schau auf deinem PI nach, ob auf dem TCP-Port 8089 gelauscht wird. Wenn das nicht der Fall ist, kann auch keine Verbindung zustande kommen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ok, wie mache ich das?

    Z. B. mit:

    Code
    sudo netstat -tlpena | grep -i 8089
    ps -fC vlc
    ps -fC cvlc

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ok, hab alle drei Zeilen eingegeben:

    Code
    sudo netstat -tlpena | grep -i 8089
    -> keine Rückmeldung, steht wieder auf dem Prompt (mit "-tulpena" statt "-tlpena" auch, bei Port 8090 statt 8089 auch. hab das zur Sicherheit auch probiert)
    
    ps -fC vlc
    -> UID        PID  PPID  C STIME TTY          TIME CMD
    
    ps -fC cvlc
    -> UID        PID  PPID  C STIME TTY          TIME CMD
  • ok, hab alle drei Zeilen eingegeben:

    Du solltest auch schreiben, zu welchem Zeitpunkt bzw. nach welcher Aktion/Handlung/Vorgang, Du das abgefragt hast.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Du solltest auch schreiben, zu welchem Zeitpunkt bzw. nach welcher Aktion/Handlung/Vorgang, Du das abgefragt hast.

    Nachdem der Pi hochgefahren und der Stream automatisch gestartet war, hab ich mich über Putty verbunden und die drei Zeilen in der Konsole eingegeben.

  • Nachdem der Pi hochgefahren und der Stream automatisch gestartet war, ...

    Ja, da wird der stream noch gestartet, aber vlc nicht, denn auf dem Port 8090 (btw: mein Fehler mit 8089) wird nicht gelauscht.

    D. h. m. E., rc.local ist z. Zt. nicht dafür geeignet. Du willst das ja headless machen, ... ist eine *.desktop-Datei dafür geeignet? Evtl. mit einer service-unit + timer-unit?

    https://wiki.ubuntuusers.de/systemd/Units/

    https://wiki.ubuntuusers.de/systemd/Service_Units/

    https://wiki.ubuntuusers.de/systemd/Timer_Units/

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!