Pipes mit Namen

Ich möchte eine Internet-Radiostation, die nur im RealAudio-Format sendet, mit icecast als MP3-Datenstrom in meinem lokalen Netz weiterverteilen, damit eine Roku SoundBridge die Musik auf meiner Stereoanlage ausgeben kann. Dazu lasse ich den mplayer das RealAudio-Original per Pipe als unkomprimiertes PCM an den MP3-Encoder lame weiterleiten, der es an die Serverkomponenten weitergeben soll. Das produziert jedoch nur Audio-Müll.

vorlesen Druckansicht
Lesezeit: 2 Min.
Von
  • Andreas Beier

Ich möchte eine Internet-Radiostation, die nur im RealAudio-Format sendet, mit icecast als MP3-Datenstrom in meinem lokalen Netz weiterverteilen, damit eine Roku SoundBridge die Musik auf meiner Stereoanlage ausgeben kann. Dazu lasse ich den mplayer das RealAudio-Original per Pipe als unkomprimiertes PCM an den MP3-Encoder lame weiterleiten, der es an die Serverkomponenten weitergeben soll. Das produziert jedoch nur Audio-Müll.

Offenbar funktioniert das Zusammenspiel zwischen mplayer und lame per Pipe nicht einwandfrei. Zu Testzwecken haben wir den icecast-Teil durch den MP3-Player mpg123 ersetzt. So produzierte

mplayer <i>server</i> -ao pcm | lame -q 2 -b 128 -- | ./mpg123 -

auch bei uns mehr Rauschen als Musik. Das Problem lässt sich durch den Einsatz so genannter Named Pipes umgehen. Sie tauchen im Dateisystem als normale Dateien auf. Man legt sie mit dem Befehl mkfifo an, beispielsweise mkfifo radio. Anschließend startet man mit

lame -q 2 -b 128 radio - | ./mpg123 -

den MP3-Encoder und den MP3-Player, der wieder als Platzhalter für weitere Verarbeitungsschritte herhält. Daten liest lame jetzt nicht von stdin, sondern aus der Named Pipe.

Erst im abschlieĂźend Schritt wird der mplayer mit

mplayer<i> server</i> -ao pcm:file=radio

angewiesen, die Daten in die Named Pipe zu schreiben. Beendet man den mplayer durch Drücken von ctrl-c, erkennt das lame/mpg123-Gespann dies und streicht ebenfalls die Segel. rm -f radio löscht die Named Pipe. (adb)