AA_radio_mmagellan_sxc_376025.jpg

© Mmagellan, sxc.hu

Westentaschen-Radio

Mit Ffplay Streams aus dem Web abspielen

19.12.2013
Mit wenigen Zeilen Shell-Code bauen Sie einen flexiblen, leicht anpassbaren Stream-Player zusammen.

Sie brauchen keine ressourcenfressende Multimedia-Anwendung zu starten, um mal eben ein bisschen Internetradio zu hören: Es gibt unter Linux einige Programme für die Kommandozeile, die Streams von Radiosendern abspielen. Ein einfaches Shell-Skript als Wrapper genügt vollkommen, um Internet-Radiosender komfortabel zu verwalten oder Streams abzuspeichern und bei Bedarf erneut abzuspielen.

Den Kern des Skripts bildet ein Modul aus der Ffmpeg-Suite (http://www.ffmpeg.org), zu der neben Ffmpeg, Ffprobe und Ffserver auch Ffplay gehört. Letzteres ermöglicht es, einen Sender im Netz komfortabel von der Kommandozeile aus zu genießen. Das folgende Kommando reicht schon aus, um den Radiosender "Rock Antenne" zu abzuspielen:

$ ffplay http://mp3.webradio.rockantenne.de:80

Mit etwas Geschick basteln Sie um dieses Programm herum einen eigenen, schlanken Radioempfänger.

URLs sammeln

Bei der Suche nach einer guten Adresse im Internet, die so ziemlich alle Radiosender vorhält, landen Sie wahrscheinlich früher oder später bei Liveradio (http://www.liveradio.de). Dort finden Sie Hunderte von Radiosendern, in verschiedene Sparten von Rock bis Klassik untergliedert.

Wie oben schon gezeigt, reicht es aus, dem Programm Ffplay eine URL als Parameter zu übergeben, unter der es den Stream eines Radiosenders abruft. Um an diese URLs zu kommen, müssen Sie die PLS-Dateien, die eigentlich für den externen Player gedacht sind, mit einem Editor öffnen. Listing 1 zeigt den Aufbau einer solchen Datei.

Listing 1

[playlist]
Title1=Jazzloft
File1=http://stream.laut.fm:80/jazzloft
Length1=-1
NumberOfEntries=1
Version=2

Der Inhalt der eckigen Klammern in der ersten Zeile einer solchen Datei verdeutlicht schon deren Zweck: Es handelt sich im Prinzip um eine Playlist. Der Title1 gibt den Namen für die Anzeige des Radiosenders vor, hinter File1 finden Sie die URL zum Stream. Da es sich bei solchen Streams um einen kontinuierlichen Strom handelt, erfolgt unter Length1 die Angabe -1, damit der Player den Stream fortlaufend abspielt. Die anderen Einträge fallen weitgehend selbsterklärend aus. Manchmal kommt es vor, dass die PLS-Datei zwei Streams angibt, von denen Sie einen auswählen können.

Selbst gemacht

Für ein kleines Webradio brauchen Sie nun ein Skript, das diese URLs mit einem Namen verbindet, der sich für eine Auswahl eignet. Das geschieht über ein assoziatives Array in der Bash. Sie legen es mit der Anweisung declare an, wobei Sie in diesem Fall die Option -A verwenden.

Die gesammelten URLs landen nun in diesem Array. In Listing 2 belegen diese die Zeilen 3 bis 7, wobei jeweils der Anzeigename als Schlüssel dient. Damit liegen alle Angaben an einer Stelle, und Sie brauchen später den eigentlichen Code des Skripts nicht mehr zu ändern, wenn neue Sender hinzukommen.

In der Zeile 9 bewirkt ein einfaches clear das Löschen des Terminals, bevor Sie in der Zeile 10 mit einem Echo-Befehl die Ausgabe des Programms beginnen. In Zeile 12 startet eine Select-Anweisung, die mithilfe der Schlüssel des oben definierten Arrays ein Menü gestaltet.

Dabei gibt es mehrere Dinge zu beachten. Das Ausrufezeichen vor dem Namen der Array-Variablen sorgt dafür, dass die Shell die Schlüssel ausgibt. Mit dem Subskript @ erhalten Sie diese jeweils mit Anführungszeichen umschlossen. Damit interpretiert die Select-Anweisung die Leerzeichen in den Namen korrekt.

Listing 2

#!/bin/bash
declare -A SENDER
SENDER["Hellweg Radio"]="http://87.118.64.215:8000/"
SENDER["Rock Antenne"]="http://mp3.webradio.rockantenne.de:80"
SENDER["Bayern 3"]="http://gffstream.ic.llnwd.net/stream/gffstream_w12b"
SENDER["Radio Berlin"]="http://rbb.ic.llnwd.net/stream/rbb_radioberlin_mp3_m_b"
SENDER["Musicalradio"]="http://mp3.musicalradio.de/musicalradio.mp3"
clear
echo "Radiosender auswählen:"
select ENTRY in "${!SENDER[@]}"; do
  TITLE="${ENTRY}"
  URL=${SENDER[${ENTRY}]}
  ffplay -x 300 -y 100 -window_title "${TITLE}" ${URL} &>/dev/null
done

Auf die Do-Anweisung folgt der Teil, in dem die beiden Variablen URL und TITLE die richtigen Werte durch Zuweisung erhalten. Anschließend spielt Ffplay den Sender ab, die zusätzlichen Optionen regeln Breite, Höhe und Titel des Ausgabefensters. Der Befehl &>/dev/null am Ende bewirkt, dass die Meldungen des Programms nicht im Terminal erscheinen.

Bei manchen Sendern dauert es einige Sekunden, bis Ffplay den Stream erfasst. Dann erst erscheint das Ausgabefenster, und die Software spielt den Sender ab. Falls Ihnen das Radioprogramm nicht gefällt, schließen Sie einfach den Sender und wählen anschließend im Menü einen anderen aus. Sie beenden das Shell-Skript mit der Tastenkombination [Strg]+[C].

Abbildung 1: Dank des individuellen Fenstertitels erkennen Sie leicht, welchen Sender Ffplay gerade abspielt.

Wollen Sie die Liste mit weiteren Sendern ausweiten, erweitern Sie das assoziative Array am Anfang des Skripts einfach um die entsprechenden Einträge. Achten Sie aber darauf, dass Sie keine gleichnamigen Schlüssel verwenden: In diesem Fall weist die Shell dem Eintrag den neueren Wert zu.

Möchten Sie das Skript systemweit installieren, böte es sich an, die Liste der Sender in einer separaten Datei zu verwalten. Das würde es ermöglichen, dass jeder Benutzer seine eigene Liste mit Sendern pflegt. Im Prinzip wäre dazu nur notwendig, die Zeilen*3 bis 7 auszulagern und im Skript durch ein source Dateiname zu ersetzen.

Mitschneiden

Wer ein bisschen weitergehen möchte, dem kommt über kurz oder lang der Gedanke, dass es eine feine Sache wäre, einen Radiosender nicht nur zu hören, sondern auch aufzunehmen. Da die Streams bereits MP3-Daten beinhalten, täuschen Sie mit Ffmpeg das Konvertieren ins MP3-Format vor. Listing 3 verdeutlicht das.

Listing 3

$ ffmpeg -i http://87.118.64.215:8000/ -acodec copy $(date +"%Y-%m-%d_%H%M%S").mp3

Damit kopiert das Programm die eigentlichen Nutzdaten (Option -acodec copy). Während dieser Aktion fügt es der Datei einen echten Header hinzu, was die Datei nun zu einer vollwertigen MP3-Datei macht. Nun können Sie die Datei auf andere Geräte kopieren, wie etwa ein Smartphone, und kommen so unterwegs in den Genuss der Mitschnitte.

Um das Ganze noch komfortabler zu gestalten, stecken Sie diese Zeile in ein Skript oder erstellen ein Tastaturkürzel beziehungsweise einen Starterknopf für die Befehlsleiste oder das Menü und schneiden so auf Knopfdruck mit.

Achten Sie allerdings darauf, dass Sie beim Anlegen der Schaltfläche oder des Tastaturkürzels die Option Im Terminal ausführen ankreuzen, da Sie sonst keine Möglichkeit hätten, die Aufnahme mit [Strg]+[C] zu stoppen. Diese liefe dann im Hintergrund munter weiter, bis Sie den Computer schließlich herunterfahren oder mit einem Kill-Befehl eingreifen.

Fazit

Das Skript aus Listing 2 ließe sich leicht auf vielfältige Weise erweitern. Eine Möglichkeit läge im bereits erwähnten Auslagern der Senderliste, was es erlaubte, individuelle Listen mit Sendern zu pflegen. Alternativ böte es sich an, die mitgeschnittenen Audio-Dateien in einer zweiten Auswahl anzubieten.

Von der Idee zum kleinen Multimedia-Tool ist es unter Linux oft kein weiter Weg. Die Vielzahl der Kommandozeilenwerkzeuge, die über die entsprechenden Funktionen verfügen, machen es leicht, diese in einem entsprechenden Skript zu verzahnen. Das kleine Programm passen Sie dann nach eigenen Erfordernissen an und eröffnen sich so Möglichkeiten, die Ihnen klassische Multimedia-Player nicht unbedingt bieten. 

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare