Hi,
Ich habe einen Radiowecker in Python entwickelt, der mich morgends mit dem Livestream von SWR3 weckt.
Als player verwende ich mplayer.
Um den mplayer zu starten/zu stoppen, nutze ich folgenden Code:
Code
#**********************
# start stream
#**********************
def Start(self):
if (self.proc==None or self.pid==None):
devnull = open(os.devnull, 'w')
self.proc = subprocess.Popen(self.mplayerArgs,stdout=devnull,stderr=devnull)
self.pid = self.proc.pid
else:
os.kill(self.proc.pid, 2) # 9 = SIGINT
self.pid=None
#**********************
# stop stream
#**********************
def Stopp(self):
if (self.pid!=None):
os.kill(self.proc.pid, 2) # 9 = SIGINT
self.pid=None
Alles anzeigen
Um ein Verschlafen zu vermeiden, wenn die Internetverbindung verloren geht oder der Stream hängt oder nicht zu Stande kommt, möchte ich irgendwie prüfen, ob mplayer auch wirklich etwas abspielt.
Falls nicht, würde ich ein lokales mp3 abspielen.
Ich habe bisher 3 Ideen, um das zu prüfen:
- Hardware-Lösung: Ich vergleiche das Audio-Signal mit einem Komparator mit einer fixen Spannungsschwelle. Toggelt der Ausgang, den ich einlesen kann, dann spielt mplayer offensichtlich etwas ab.
- Auslesen der Audio-Samples, die Linux über den Soundtreiber ausgibt und prüfen, ob die sich ändern, da reichen ja wenige pro Sekunde. Ich habe keine Ahnung, wie ich per Python da dran komme.
- Prüfen, ob mplayer etwas abspielt. Aber wie komme ich an die Ausgabe von mplayer ran. Über pipes bin ich bisher gescheitert. Vielleicht auch, weil ich nicht verstehe, wie die funktionieren.
Bei folgendem Code stoppt der mplayer nach einigen Sekunden die Wiedergabe. Außerdem wüsste ich nicht, wie ich an die Ausgabe selbst rankomme.
Hat jemand für die Ansätze 2 und 3 zusätzliche Tipps oder gibts vielleicht einen ganz anderen einfachen Weg?
Michael