
Ich möchte einen Icecast-Stream über FFmpeg an UDP übertragen, aber wenn der Icecast-Stream gelöscht wird, wird auch FFmpeg gelöscht. Ich nehme an, wenn ich den Icecast-Stream an ein Alsa-Dummy-Gerät weiterleiten könnte, könnte ich über FFmpeg Daten von diesem abrufen. Beispiel:
ffmpeg -f alsa -i hw:Dummy,0 -f mpegts udp://ip:port
Falls der Icecast-Stream abbricht, wird der UDP-Ausgabestream still wiedergegeben und die Audiowiedergabe wird fortgesetzt, bis dieser Stream wieder verfügbar ist. (Das ist meine Annahme.)
Gibt es eine Möglichkeit, den Icecast-Stream an ein Alsa-Dummy-Gerät weiterzuleiten?Oder gibt es eine andere Variante, um den Icecast-Stream an UDP weiterzuleiten, damit er bei einem Ausfall des Icecast-Streams stumm abgespielt wird und dann automatisch zur normalen Wiedergabe zurückkehrt, wenn der Icecast-Stream wieder verfügbar ist?
Antwort1
Ich interpretiere Ihren Kommentar als „Pulseaudio dafür zu verwenden ist ok“. Ich habe das nicht getestet, aber ich würde Folgendes tun:
Erstellen Sie zunächst einen Pulseaudio „Null“-Senk:
pacmd load-module module-null-sink sink_name=icecast sink_properties=device.description=Icecast
In Pulseaudio ist jedem Senke eine .monitor
Quelle zugeordnet. Auf diese Weise können Sie Ton an den icecast
Senke ausgeben und mithilfe der icecast.monitor
Quelle in anderen Anwendungen verarbeiten.
Wenn ich Sie richtig verstehe, wollen Sieerhaltenden Icecast-Stream auf Ihrem Computer. Um den Stream an den icecast
Sink auszugeben, gehen Sie wie folgt vor:
mplayer http://your.icecast.server -ao pulse::icecast
Wenn der Icecast-Stream endet, mplayer
wird auch er beendet. Verpacken Sie ihn also in ein Shell-Skript, in eine Endlosschleife while
usw.
Ich bin mir nicht sicher, ob ich verstehe, was Sie mit dem Teil „Stream zu UDP über FFMPEG“ erreichen wollen. In jedem Fall können Sie jetzt icecast.monitor
mit
ffmpeg -f alsa -i pulse ...
während der Verwendung von pavucontrol
oder pamcd
zur Auswahl der richtigen Quelle, oder, wenn Ihr ffmpeg
mit Pulseaudio-Unterstützung kompiliert ist, direkt
ffmpeg -f pulse -i icecast.monitor ...
Wenn die Idee jedoch lautet: „Ich möchte diesen Icecast-Stream an andere Computer in meinem Heimnetzwerk verteilen“, ist es möglicherweise besser, einenPulseaudio RTP-Modulals Spüle in erster Linie.
Wie gesagt, nichts davon ist getestet, Sie müssen möglicherweise Teile anpassen, damit es funktioniert.
Bearbeiten
Ich bin mir auch nicht sicher, ob ein ALSA-Dummy-Gerät überhaupt funktionieren würde, meines Wissens sind sie wirklich nur „Dummy“-Geräte und bieten kein Loopback. snd-aloop
Dafür müssten Sie das Loopback-Gerät verwenden, und das ist ein bisschen nervig, weil Sie ständig auf Probleme mit der Abtastrate usw. stoßen.
Sie sind also wirklich besser dran, wenn Sie die Pulseaudio-Infrastruktur nutzen.
Antwort2
Sie können das Loopback-Gerät anstelle des Dummy-Geräts verwenden.
Das Loopback-Gerät ist standardmäßig nicht aktiviert, daher müssen Sie zuerst das Kernelmodul snd-aloop mit Argumenten laden, um den gewünschten Typ und die gewünschte Anzahl von Substreams anzugeben:
# modprobe snd-aloop index=0 pcm_substreams=1
Anstatt Icecast dann an weiterzuleiten hw:Dummy,0
, können Sie es an weiterleiten hw:Loopback,0,0
und den Stream in ffmpeg von dort lesen hw:Loopback,1,0
.