Abspielen von Bildern und Videos im Loop

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

    ich habe auch mal eine Frage, hoffe das ist im richtigen Thread gelandet.

    Zur Frage:

    Hintergrund:
    ______________
    Wir vom Verein haben uns überlegt, einen sogenannten InfoScreen im Besucher und Mitlieder Raum zu stellen.
    Dies soll über einen Raspi Pi geschehen der an einem Fernseher angeschlossen ist.

    Desweiteren soll er über unsere interne HP die "Informationen" (Bilder und Videos) herunterladen und diese danach abspielen.
    Diese Informationen werden vom Vorstand in die HP eingebunden und vom Raspi automatisch gedownloaded bzw. abgespielt.

    Soweit der Hintergrund.

    Die Synchronisation mit der HP klappt perfekt mittels kleinem Python Script. Die Bilder-Links werden in eine Playlist geschrieben. Genau so auch die Videos.

    Das eigentliche Problem was ich habe, ist das play.py Script, welches dafür sorgt das die Bilder(mit FBI) und die Viedeos(omxplayer) abgespielt werden und das im loop.
    Hier liegt das Problem am "recursion limit". Auch das hochsetzten des limits bewirkt zwar eine längere Laufzeit des Scripts, jedoch löst es nicht das Problem das das Script beim max_recuirsion abgebrochen wird.

    Ich würde es allerdings bevorzugen, wenn das Skript automatisch wieder starten würde wenn es abschmiert.

    Desweiteren habe ich ein Start-Script.sh, welche nur nach dem neustart das python script play.py ausführen soll.

    Zur Lösung hätte ich 2 Ideen, weiß aber nicht wie ich die umsetzen kann, da ich ziemlicher newbie bei python bin.

    1. Idee:
    ----------

    In der play.py eine Variable Counter definieren, die bei jedem Aufruf von "FBI" und "omxplayer" den counter +1 hochsetzt. Wenn der gewisse Counter erreicht ist, dann soll das start_script.sh wieder erneut ausgeführt werden, und das play.py gekillt werden.
    (um einen sauberen Loop zu bekommen)

    2. Idee: (Meiner Ansicht nach die bessere)
    ----------------------------------------------------

    Im play.py die "PID" vom play.pi auslesen, diese als Argument an die start_script.sh zu übergeben und im start_script.sh eine Funktion einbauen "Wenn argument vorhanden ist, dann kill <argument>

    Hier ist auch mein Problem. Ich bekomme es einfach nicht hin.

    Vielleicht kann mir jemand von Euch ein wenig helfen.
    Vielen Dank schonmal im Vorraus.

    start_script.sh:

    Code
    clear
    
    
    sudo python /home/pi/Scripts/play.py

    play.py:

    Einmal editiert, zuletzt von eav (2. Januar 2017 um 14:39)

  • Bitte zeig deinen Code so, dass er hier auch die korrekten Einrückungen hat - so ist er nicht zu verstehen. Ein RecursionError weist im Grunde auf einen simplen Programmierfehler hin, den man einfach ausmerzen kann, und dann muss man sich auch keine solchen Workarounds überlegen.


  • Bitte zeig deinen Code so, dass er hier auch die korrekten Einrückungen hat - so ist er nicht zu verstehen. Ein RecursionError weist im Grunde auf einen simplen Programmierfehler hin, den man einfach ausmerzen kann, und dann muss man sich auch keine solchen Workarounds überlegen.

    Hoffe jetzt ist es besser.

    Danke für den Tipp.
    Ja, da recursionLimit ist erreicht nach "X" Aufrufen von "fbi" und "omxplayer".

    Letztlich muss ich die beiden Programme immer wieder neu aufrufen, damit sich die Änderungen der Playlist bemerkbar machen.
    Ich meine für Alternativen bin ich auch dankbar. Vielleicht auch nen Hinweis was denn am Code falsch sein könnte. Ich möchte nur sicherstellen, das die Bilder und Videos gemäß Playlist (welche sich ändern kann) hintereinander abgespielt werden. Und das alles am besten ohne einen Neustart des PI´s

    Laufen soll es 24/7.

  • Wie wird denn die Playlist geschrieben? So wie das gerade aussieht machst du das als Python-Modul. Das ist fuer sich genommen ja schon mal ungewöhnlich, weil es dich zwingt, den import-Mechanismus zu "ueberlisten".

    Stattdessen eine einfach CSV oder JSON-Datei zu verwenden ist sinnvoller & umschifft dieses Problem.

    Ausserdem ein klassischer Fehler, der GANZ DICK in der Doku steht: man soll os.system NICHT BENUTZEN!

    Benutze stattdessen das empfohlene subprocess-modul, und du bekommst Popen-Objekte fuer deinen omxplayer bzw fbi, und kannst die Prozesse gleich killen - ohne so ein pidof-Gewuerge.

    Auch solltest du die playVideos.py wegfallen lassen, und gleich dieses Skript so erweitern, dass es deren Funktionalitaet mit macht - denn sonst hast du einen Unterprozess der einen Unterprozess startet, und das wird haesslic.h

    Last but not least - es ist klar, dass du eine Endlosrekursion bekommst, wenn du jeweils am Ende deiner zwei Funktionen die andere aufrufst!

    Ein einfaches

    Code
    while True:
        playVideos()
        playPictures()

    und das entfernen der entsprechenden Aufrufe löst das Problem sofort.

  • Vielen Dank für die informative Antwort.

    Habe es geschafft das das Script dauerhaft läuft mit der while Schleife.

    Momentan lerne ich mich in den subprocess ein. Das habe ich noch nicht hinbekommen. Nichts desto trotz, danke für die Hilfe, das Script läuft ja schonmal.

Jetzt mitmachen!

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