Aus Raspberry Pi Geek 12/2021

Webradio auf Python-Basis (Seite 2)

Listing 1

Installation

$ sudo apt-get -y remove pulseaudio
$ git clone https://github.com/bablokb/pi-webradio.git
$ cd pi-webradio
$ sudo tools/install pi
$ sudo systemctl enable pi-webradio.service
$ sudo systemctl start pi-webradio.service

Die responsive Oberfläche optimierte der Autor für die Ansicht im Querformat. Auf gängigen Desktops, Smartphones und Tablets lässt sich das System trotzdem auch im Hochformat problemlos bedienen. Der eingebaute Webserver der Radiosoftware liefert übrigens genau eine Webseite ein einziges Mal an die Browser aus. Danach tauschen Server und Browser nur noch kleine Datenhäppchen aus, die Darstellung übernimmt vollständig der Webbrowser. Das sorgt dafür, dass der Server-Teil der Software auch auf Mini-Rechnern wie dem Pi Zero problemlos läuft. Ein paar Details zur technischen Implementation finden Sie im Kasten “Unter der Haube”.

Unter der Haube

Die Pi-Webradio-Software basiert auf Python 3 und verwendet das Kommandozeilentool Mpg123 zum Abspielen der Audiodaten. Das Programm stellt mit der Option -R einen Fernsteuerungsmodus bereit. Das lässt sich ganz einfach ausprobieren, indem Sie auf der Kommandozeile mpg123 -R aufrufen und danach ein h eingeben – das Programm zeigt dann alle Befehle an.

Als Webserver kommt Flask zum Einsatz, ein Mikro-Framework, das in vielen Python-Applikationsservern seinen Dienst verrichtet. Das Webradio verwendet nur wenige seiner Funktionen, denn der Webserver reicht API-Aufrufe wie radio_play_channel lediglich an die verantwortliche Python-Klasse durch. Je Aufgabenbereich gibt es davon eine, etwa Radio, Player oder Recorder. Hinzu kommen einige Hilfsklassen.

Die Weboberfläche verwendet CSS3 und Javascript, als Hilfsbibliothek dient jQuery. Große Klimmzüge, um alle möglichen Browser zu unterstützen, macht die Anwendung dabei nicht, aber die aktuellen Webbrowser bringen die notwendigen Voraussetzungen mit.

Konfiguration

Im Auslieferungszustand kennt das Tool bereits eine Reihe von deutschen Sendern, allerdings bekommen Sie beim Start aus urheberrechtlichen Gründen nicht die Senderlogos zu sehen (Abbildung 4). Den Sendern mag es vermutlich egal sein, aber windige Abmahnanwälte nutzen jede Möglichkeit, und denen möchten wir kein Futter liefern. Es erfordert also etwas Konfigurationsarbeit, damit das Webradio Ihren Musikgeschmack bedient und auch die Senderauswahl optisch ansprechend präsentiert.

Abbildung 4: Senderauswahl.

Abbildung 4: Senderauswahl.

Die Senderliste selbst finden Sie in der Datei /etc/pi-webradio.channels. Sie hinterlegt für jeden Sender den Namen, eine URL und ein Logo (ohne Pfad). Einen guten Ausgangspunkt für eigene Einträge bietet die Senderübersicht in der Audiothek der ARD [4].

Nach dem Anklicken des gewünschten Senders lassen sich zumindest die Logos per Rechtsklick herunterladen und speichern. Die Dateien im JPEG- oder PNG-Format gehören in das Verzeichnis /usr/local/lib/pi-webradio/web/images/; die Namen der Logo-Dateien müssen Sie dann in der Senderliste eintragen. Für Sender außerhalb der ARD dienen die oben erwähnten Portale als Ausgangspunkt.

Für die URL eines Senders benötigen Sie etwas mehr Detektivarbeit, denn diese veröffentlichen bisher nicht alle Sender, und die, die es tun, verstecken die Info möglichst gut auf ihren Webseiten. Der IT-Horizont mancher Sender geht offensichtlich nicht über die eigene Webpräsenz hinaus. Sollten Sie trotz intensiver Suche die URL nicht finden, hilft immer noch der Trick über die Entwicklerwerkzeuge der Browser. Zuerst navigieren Sie beim Sender auf die Seite, die das Live-Hören erlaubt. Den Abspiel-Button klicken Sie aber noch nicht an.

Zunächst starten Sie über das Menü oder über [F12] die Entwicklerwerkzeuge. Es öffnet sich ein weiteres Fenster, in dem Sie zum Reiter Netzwerkanalyse navigieren. Erst dann klicken Sie den Live-Abspielen-Button an. Die Seite mit der Netzwerkanalyse füllt sich jetzt mit allen URLs, die der Browser abruft (Abbildung 5).

Abbildung 5: Die Entwicklerwerkzeuge der Browser erlauben es, die URL zum Mediastream ausfindig zu machen.

Abbildung 5: Die Entwicklerwerkzeuge der Browser erlauben es, die URL zum Mediastream ausfindig zu machen.

Dort suchen Sie dann nach einer URL, die mp3, m3u, stream, icecast oder shoutcast enthält. Die Liste ist nicht erschöpfend, führt trotzdem aber fast immer zum Ziel. Die URL kopieren Sie und starten die Wiedergabe mit mpg123 URL. Da das Abspielprogramm Mpg123 keine Verschlüsselung beherrscht, haben Sie ein führendes https in der URL vorher durch http ersetzt. Bei Eingabe der korrekten URL sollten Sie den Sender jetzt hören. Mit [Q] brechen Sie die Wiedergabe ab.

Neben der /etc/pi-webradio.channels gibt es noch die Konfigurationsdatei /etc/pi-webradio.conf. Hier ändern Sie zum Beispiel bei Bedarf den Port für den Webserver (Vorgabe: 8026) oder legen fest, in welchem Verzeichnis Sie die Aufnahmen speichern möchten.

Bedienung

Nach der Konfiguration der Sender starten Sie den Dienst mit sudo systemctl restart pi-webradio.service neu. Anschließend navigieren Sie mit dem Browser zur Adresse http://<I>Host<I>:8026/. Läuft der Browser auf demselben System wie der Service, ersetzen Sie Host durch localhost, andernfalls tragen Sie die IP-Adresse oder den Namen des entsprechenden RasPi ein.

Die Bedienung des Webradios gestaltet sich weitgehend selbsterklärend. Auf der linken Seite finden sich einige Icons, mit denen Sie zwischen den Ansichten Uhrzeit (Abbildung 1), Player (Abbildung 3), Senderauswahl (Abbildung 4), Dateiauswahl und Werkzeuge wechseln. Auf der Seite Werkzeuge stoppen Sie die Anwendung, starten das System neu oder fahren es herunter. Die Dateiauswahl erlaubt das Abspielen von beliebigen MP3-Dateien.

Die Anwendung erstellt auch Spontanaufnahmen von Sendungen über den Aufnahme-Button (ganz rechts in der Schalterleiste unterhalb des Senderlogos). Die Aufnahme läuft dann so lange, wie Sie es in der /etc/pi-webradio.conf hinterlegen. Neben spontanen erlaubt das Webradio auch geplante Aufnahmen, sogar unabhängig vom Pi-Webradio-Service. Dazu installieren Sie das Paket at und planen die Aufnahme mit einem Einzeiler wie dem aus Listing 2.

Listing 2

# echo /usr/local/bin/pi-webradio.py -r 4 120 | at 20:00 31.10.2021
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben