ketanest112
Goto Top

Webradio mit Webinterface mit Raspberry Pi

Hallöchen zusammen,

ich saß heute mal wieder in meiner Bastelwerkstatt und möchte euch mein Projekt nicht vorenthalten.
Gleichmal vorwer, meine Programmierkenntnisse, insbesondere in HTML und PHP sind nicht sonderlich überragend, daher seht mir das bitte nach.
Aber es geht um die Grundidee.

In der Arbeit kam uns die Idee, wir könnten doch mal ein Webradio auf nem RasPi installieren.
Gesagt, RasPi gekauft, überlegt.

Vorüberlegung:
Ein Benutzer namens "webradio", mithilfe dessen wir dann den Stream laufen lassen, um die Rechte zu beschränken und es nicht als Root laufen zu lassen.
Ein Ordner "streams", in dem die Dateien mit den Stream-Adressen liegen.
Drei Scripte webradio-start, webradio-stop und webradio-vol(ume).
Diese Scripte können dann mit sudoers von www-data angesprochen werden.
Webinterface: Eine Seite mit allen Infos und Knöpfen und drei Seiten (PHP-Scripts), die nix anderes machen als Stream wechseln, Lautstärke ändern oder Radio ausschalten

Folgende Pakete werden benötigt:
apache2, apache2-mod-php(5 oder 7), alsamixer/amixer (ich glaub die heißen alsa-utils, war aufm Pi schon drauf), mplayer, screen, sudo

Bei der Durchfühung traten dann Probleme beim Abspielen mit dem Benutzer "webradio" auf, auf welche gehe ich nich näher ein, daher hab ich mich dazu entschieden, den Stream einfach als Root abzuspielen. Rechtemäßig jetzt zwar nicht die optimale Variante, aber aufm Pi läuft sonst nix anderes, also wenn er gekapert wird (noch dazu im LAN), passiert nicht viel.
Daher liegen die Dateien noch im home von "webradio".

Durchführung:
Im Benutzerverzeichnis von "webradio" einen Ordner "streams" anlegen.
In diesem Ordner erstelle ich für jeden Stream eine Datei mit der Stream URL (kriegt man im Netz). Namen könnt ihr frei wählen, nur für später merken.
Wem sie gehören ist letztenendes egal, da die ausführenden Scripte eh als root laufen.
Dann noch eine Datei ge"touch"t namens live.stream (nennt sie wie ihr wollt, dort steht nacher der aktuell laufende Sender drin).

So nun gehts schon ans Scripten:
Alle Befehle habe ich als Root ausgeführt
Wie gesagt bedingt durch den Fehler mit dem Abspielen, liegen die Scripts nun auch woanders: /usr/local/bin.
Ich poste einfach mal den Quelltext, den Rest entnehmt ihr bitte der Dokumentation.

webradio-start.sh
#!/bin/bash
#Test ob Parameter fuer Stream uebergeben wurde
if [ -v $1 ] ; then
        echo "Usage: webradio-start.sh <stream-name>"  
        exit 1
fi

#Test ob es den Stream also die Datei auch gibt
if [ ! -e /home/webradio/streams/$1 ] ; then
        echo "Non-existent Stream!"  
        exit 2
fi

#Setzen der Variable STRURL, die die Internetadresse des Streams beinhaltet
STRURL=`cat /home/webradio/streams/$1`

#Starten des Streams im Screen
screen -dmS webradio-player mplayer $STRURL

#Schreiben des Stream-Namens in die Stream-Datei
echo $1 > /home/webradio/streams/live.stream

webradio-stop.sh
#!/bin/bash
#Stoppen des Streams durch killen des Screens
screen -X -S webradio-player kill

#Info, dass das Radio aus ist in die Stream-Datei
echo "<i>Radio ist derzeit aus</i>" > /home/webradio/streams/live.stream  

webradio-vol.sh
#!/bin/bash
#Pruefung, ob Parameter eingegeben wurden
if [ -v $1 ] ; then
        echo "Usage: webradio-vol.sh <Volume in %>"  
        exit 1
fi

#Lautstaerke setzen
amixer sset "PCM" $VOL%  

Wie man sie benutzt, sollte auch klar sein face-wink
Dann noch ein chmod 755 auf alle und fertig!

Nun zum Webinterface:
Ich hab hier keinen aufwändigen Login programmiert, es ist eine simple .htaccess und .htpasswd Kombination für den Zugriff.

Erstmal die Durchführenden Scripte:

change-sender.php:
<?php
#Neuen Sender in Variable einlesen
$sender = $_POST['sender'];  
#Aktuellen Stream stoppen
shell_exec("sudo /usr/local/bin/webradio-stop.sh");  
#Neuen Stream Starten
shell_exec("sudo /usr/local/bin/webradio-start.sh $sender");  
#Benutzerausgabe und Weiterleitung auf die index.php
echo "Neuer Sender '".$sender."' wurde eingestellt, du wirst wieder auf die Startseite weitergeleitet!";  
header("Refresh: 2; index.php");  
?>

change-volume.php
<?php
#Volume in Variable einlesen
$vol = $_POST['vol'];  
#Volume aendern
shell_exec("sudo /usr/local/bin/webradio-vol.sh $vol");  
#Benutzerausgabe und Weiterleitung auf die index.php
echo "Lautstärke wurde geändert, du wirst wieder auf die Startseite weitergeleitet!";  
header("Refresh: 2; index.php");  
?>

radio-off.php
<?php
#Radio ausschalten
shell_exec("sudo /usr/local/bin/webradio-stop.sh");  
#Benutzerausgabe und Weiterleitung auf die index.php
echo "Radio wurde ausgeschaltet, du wirst wieder auf die Startseite weitergeleitet!";  
header("Refresh: 2; index.php");  
?>

So nun zur index.php (das php braucht man nur an einer Stelle)

<!DOCTYPE html>
<html>
        <meta charset="utf-8">  
        <meta http-equiv="refresh" content="30">  
        <title>Steuerung Webradio</title>
<center>
<font size="6" face="Arial">  
Willkommen bei der Steuerung des Webradios!

<br>
<br>

<font size="5">  
Aktuell läuft der Stream: <font color=blue><?php echo shell_exec('cat /home/webradio/streams/live.stream'); ?></font>  
</font>

<br>
<br>

<font size="5">  
<b><u>Änderung des Radiosenders</u></b>
</font>
<br>
<font size="4">  
Zum Ändern des Senders einfach klicken!
<br>
Sollte das Radio aus sein, wird es automatisch gestartet!
<br>
<font color=red>
Bitte beachten: Es kann bis zu 20 Sekunden dauern, bis der Stream startet!
</font>
<br>
</font>
<form action="change-sender.php" method=post>  
<button name="sender" type=submit value="antenne-bayern">Antenne Bayern</button>  
<button name="sender" type=submit value="gong963">Gong 96.3</button>  
<button name="sender" type=submit value="bayern3">Bayern 3</button>  
<button name="sender" type=submit value="charivari">Charivari</button>  
</form>

<br>
<br>
<font size="5">  
<b><u>Änderung der Lautstärke</u></b>
</font>
<br>
<font size="4">  
Zum Ändern Lautstärke in % auswählen und auf ändern klicken!
</font>
<br>
<form action="change-vol.php" method=post>  
<select name="vol">  
        <option value=0>0 (Mute)</option>
        <option value=10>10 %</option>
        <option value=20>20 %</option>
        <option value=30>30 %</option>
        <option value=40>40 %</option>
        <option value=50>50 %</option>
        <option value=60>60 %</option>
        <option value=70>70 %</option>
        <option value=80>80 %</option>
        <option value=90>90 %</option>
        <option value=100>100 %</option>
</select>
<button type=submit>Ändern</button>
</form>

<br>
<br>

<font size="5">  
<b><u>Ausschalten des Radios</u></b>
</font>
<br>
<font size="4">  
<br>
Zum Ausschalten des Radios einfach auf 'Radio aus' klicken!  
</font>
<br>
<form action="radio-off.php" method=post>  
<button type=submit>Radio aus</button>
</form>

</font>
</center>

Die hab ich leider nicht dokumentiert aber ich erklärs kurz:

Am Anfang natürlich HTML DOCTYPE
Dann Charset auf UTF8 setzen
Fenstertitel festlegen
Schriftgröße auf 6 und Schriftart Arial festlegen
Dann ein Willkommen (Text könnt ihr natürlich anpassen)
Dann kommt der aktuelle Stream (deshalb php)
Dann die Möglichkeit zur Änderung des Radiosenders (die Buttons müssen natürlich so heißen wie die Dateien im /home/webradio/stream), hier beliebig erweitern
Lautstärke ändern ist denke ich auch klar
Genauso wie ausschalten

Wie gesagt, bin nicht der super Programmierer, muss nur funktionieren.

Abschließend noch die /etc/sudoers anpassen
Cmnd_Alias WEBRADIOCMD = /usr/local/bin/webradio-start.sh, /usr/local/bin/webradio-stop.sh, /usr/local/bin/webradio-vol.sh
www-data ALL=(root) NOPASSWD: WEBRADIOCMD

Joa im Großen und Ganzen wars das auch schon.

Grüße
Ketanest

Content-Key: 328898

Url: https://administrator.de/contentid/328898

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: -WeBu-
-WeBu- 13.02.2017 um 14:35:08 Uhr
Goto Top
Deine Idee kommt zur richtigen Zeit, denn Youmuze hat die Tage seinen Dienst eingestellt.

https://www.teltarif.de/yourmuze-internetradio-einstellung/news/67384.ht ...

"Frei wählbare Einstellung der Bandbreite war Alleinstellungsmerkmal

Webradio-Aggregator YourmuzeAus für Webradio-Aggregator Yourmuze Eine Besonderheit bei Yourmuze war, dass sich registrierte Nutzer bei jeder Radiostation ohne Vorgaben der Hörfunkanbieter die Datenrate und Bandbreite variabel wählen konnten. Das war vor allem interessant für die mobile Nutzung.
"

Diese og. Bandbreiten-Reduzierung des Out-Streams war genial. Die Frage wäre, ob man diese Konvertierung hinbekommen könnte?
Mitglied: ketanest112
ketanest112 01.03.2017 um 17:47:31 Uhr
Goto Top
Natürlich, man muss lediglich den entsprechenden Stream einbinden.
Von jedem (Web)Radioanbieter gibt es in der Regel eine Liste mit den Stream URLs, da sind dann auch die Bandbreiten berücksichtigt.
Mitglied: -WeBu-
-WeBu- 01.03.2017 um 18:11:28 Uhr
Goto Top
Zitat von @ketanest112:
Von jedem (Web)Radioanbieter gibt es in der Regel eine Liste mit den Stream URLs, da sind dann auch die Bandbreiten berücksichtigt.

Aber die meisten Radioanbieter, wie z. B. unser HR, sehen eben keine Notwendigkeiten, Streams mit geringerer Bandbreite von 24 KBit oder gar 16 KBit anzubieten, obwohl gerade bei info-Programmen, die meist nur Infos (Sprachbeiträge) anbieten, niedrige Bandbreiten ausreichend wären.

Das war ja das gute, dass Youmuze einfach alles kleinhackte! Er machte aus einem 128 KBit Stream ggf.. auch 16 KBit, wenn man das wollte!
Mitglied: ketanest112
ketanest112 01.03.2017 um 18:15:40 Uhr
Goto Top
Ah jetzt weiß ich was ihr meintet. Ja die Radios bieten idR 128, 384 und seltener 64 kbits an.
Das ließe sich sicher auch programmieren, allerdings wüsste ich hierfür keinen Ansatz.

Aber wozu überhaupt? Jede gute DSL Leitung hat doch heutzutage mindestens 16.000 kbits Down, das ist ja wohl ausreichend.
Mitglied: -WeBu-
-WeBu- 02.03.2017 um 00:18:49 Uhr
Goto Top
Zitat von @ketanest112: Aber wozu überhaupt? Jede gute DSL Leitung hat doch heutzutage mindestens 16.000 kbits Down, das ist ja wohl ausreichend.

Das stimmt, aber wenn ich mit dem Fahrrad im Wald unterwegs bin, stört mich das lange DSL-Kabel extrem. Auch in der Stadt latschen die Leut' drauf herum - alles doof! face-sad