Bedienoberfläche für Webradio
ulrich
2018-01-06 8d53d747bb33fde58d01907b1202f6bb1bc7f607
commit | author | age
623a61 1 # radio-ui
U 2
3 Eine Bedienoberfläche für Webradio
851c9c 4
70e1ff 5 ## Prototyp
U 6
ec55bf 7 Diese Anwendung ist zur Zeit im Bau. Der aktuelle Prototyp zum Stand des Codes in diesem Repository ist hier zu sehen: [Link zum Prototyp](/data/ulrich/test/radio-ui).
851c9c 8
ad1fef 9 ## Vorgesehene Funktionen
U 10
11 Das radio-ui zeigt eine Übersicht von Radiosendern. Antippen eines Senders in der Übersicht spielt den Sender ab.
12
13 Radiosender können hinzugefügt, geändert und gelöscht werden. Ein Suchfeld ermöglicht das Einschränken der Übersicht auf bestimmte Sender.
14
fe1cb2 15 Das Abspiel-Ziel ist konfigurierbar: Ein Radionsender kann entweder auf dem Gerät abgespielt werden, auf dem das radio-ui im Browser läuft oder auf einem anderen Gerät wie z.B. einem Raspberry Pi.
ad1fef 16
U 17 Zum Abspielen auf einem Raspberry Pi ist die Nutzung der Anwendung [pirc](/gitblit/docs/pirc.git) vorgesehen, die zum Spielen von Audiostreams den [omxplayer](https://elinux.org/Omxplayer) mit einer unter [Tomcat](https://de.wikipedia.org/wiki/Apache_Tomcat) laufenden Fernbedienung kombiniert, die per HTTP gesteuert werden kann.
18
8d53d7 19 ## Beispielcharakter
U 20
21 Neben dem praktischen Nutzen veranschaulicht das radio-ui verschiedene Aspekte des Baus von Webanwendungen:
22
23 + Vorlagen
24 + CRUD-Muster (Create, Read, Update, Delete)
25
26 Wie in der Anwendung radio-ui die obigen Themen umgesetzt sind, ist nachfolgend kurz betrachtet.
27
28 ### Nutzung von Vorlagen
851c9c 29
e8a097 30 Die Anwendung radio-ui ist ein Beispiel für die Nutzung von Vorlagen in Webanwendungen. Die Datei `index.html` definiert Bereiche einer HTML-Seite als `div`-Elemente, die während der Ausführung des Programmes dynamisch mit wechselnden Inhalten gefüllt werden.
U 31
6592dc 32 Inhalte werden dabei mit Hilfe von [Mustache](https://github.com/janl/mustache.js) aus einer Vorlage und einer Inhaltsbeschreibung in [JSON](https://de.wikipedia.org/wiki/JavaScript_Object_Notation) zu [HTML](https://de.wikipedia.org/wiki/Hypertext_Markup_Language) zusammengesetzt.
851c9c 33
8d53d7 34 ### CRUD-Muster
U 35
36 CRUD (Create, Read, Update, Delete) ist ein häufig vorkommendes Nutzungsmuster von Anwendungen, Daten werden erzeugt, gelesen, bearbeitet und gelöscht. Bei Webanwendungen zerfällt es in einen Teil, der auf dem Server ausgeführt wird und einen, der im Browser abläuft (Bedienoberfläche).
37
38 Allein bezogen auf den Umgang mit den Daten auf der Serverseite ist das CRUD-Muster schnell umgesetzt. Eine Datenstruktur wird erzeugt, gelesen, gespeichert und gelöscht. Eine Bedienoberfläche zur Ausführung dieser Operationen erfordert allerdings mehr als nur den Anstoß der jeweiligen Operation. Beim radio-ui wird beispielsweise mit den Daten der Radiosender auf diese Weise umgegangen. Die folgende Tabelle veranschaulicht die benötigten Funktionen.
39
40 | Operation        | Bedienoberfläche (radio-ui)           | Server  |
41 | ------------- |-------------| -----|
42 | Create      | Funktion zum Auslösen der Erstellung eines neuen Senders, Dialog zur Eingabe der Daten, Funktion zum Senden der neuen Daten  | Speichern eines neuen Senders |
43 | Read      | Funktion zum Abruf der Senderliste, Lesen der Senderliste, Darstellen der Liste      |   Ausgeben einer Liste von Sendern |
44 | Update | Funktion zum Auslösen der Änderung an einem Sender, Funktion zur Auswahl eines Senders aus einer Liste, Darstellen der Daten des gewählten Senders in einem Dialog zum Bearbeiten, Funktion zum Senden der Änderungen    |    Speichern von Änderungen an einem bestehenden Sender |
45 | Delete | Funktion zum Auslösen der Löschfunktion, Funktion zur Auswahl eines Senders oder mehrerer Sender aus einer Liste, Funktion zum Senden einer Liste zu löschender Sender, Funktion zur Absicherung gegenüber versehentlichem Löschen    |    Löschen eines Senders oder mehrerer Sender |
46
47 Die Tabelle läßt ahnen, dass der größere Aufwand zur Herstellung eines CRUD-Musters auf die Bedienoberfläche entfällt.
48
49 Mit seinen Menüfunktionen und der Art, wie mit Daten als Liste und als einzelnem Datensatz umgegangen wird, zeigt das radio-ui einen generischen Lösungsansatz, der sich für die Wiederverwendung in anderen Anwendungen eignet und dabei wenige Abhängigkeiten erfordert.
50
36646e 51 ## Abhängigkeiten
f927ec 52
36646e 53 Zur Verwendung des radio-ui sind die folgenden Komponenten erforderlich
f927ec 54
36646e 55 + [jQuery](http://jquery.com/)
U 56 + [Mustache](https://github.com/janl/mustache.js)
57 + [app-menu](/gitblit/docs/web!app-menu.git)
f927ec 58
36646e 59 Diese sind in der Datei `index.html` über die folgenden Einträge eingebunden.
f927ec 60
36646e 61 ````
U 62 <link rel="stylesheet" type="text/css" href="../jslib/app-menu/nav-toggle.css">
63 <link rel="stylesheet" type="text/css" href="../jslib/app-menu/app-menu.css">
64 <script src="../jslib/jquery-1.11.1/jquery-1.11.1.min.js"></script>
65 <script src="../jslib/mustache/mustache.min.js"></script>
66 <script src="../jslib/app-menu/app-menu.js"></script>
67 ````
851c9c 68
899220 69 Sollen einzelne Komponenten von einem anderen Ort wie beispielsweise einem Content Delivery Network (CDN) eingebunden werden, müssen nur die obigen Einträge entsprechend angepasst werden.
851c9c 70
fe1cb2 71 ## Kombination von pirc und radio-ui
U 72
73 Zur Verwendung des radio-ui mit pirc kann die Anwendung radio-ui direkt auf einen Raspberry Pi installiert werden, beispielsweise ähnlich wie pirc als Webanwendung für Tomcat. Stattdessen kann radio-ui auch von einer anderen Maschine aus die pirc-Instanz auf einen Raspberry Pi aufrufen.
74
75 Auch eine direkte Steuerung des omxplay aus radio-ui heraus ist denkbar. Das wäre allerdings eine Doppelung der meisten der in pirc bereits enthaltenen Funktionen. Zudem würde die engere Koppelung zwischen Pi und radio-ui die Verwendbarkeit des radio-ui einschränken.
76
77 ### Abspielen auf dem Raspberry Pi
78
79 Kommandos an pirc werden via HTTP an die betreffende Maschine gesendet und bestehen aus einem Klassennamen `c`, einem Methodennamen `m` und einem Parameter `p`. Ein Kommando setzt sich wie folgt zusammen
80
81 1. `http://raspi:8080/` - URL der Maschine
82 1. `pirc/` - Name des Kontext, unter dem die Anwendung pirc läuft
83 1. `sys/rpc` - Service-Endpunkt der pirc-API
84 1. `c=de.uhilger.pirc.App` - Name der Klasse von pirc, die die Abspielmethode enthält
85 1. `m=abspielen` - Name der Methode zum Abspielen
86 1. `p=Sender-URL` - der Parameter mit dem URL zum Audiostream des Webradiosenders
87
88 Zum Aufruf des Kommandos mit dem radio-ui kann es weitgehend unverändert bleiben. Nur der Teil 6. mit dem URL des Senders muss veränderlich gestaltet sein.
89
90 #### Beispiel Abspielen
91
92 Ist die Fernbedienung pirc auf einem Raspberry Pi installiert, lautet das Kommando zum Abspielen des Webradiosenders radiobob (vgl. Senderliste weiter unten) wie folgt
93
94 ````
95 http://raspi:8080/pirc/sys/rpc?c=de.uhilger.pirc.App&m=abspielen&p=http://bob.hoerradar.de/radiobob-live-mp3-hq
96 ````
97
98 Das obige Kommando geht davon aus, dass der betreffende Raspberry Pi unter dem Namen `raspi` auf Port `8080` über `HTTP` erreichbar ist und dass auf dem Pi die Anwendung pirc unter dem Kontextnamen `pirc` installiert wurde. Es bewirkt, dass auf dem betreffenden Raspberry Pi eine Instanz des omxplayer gestartet wird und diese fortlaufend den Webradio-Stream unter der angegebenen Adresse abspielt.
99
100 #### Beispiel Stoppen
101
102 Zum Stoppen des zur Zeit abgespielten Webradios dient das folgende Kommando
103
104 ````
105 http://raspi:8080/sys/rpc?c=de.uhilger.pirc.App&m=kommando&p=q
106 ````
107
108 Mit dem obigen Aufruf wird das Kommando `q` an den laufenden Prozess des omxplayer gesendet. Das bewirkt, dass der omxplayer das Abspielen stoppt und der laufende omxplayer-Prozess endet.
109
110
899220 111 ## Radiostreams
851c9c 112
899220 113 Nachfolgend die Adressen einiger Radiostreams
851c9c 114
899220 115 ### hr3
851c9c 116
899220 117 [Livestream-Übersicht](http://www.hr3.de/service/hr3-online-hoeren,webradio-100.html)
851c9c 118
899220 119 128 kbit http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3
851c9c 120
899220 121 48 kbit http://hr-hr3-live.cast.addradio.de/hr/hr3/live/mp3/48/stream.mp3
f927ec 122
899220 123 ### hr info
f927ec 124
899220 125 [Livestream-Übersicht](http://www.hr-inforadio.de/livestream/index.html)
f927ec 126
899220 127 128 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3
f927ec 128
899220 129 48 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/48/stream.mp3
36646e 130
899220 131 ### radiobob
36646e 132
899220 133 [Livestream-Übersicht](http://www.radiobob.de/radiobob/empfang/livestream)
36646e 134
899220 135 MP3: http://bob.hoerradar.de/radiobob-live-mp3-hq
36646e 136
899220 137 Mobile Nutzung: http://bob.hoerradar.de/aac-radiobob
36646e 138
899220 139 ### FFH
36646e 140
899220 141 [Livestream-Übersicht](https://www.ffh.de/musik/webradios/stream-adressen.html)
36646e 142
899220 143 128kbps http://mp3.ffh.de/radioffh/hqlivestream.mp3
36646e 144
899220 145 48kbps http://mp3.ffh.de/radioffh/livestream.aac