Search:
Menu Raspi / RasPiRadio
Information

RasPiRadio - Entwicklung eines Internet Radios

Beschreibung des Projektes

Ziel dieses Projektes war es, ein möglichst einfach zu bedienendes Internetradios mit Hilfe des Raspberry Pi zu entwickeln.
Zunächst stellte sich die Frage, wie die Bedienung und die Anzeige erfolgen soll.
Schnell war klar, das es am sinnvollsten ist, eine Android-APP hierfür zu verwenden.
Als Hardware benötigen wir also nur den Raspi + SD-Karte + Netzteil + PC-Lautsprecher (Verstärker Lautsprecher).

Die Software auf dem Raspberry Pi wird aus fertigen Komponennten zusammengestellt und konfiguriert.
Es ist also keine selbst programmierte Software auf dem Raspi erforderlich.
Als Betriebssystem installieren wir das Raspbian Wheezy, also das Standard Image des Raspi.
Die Audio-Player Software ist der Music Player Daemon (MPD), da dieser sich sehr einfach über Ethernet fernsteuern lässt.
Als Android-APP für die Fernsteuerung habe ich eine eigene Anwendung programmiert, die ich hier kostenlos zur Verfügung stelle.
Es wurde keine der zahlreichen Client-APPs aus dem Play Store verwendet, da diese APPs meistens nicht auf diesen besonderen Anwendungsfall (Internetradio) zugeschnitten sind. Die Bedienung wird ansonsten zu umständlich.
Über ein kleines Shellscript kann der Raspi über die Android-APP herunter gefahren werden.

Einrichtung auf dem Raspberry Pi

Zunächst müssen wir alle erforderlichen Pakete installieren.
Da diese in den Repositories enthalten sind geschieht es ganz einfach mit:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mpd mpc alsa-utils netcat
sudo reboot


Nach der Installation gilt es ALSA zu konfigurieren. Das funktioniert mit den drei folgenden Befehlen:

sudo modprobe snd_bcm2835
sudo amixer cset numid=3 1
sudo alsactl store

Nun legen wir ein Verzeichnis an, in dem wir Shell-Scripte ablegen können:
sudo mkdir /var/scripte


Danach legen wir ein Start-Script an. So wie es früher unter DOS bei der autoexec.bat war:

sudo nano /var/scripte/autostart.sh


Diese Datei bekommt folgenden Inhalt:

#!/bin/bash
#
# Autostart
#
# Über den Port 61000 ist ein Shutdown möglich. 
#
netcat -l -p 61000 | /var/scripte/remoteshutdown.sh &

Speichern mit 'STRG-X, y, ENTER'

Ein zweites Script welches von dem autostart.sh Script aufgerufen wird, ermöglicht ein Shutdown des Raspberry Pi über die APP.
Dieses legen wir nun an:

sudo nano /var/scripte/remoteshutdown.sh


Der Inhalt ist:

#!/bin/bash
while read -r
do
        str0="$REPLY"
        if [[ "$str0" == "shutdown" ]]
        then
                echo "Shutting down..."
                sudo poweroff
        else
                echo "unknown Command: $str0"
        fi
done
# Script Ende

Speichern mit 'STRG-X, y, ENTER'

Damit beide Dateien später auch ausgeführt werden können, müssen sie ausführbar sein und beim Start aufgerufen werden.
Das lässt sich in der rc.local machen.

sudo chmod 755 /var/scripte/autostart.sh
sudo chmod 755 /var/scripte/remoteshutdown.sh
sudo nano /etc/rc.local


Dort in der freien Zeile über exit 0 fügen wir den Aufruf ein:

/var/scripte/autostart.sh

Speichern mit 'STRG-X, y, ENTER'

Um zu testen, ob es bis hierhin läuft:

sudo reboot


Jetzt kommen wir zu der Einrichtung vom MPD.
Die Konfiguration liegt in:

sudo nano /etc/mpd.conf


Die Erreichbarkeit über das Netzwerk ist durch auskommentieren folgender Zeile zu erreichen:

#bind_to_address                "localhost"

Den Remote Port legen wir auf 6600 fest:

port                            "6600"

Das Audiodevice ist mit folgenden Zeilen einzurichten:

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
#       format          "44100:16:2"    # optional
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
}

Die beiden Arbeitsverzeichnisse für Playlisten und Musikdateien können natürlich nach eigenen Wünschen angepasst werden:

music_directory                 "/var/lib/mpd/music"
playlist_directory              "/var/lib/mpd/playlists"

Diese Parameter bewirken, das der MPD nach einem Neustart, den zuvor gespielten Playlisteneintrag fortsetzt:

db_file                 "/var/lib/mpd/tag_cache"
log_file                "/var/log/mpd/mpd.log"
pid_file                "/var/run/mpd/pid"
state_file              "/var/lib/mpd/state"

Hier noch mal alle aktiven und wichtigen Parameter in der mpd.conf:

music_directory         "/var/lib/mpd/music"
playlist_directory      "/var/lib/mpd/playlists"
db_file                 "/var/lib/mpd/tag_cache"
log_file                "/var/log/mpd/mpd.log"
pid_file                "/var/run/mpd/pid"
state_file              "/var/lib/mpd/state"
sticker_file            "/var/lib/mpd/sticker.sql"
user                    "mpd"
port                    "6600"
input {
        plugin 		"curl"
}
audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"
}
filesystem_charset      "UTF-8"
id3v1_encoding          "UTF-8"


Nach jeder Änderung der mpd.conf muss der Deamon neu gestartet werden:

sudo /etc/init.d/mpd restart


In das 'playlists' Verzeichnis erstellen wir uns nun unsere eigene Radio Liste:

sudo nano /var/lib/mpd/playlists/radiosender.m3u


Diese Datei könnte dann z.B. folgendermaßen aussehen:

http://ndr-ndr1niedersachsen-hannover.cast.addradio.de/ndr/ndr1niedersachsen/hannover/mp3/128/stream.mp3
http://ndr-ndr2-niedersachsen.cast.addradio.de/ndr/ndr2/niedersachsen/mp3/128/stream.mp3
http://ndr-ndr903-hamburg.cast.addradio.de/ndr/ndr903/hamburg/mp3/128/stream.mp3
http://ndr-ndrkultur-live.cast.addradio.de/ndr/ndrkultur/live/mp3/128/stream.mp3
http://ndr-ndrinfo-niedersachsen.cast.addradio.de/ndr/ndrinfo/niedersachsen/mp3/128/stream.mp3
http://ndr-ndrinfospezial-live.cast.addradio.de/ndr/ndrinfospezial/live/mp3/128/stream.mp3
http://ndr-njoy-live.cast.addradio.de/ndr/njoy/live/mp3/128/stream.mp3
http://ndr-ndrblue-live.cast.addradio.de/ndr/ndrblue/live/mp3/128/stream.mp3
http://ndr-ndrplus-live.cast.addradio.de/ndr/ndrplus/live/mp3/128/stream.mp3
http://player.ffn.de/ffn.mp3
http://antenne-nds.hoerradar.de/mp3-128_antenne-nds?sABC=54rnrr3r%230%23op1o04oo3n29751r435ssq9466565184%23yvfgrayvir&amsparams=playerid:listenlive;skey:1424682558

Die M3U-Playlist sollte hierbei die direkten Links und nicht untergeordnete M3U Dateien enthalten.

Jetzt können wir das ganze lokal testen.
Hierzu verwenden wir den Music Player Client (mpc):

mpc load radiosender
mpc play 1
mpc stop

Screenshot der Android-APP RaspiPiRadio


RasPiRadio Screenshot

Die Android-APP RasPiRadio zum Download

RasPiRadio im Google Play Store

Beim ersten Aufruf der APP wird standartmäßig die 'radiosender.m3u' Playlist geladen und alle Einträge in der Liste angezeigt.
In dieser Liste sind die Sendernamen noch nicht richtig eingetragen, sondern nur die Link Adressen.
Beim Anklicken der Listeneinträge wird auf diesen Sender umgeschaltet und aus den Meta-Daten der richtige Sendername ermittelt.
Die APP merkt sich die Sendernamen in seiner eigenen Konfiguration (Datenbank).
Beim nächsten Aufruf der RasPiRadio-APP sind die Sendernamen sofort vorhanden.
Dieses Verhalten kann z.Z. keine andere MPD-Client-APP zur Verfügung stellen, so das es nur mit RasPiRadio kein Blindflug wird.

Über eine Spende für die Weiterentwicklung dieser Software würde ich mich freuen.