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:
play.py:
import subprocess,time,os
from subprocess import check_output
os.system('clear')
def check_pid(pid):
try:
os.kill(pid, 0)
except OSError:
return True
else:
return False
def get_pid(name):
return int(check_output(["pidof",name]))
def playPictures():
from config import pic_PlayRandom, pic_PlayDuration, pic_PlayListFile, pic_AutoZoom
if pic_PlayRandom is True:
random = "-u"
else:
random = ""
if pic_AutoZoom is True:
autozoom = "-a"
else:
autozoom = ""
fbi = "fbi -noverbose "+random+" "+autozoom+" -t "+pic_PlayDuration+" -1 -l "+pic_PlayListFile+" > /dev/null"
os.system(fbi)
playVideos()
def playVideos():
os.system('clear')
from config import vid_PlayListFile
omx = "python /home/pi/Scripts/playVideos.py "+vid_PlayListFile+" > /dev/null"
playList = vid_PlayListFile
with open(playList, "r") as ins:
for link in ins:
os.system("/usr/bin/omxplayer "+link.rstrip('\n'))
playPictures()
playPictures()
Alles anzeigen