cvlc über crontab klappt nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Abend!

    entweder bin ich blind und blöd oder der Fehler sitzt tiefer.

    Habe hier zwei Raspi 3B+ mit Buster, ein Live-Audiostream soll von einem zum anderen Raspi gestreamt werden (alles im lokalen Netz per LAN, kein WLAN etc.).

    Auf Raspi1 (192.168.1.12) läuft darkice als Server, Audio wird auf Port 8000 ausgegeben (d.h. stream an 192.168.1.12:8000). Soweit so gut, das läuft.

    Auf Raspi2 (192.168.1.11) soll über cvlc der Audiostram abgehört werden.

    Gebe ich auf Konsole diesen Befehl ein:

    Code
    cvlc http://192.168.1.12:8000/rapi.mp3

    kommt wunderbar der Ton an.
    Ich will das aber idiotensicher haben, so dass nach einem reboot das automatisch läuft, also habe ich in crontab diese Zeile eingefügt:

    Code
    @reboot sleep 70 && cvlc http://192.168.1.12:8000/rapi.mp3

    Damit startet cvlc aber nicht - besser gesagt es bleibt stumm.

    pgrep listet aber vlc.

    Ich habe die Startverzögerungen schon zwischen 20 s und 70 s variiert, kein Effekt.

    Die crontab an sich funktioniert, die Zeilen davor und danach werden brav ausgeführt.

    Verwende ich in der crontab statt "cvlc" den "vlc", tut sich genau gar nichts, d.h. VLC-Fenster geht nicht auf und auch pgrep zeigt KEINEN vlc.

    Bin echt ratlos - wenn ich den Befehl in der crontab kopiere und in der Konsole einfüge und ausführe, klappt es - in crontab aber nicht.

    Erklärungen dafür?

  • Zur hilfreichsten Antwort springen
  • hyle : das kommt als Ausgabe in die txt Datei. Interessant, klärt für mich aber noch nicht, warum es über Konsole geht.

    Code
    [01e321d8] vlcpulse audio output error: PulseAudio server connection failure: Verbindung verweigert
    [01e6e768] dbus interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
    [01e6e768] main interface error: no suitable interface module
    [01daeb58] main libvlc error: interface "dbus,none" initialization failed
    [01e59550] main interface error: no suitable interface module
    [01daeb58] main libvlc error: interface "globalhotkeys,none" initialization failed
    [01e59550] dummy interface: using the dummy interface module...
    [73501d00] prefetch stream error: unimplemented query (264) in control

    die letzte Meldung kommt übrigens auch bei Aufruf über Konsole, nach einigem googeln bin ich aber der Meinung, dass man das ignorieren kann (geht ja trotzdem..).

    An Systemd service unit hatte ich auch schon gedacht, wollte mich jetzt aber nicht in noch was neues einlesen, wenn es doch nur um einen "primitiven" Programmstart nach reboot geht.


    RTFM : die Datei /home/pi/.config/vlc/vlcrc. ist vorhanden, aber soweit ich gesehen habe sind alle Einträge auskommentiert (also wohl jungfräulich).

    Trägt das irgendwie zur Problemlösung bei?

  • da war ich vorhin wohl zu ungeduldig, in die txt Datei kam noch mehr (letzte zwei Zeilen):

    Code
    [01e321d8] vlcpulse audio output error: PulseAudio server connection failure: Verbindung verweigert
    [01e6e768] dbus interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
    [01e6e768] main interface error: no suitable interface module
    [01daeb58] main libvlc error: interface "dbus,none" initialization failed
    [01e59550] main interface error: no suitable interface module
    [01daeb58] main libvlc error: interface "globalhotkeys,none" initialization failed
    [01e59550] dummy interface: using the dummy interface module...
    [73501d00] prefetch stream error: unimplemented query (264) in control
    [73500d40] http stream error: error: HTTP/1.0 404 File Not Found
    [739006b0] main input error: ES_OUT_SET_(GROUP_)PCR  is called too late (pts_delay increased to 666 ms)
  • Neben dem Umstand, dass man solches nicht in einer Cron-Datei macht

    Code
    @reboot sleep 70 && cvlc http://192.168.1.12:8000/rapi.mp3

    (da ruft man ein Programm oder Skript auf), wurde ja schon gesagt:

    Es benötigt ein User Envionement, und eine Startkonfigurationsdatei. Ohne eigens definiertes Startscrtpi als Option ist das /home/USER/.config/vlc/vlcrc.

    ( USER ist der Username, unter dem das ganze läuft, und ohne angemeldeten User und dessen Umgebung, ... )

    Computer ..... grrrrrr

  • razupaltuff Verwendest Du die crontab von pi, also aufgerufen mit crontab -e (ohne sudo)?

    Btw.

    [73500d40] http stream error: error: HTTP/1.0 404 File Not Found [739006b0] main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 666 ms)

    Scheint das Netzwerk doch noch nicht oben zu sein o.ä.

    Du kannst die Befehle ja mal in ein Skript schreiben und dieses per Cron aufrufen, aber die Aussage "macht man nicht" bei einem Einzeiler ist Käse. :shy: Der einzige Unterschied ist die verwendete Shell: Terminal (bash) und Usercrontab (sh), die man aber anpassen kann.

  • Ja, ich verwende die crontab von pi, deshalb auch mein Hinweis auf /home/pi/.config/vlc/vlcrc

    Der Hinweis auf bash bzw sh ist finde ich die erste heiße Spur, danke hyle !

    Werde das mal testen.

    Rasp-Berlin : ich verstehe leider nicht, was du mir mit dem Hinweis auf vlcrc sagen willst.

    In #6 hatte ich schon geschrieben, dass es die Datei für user pi gibt, aber alles darin auskommentiert ist. Sie ist ewig lang, langsames durchscrollen hat über 5 min gedauert. Habe dabei keine (auskommentierten) Einträge gefunden, die mir hilfreich erschienen.

    Was soll ich deiner Meinung nach in der Datei ändern?

  • Ich habe jetzt eine Script Datei erstellt, die den vlc aufruft, dieses Script (start-audio.sh) wird in crontab (von user pi) bei reboot aufgerufen:

    Code
    Zeile in crontab:
    @reboot /home/pi/start-audio.sh

    Als shebang habe ich dabei wechselweise #!/bin/sh und #!/bin/bash verwendet - hat leider keinen Unterschied ergeben... ;(

    Die Ergebnisse habe ich jeweils in eine Datei schreiben lassen.

    In Summe bleibt es beim alten: wenn ich das script aus dem Dateimanager aufrufe, klappt es (Ton geht), wenn ich das script per crontab nach reboot starten lasse, kommt kein Ton.

    Ich bin echt ratlos!

    hier die messages:

    Code
    # start-audio.sh aus Dateimanager mit Doppelklick gestartet, Inhalt Script:
    #   #!/bin/sh
    #   sleep 60 && cvlc http://192.168.1.12:8000/rapi.mp3 > /home/pi/cronausgabe4.txt 2>&1
    # Inhalt cronausgabe4.txt :
    
    [00dd6d68] dummy interface: using the dummy interface module...
    [62401dd0] prefetch stream error: unimplemented query (264) in control
    
    --> Ton funktioniert!!

    Ich habe noch viele weitere Varianten durchgespielt (mit/ohne "DISPLAY=:0" , verschieden shebangs, verschiedene delays, ...), es kommt aber immer das gleiche raus: Direkter Start funzt, via crontab geht es nicht.

    Hier mal die letzten Einträge aus /var/log/syslog :

    pulseaudio bzw. alsa meckert (ganz unten) - aber wenn das wirklich der alleinige Grund wäre, dürfte es bei direkten Start des Scripts doch auch nicht gehe - oder sehe ich dem Wald vor lauter Bäumen nicht mehr??? :helpnew::helpnew::helpnew:

  • Wenn ich geahnt hätte, dass dieses Projekt soooo eine schwere Geburt wird, hätte ich wohl nicht damit angefangen...

    Jetzt sind aber schon wirklich Monate Zeit rein geflossen und es hängt nur noch an diesem dre*** Sound!!

    In meiner Not habe ich jetzt mal vlc durch omxplayer ersetzt, d.h. im script steht nun:

    Code
    DISPLAY=:0 sleep 60 && omxplayer -o alsa http://192.168.1.12:8000/rapi.mp3 > /home/pi/cronausgabe9.txt 2>&1

    Gleiches Spiel: Ton bleibt stumm, omxplayer taucht aber als Prozess unter pi bei pgrep auf.

    Einziger Unterscheid: hier bleibt die Datei "cronausgabe9.txt" leer - scheinbar ist der omxplayer nicht so mitteilsam wie vlc.

    Wenn ich den identischen Befehl auf Konsole eingebe klappt der Ton und das steht im txt file:

    Code
    Audio codec mp3float channels 2 samplerate 44100 bitspersample 16
    Subtitle count: 0, state: off, index: 1, delay: 0
    have a nice day ;)

    -als ob nix gewesen wäre...

    Plan B: Handfunke für Sound?? :@:evil::wallbash: *#/%&-!!

  • habe jetzt eine Service Unit nach deinem Link erstellt, startaudio.service:

    dann kopiert mit

    Code
    sudo cp startaudio.service /etc/systemd/system/startaudio.service

    dann aktualisiert mit

    Code
    sudo systemctl daemon-reload

    dann gestartet mit

    Code
    sudo systemctl start startaudio.service

    Erfolg: nada, niente, rein gar nix.

    reboot gemacht: weithin kein Ton

    Fazit:

    Identisches Ergebnis wie über crontab

    dann mal per browser auf den anderen Pi gegangen, d.h. http://192.168.1.12:8000 (dort läuft der audiostream, den ich hören will):

    d.h. obwohl kein Ton kommt gibt es einen Zuhörer!!!

    Wenn ich dann auf Konsole den vlc starte mit

    Code
    cvlc http://192.168.1.12:8000/rapi.mp3

    geht der Ton und der IceCast Server sagt

    Code
    Listeners (current):    2


    Was mich verblüfft ist der Zuhörer. Kann es sein, dass vlc das irgendwohin anders ausgibt?

    Beim omxplayer hatte ich das aber sogar extra angegeben ("-o alsa" als output), hat auch nix geholfen...

    doch Handfunke???

  • Vielleicht zur Ergänzung hilfreich:

    An jedem Raspi3b+ hängt ein 7' Touchdisplay per HDMI. Der Touch geht je über ein zusätzliches USB Kabel an den Raspi .

    Beide Raspis haben ein org. Netzteil, beide Displays werden über jeweils eigene USB Netzteile mit Strom versorgt.

    An beiden Raspis hängt je ein Jabra Headset (USB) für Mic und Soundausgabe.

    Im alsamixer sind die Jabra Headsets als audio konfiguriert.

    Die Displays haben keine Speaker.

    Wäre es denkbar, dass vlc die Audioausgabe an den HDMI schickt, wenn man ihn aus corontab oder service unit startet, bei Aufruf aus Konsole aber ans Headset (USB)???

    Wäre mir zwar ein Rätsel warum, aber das würde zum Bild passen...

    Weiß jemand, wie man vlc zu einer bestimmen Ausgabe zwingen kann?

    Die manpage war da nicht sehr erhellend (wenn auch ewig lang...).

    Code
    ALSA-Audioausgabe (alsa)
          --alsa-audio-device {default,null,jack,pulse,sysdefault:CARD=b1,dmix:CARD=b1,DEV=0,dsnoop:CARD=b1,DEV=0,hw:CARD=b1,DEV=0,plughw:CARD=b1,DEV=0,usbstream:CARD=b1,sysdefault:CARD=Headphones,dmix:CARD=Headphones,DEV=0,dsnoop:CARD=Headphones,DEV=0,hw:CARD=Headphones,DEV=0,plughw:CARD=Headphones,DEV=0,usbstream:CARD=Headphones,sysdefault:CARD=J30,front:CARD=J30,DEV=0,surround21:CARD=J30,DEV=0,surround40:CARD=J30,DEV=0,surround41:CARD=J30,DEV=0,surround50:CARD=J30,DEV=0,surround51:CARD=J30,DEV=0,surround71:CARD=J30,DEV=0,iec958:CARD=J30,DEV=0,dmix:CARD=J30,DEV=0,dsnoop:CARD=J30,DEV=0,hw:CARD=J30,DEV=0,plughw:CARD=J30,DEV=0,usbstream:CARD=J30} 
                                     Audio-Ausgabegerät
              Audio-Ausgabegerät (mit ALSA-Syntax).
          --alsa-audio-channels {1 (Mono), 6 (Stereo), 102 (Surround 4.0), 4198 (Surround 4.1), 103 (Surround 5.0), 4199 (Surround 5.1), 4967 (Surround 7.1)} 
                                     Audio-Ausgangskanäle
              Verfügbare Audio-Ausgangskanäle. Wenn die Eingabe mehr Kanäle als der
              Ausgang besitzt, wird sie heruntergemischt. Dieser Parameter wird
              ignoriert, wenn die digitale Weiterleitung aktiv ist.

    das Headset ist hw 2/0 , passt irgendwie nicht zur Syntax oben...

  • Also ich habe jetzt mal folgenden Cronjob erstellt:

    crontab -e

    Code
    @reboot sleep 20 && cvlc http://rsa.hoerradar.de/rsasachsen-rockzirkus-mp3-hq > /home/pi/cronausgabe.txt 2>&1

    Den Radiosender habe ich, um das evtl. fehlende Netzwerk zu simulieren. Das funktioniert bestens.

    Die Ausgabe ist bei mir

    Code
    [01d0ce48] vlcpulse audio output error: PulseAudio server connection failure: Verbindung verweigert
    [01d49e20] dbus interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
    [01d49e20] main interface error: no suitable interface module
    [01c88b58] main libvlc error: interface "dbus,none" initialization failed
    [01d346f0] main interface error: no suitable interface module
    [01c88b58] main libvlc error: interface "globalhotkeys,none" initialization failed
    [01d346f0] dummy interface: using the dummy interface module...
    [73401e18] prefetch stream error: unimplemented query (264) in control

    Die Kopfhörer hängen am analogen Ausgang (AV Jack).


    Vielleicht versuchst Du das auch (erst)mal an der normalen Kopfhörerbuchse.


    Btw. Die ExecStart-Zeile ist keine Shell im eigentlichen Sinne. Dort sollte wirklich nur ein Skript- oder Programmpfad stehen. Du hattest doch start-audio.sh schon erstellt. Wenn das ausführbar ist, kannst Du das auch verwenden. Der auszuführende User fehlt auch in Deiner Unit.

  • Vielen Dank für deine Ausdauer!! :thumbup:

    Das mit dem user war mir auch schon aufgefallen, dadurch wurde vlc als root gestartet, was der verweigert.

    Mit User=pi wurde es aber auch nicht erfolgreich.

    Hab nun als Programmaufruf mein Script verwendet, gleiches Ergebnis.

    Zumindest habe ich der txt Datei die identischen Meldungen wie du, also wird es wohl am falschen Ausgang liegen. Komme leider ohne Zerlegen nicht an die AV Buchse, was für nach dem Abendessen....

    20211011_180848xbjid.jpg"

    Wenn der Sound nun an AV oder HDMI geht, bliebe die Frage, wie ich ihn auf USB umbiegen kann.

    Und warum es eine Unterschied macht, wie man vlc aufruft, ist mir dabei auch schleierhaft.

    2 Mal editiert, zuletzt von razupaltuff (11. Oktober 2021 um 18:28) aus folgendem Grund: Bin zu doof um Bilder einzufügen

  • aktuell gesteckt:

    Jabra Headset auf USB

    Handy Headset auf AV Buchse

    kleine Speaker an HDMI (das Display hat 4 Pins für passive Stereolautsprecher)

    und

    Code
    pi@raspberrypi1:~ $ cat /etc/asound.conf
    cat: /etc/asound.conf: Datei oder Verzeichnis nicht gefunden

    soll das etwas heißen, da fehlt nur eine popelige *.conf ???

    Und das hat mich jetzt drei Wochenenden gekostet?

Jetzt mitmachen!

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