Sagen Sie dem mplayer, dass er den Audiostream, der unterbrochen wird, weiter hören soll

2233
itsjeyd

Ich verwende mplayer zum Streamen von Audio von einer MPD-Instanz, 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 der mplayer sofort beendet. Ich möchte, dass das Programm weiterläuft und neue Inhalte wiedergegeben werden, sobald sie verfügbar sind (dh sobald neue Elemente zur Wiedergabeliste im Client hinzugefügt werden).

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

Wie kann ich mplayer dazu bringen, dass der Stream wieder aktiv wird und das wiedergibt, was er vom Stream empfängt?

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

0

2 Antworten auf die Frage

1
joat

Es ist schon sehr lange her, seit ich mit MPD-Scripting gespielt habe. Da Cantata über eine dBus-Schnittstelle verfügt, sollte ich nicht zu schwer tun, was Sie wollen. Es führt Sie jedoch in das Land der merkwürdigen dbus-Steuerungen.

Ein Teil der Antwort ist, dass -idle nicht dazu führt, dass mplayer versucht, sich erneut mit Ihrer Streaming-Quelle zu verbinden. Es verhindert nur, dass mplayer beendet wird.

Das heißt nicht, dass das, was Sie suchen, nicht getan werden kann. Es ist wahrscheinlich erforderlich, dass Sie ein wenig externes Scripting benötigen, um die Neuverbindung von mplayer auszulösen. Führen Sie auf jeden 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 jedes Mal, wenn Sie etwas Ähnliches wie das folgende ausführen, veranlassen, dass sich mplayer erneut verbindet.

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

Dies ist ungefähr so ​​weit, wie ich es ertragen kann, ohne mit der Dbus-Schnittstelle von Cantata zu spielen. Ein bisschen Forschung sollte zeigen, was nötig ist.

Hinweis: Wenn Sie den Befehl loadfile ausführen, während ein Stream abgespielt wird, führt dies zu einer merklichen Unterbrechung des Audios.

Es kann auch wert sein, hier zu beachten: Sind MPD, mplayer und Cantata alle auf derselben Box oder auf separaten Systemen?

Hoffe das hilft.

Danke für die Antwort. Re: Deine Frage, ob die drei Programme auf derselben Box laufen oder nicht: Sie sind es nicht. Ich fügte meiner Frage einige Informationen hinzu, was wo läuft. itsjeyd vor 10 Jahren 0
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 in Cantata wieder Musik spiele, zu meinem Terminal zurückkehren muss, könnte ich mplayer genauso gut neu starten. Ich würde wirklich gerne eine Lösung finden, die es mir ermöglicht, mplayer einmal zu starten und das Richtige tun zu lassen, ohne dabei zu stören. Leider ist meine Erfahrung mit D-Bus sehr begrenzt. Wenn es also wirklich nicht möglich ist, mplayer so zu rufen, dass es das tut, was ich will, würde ich mich über zusätzliche Hinweise mit dem D-Bus freuen. itsjeyd vor 10 Jahren 0
Haben Sie sich Liquidsoap angesehen? Es ist eine Skriptsprache zum Schreiben von Audiosteuerelementen und -diensten. Ich benutze es anstelle von mpd, um zu laufen, was einer hauseigenen Jukebox entspricht. Wenn keine Auswahl getroffen wurde, wird ein zufälliger Titel abgespielt. In der Zwischenzeit, wenn Sie Cantata nicht über dbus überwachen möchten, ist Ihre einzige andere Option die Abfrage des Status von mpd alle paar Sekunden (z. B. http://mpd.wikia.com/wiki/Hack:stream-monitor). . Die Nachteile, die dabei auftreten können, sind: Sie verbrauchen eine spürbare Rechenleistung und die erste oder zwei Sekunden eines Songs werden möglicherweise übersehen (verursacht durch die Zeit zwischen Abfragen). joat vor 10 Jahren 0
0
0800peter

Ich habe nichts über Kantate gehört, aber wenn ich mein mobiles Internetradio während des Autofahrens benutze, bin ich im selben Problem gelaufen, um mplayer neu zu starten, wenn die Verbindung unterbrochen wird. Ich füge einfach den Befehl mplayer in einen Endlesloop ein, der durch eine Variable gesteuert wird, die zum einfachen Ausschalten auf false gesetzt ist, und fügt nach dem Abbruch eine Pause von 3 Sekunden hinzu, um nicht etwas zu überladen.

runplayer=true while $runplayer do mplayer "http://yourserver.com:8000/yourstream.mp3"  sleep 3 done