Weisen Sie mplayer an, weiterhin den Audio-Stream anzuhören, der angehalten wird

2

Ich verwende mplayer, um Audio von einer MPD-Instanz zu streamen, die für die Ausgabe über HTTP konfiguriert ist:

mplayer http://<stream-URL>:<port>

Der Stream wird von einem MPD-Client (Cantata) gesteuert. Der Stream wird angehalten, wenn die MPD das Ende der im Client definierten Wiedergabewarteschlange erreicht. In diesem Fall wird mplayer sofort beendet. Ich möchte, dass es weiterläuft und neue Inhalte abspielt, sobald sie verfügbar sind (dh sobald neue Elemente zur Abspielwarteschlange im Client hinzugefügt werden).

Ich habe versucht, mplayer mit dieser -idleOption auszuführen , und obwohl dies dazu führt, dass mplayer nach dem Stoppen des Streams weiterläuft, wird beim Starten der Wiedergabe von Inhalten im MPD-Client keine Audioausgabe erzeugt.

Wie kann ich mplayer veranlassen, wieder auf den Stream zu warten und zu spielen, was er vom Stream empfängt?

BEARBEITEN: MPD läuft auf einem Server in meinem LAN und Cantata und mplayer laufen auf meinem Laptop.

itsjeyd
quelle

Antworten:

2

Es ist sehr lange her, seit ich mit MPD-Skripten gespielt habe. Da Cantata eine dBus-Schnittstelle hat, sollte es nicht allzu schwierig sein, das zu tun, was Sie wollen. Es führt Sie jedoch in das Land der seltsamen dbus-Steuerungen.

Ein Teil der Antwort ist, dass -idle mplayer nicht dazu veranlasst, erneut eine Verbindung zu Ihrer Streaming-Quelle herzustellen. Es verhindert nur, dass mplayer beendet wird.

Das soll nicht heißen, dass das, was Sie suchen, nicht getan werden kann. Es ist wahrscheinlich, dass Sie ein wenig externes Scripting benötigen, um mplayer zum erneuten Herstellen der Verbindung zu veranlassen. Führen Sie in jedem Fall Folgendes aus, um die Fernsteuerung von mplayer zu aktivieren:

mkfifo /home/you/.mplayer/cmd.fifo
mplayer -idle -input file=/home/you/.mplayer/cmd.fifo

Danach können Sie mplayer jedes Mal, wenn Sie etwas Ähnliches wie das Folgende ausführen, veranlassen, die Verbindung wiederherzustellen.

echo "loadfile http://yourserver.com:8000/yourstream.mp3" >> /home/you/.mplayer/cmd.fifo

Dies ist ungefähr so ​​weit, wie ich es schaffen kann, ohne mit Cantatas dbus-Schnittstelle zu spielen. Ein bisschen Forschung sollte auftauchen, was gebraucht wird.

Hinweis: Wenn Sie den Befehl loadfile ausführen, während ein Stream abgespielt wird, wird die Audiowiedergabe spürbar unterbrochen.

Es kann auch wertvoll sein, hier zu erwähnen: Befinden sich MPD, mplayer und Cantata auf derselben Box oder auf getrennten Systemen?

Hoffe das hilft.

joat
quelle
Danke für die Antwort. Betreff: Ihre Frage, ob die drei Programme auf derselben Box laufen oder nicht: Sie laufen nicht. Ich habe meiner Frage weitere Informationen darüber hinzugefügt, was wo läuft.
itsjeyd
Ihre Vorschläge zur Aktivierung der Fernbedienung für mplayer funktionieren für mich, ich habe sie gerade ausprobiert, also nochmals vielen Dank. Die Sache ist jedoch, wenn ich jedes Mal, wenn ich wieder Musik in Cantata spiele, zu meinem Terminal zurückkehren muss, kann ich mplayer genauso gut neu starten. Ich würde wirklich gerne eine Lösung finden, mit der ich mplayer einmal starten und das Richtige tun kann, ohne mich einmischen zu müssen. Leider sind meine Erfahrungen mit D-Bus sehr begrenzt. Wenn es also wirklich keine Möglichkeit gibt, mplayer so zu nennen, dass es das tut, was ich will, wäre ich für zusätzliche Hinweise mit / r / t D-Bus dankbar.
itsjeyd
Haben Sie sich Liquidsoap angesehen? Es ist eine Skriptsprache zum Schreiben von Audiosteuerelementen und -diensten. Ich benutze es anstelle von mpd, um eine interne Jukebox zu betreiben. Wenn keine Auswahl getroffen wurde, wird ein zufälliges Lied abgespielt. In der Zwischenzeit, wenn Sie Cantata nicht über dbus überwachen möchten, besteht Ihre einzige andere Option darin, alle paar Sekunden den Status von mpd abzufragen (z. B. mpd.wikia.com/wiki/Hack:stream-monitor ). Die Unzulänglichkeiten hierfür sind: Es wird spürbar viel Rechenleistung verbraucht und die erste oder zweite Sekunde eines Songs wird möglicherweise übersehen (verursacht durch die Zeit zwischen den Abstimmungen).
Joat
2

Ich habe noch nichts über Kantaten gehört, aber wenn ich während der Fahrt im Auto mein mobiles Internetradio benutze, habe ich das gleiche Problem, um mplayer neu zu starten, wenn die Verbindung unterbrochen ist. ich stelle den mplayer-befehl einfach in einen endlesloop, der von einer variablen gesteuert wird, die zum einfachen ausschalten auf false gesetzt ist, und füge 3 sekunden pause nach abbruch hinzu, um etwas nicht zu überlasten.

runplayer=true
while $runplayer
do mplayer "http://yourserver.com:8000/yourstream.mp3" 
sleep 3
done   
0800peter
quelle
Ich habe einfach getan, "während wahr ist; mach Spieler ...; getan" - die variable Idee ist großartig.
Andrew Lorien