From 08bce7465c912525729d3e82a3b304ff3fc35fd6 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Sat, 27 Jan 2018 08:39:19 +0000 Subject: [PATCH] Funktion Abspieler bearbeiten ergaenzt; Doku weiter strukturiert --- pirc.md | 36 +++++++ app.js | 1 radiostreams.md | 57 +++++++++++ data/tpl/dlg-abspieler-edit-form.tpl | 4 app.css | 2 beispiel.md | 38 +++++++ README.md | 135 -------------------------- 7 files changed, 139 insertions(+), 134 deletions(-) diff --git a/README.md b/README.md index b4b04e2..d3c382c 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,6 @@ 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. -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. - ## Beispielcharakter Neben dem praktischen Nutzen veranschaulicht das radio-ui verschiedene Aspekte des Baus von Webanwendungen: @@ -25,42 +23,7 @@ + app-menu + CRUD-Muster (Create, Read, Update, Delete) -Wie in der Anwendung radio-ui die obigen Themen umgesetzt sind, ist nachfolgend kurz betrachtet. - -### app-layout - -Das radio-ui verwendet das [app-layout](/gitblit/docs/web!app-layout.git), das mit Hilfe von HTML und CSS die Grundlage einer für Webanwendungen geeigneten Bedienoberfläche schafft. - -### Nutzung von Vorlagen - -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. - -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. - -Durch die Nutzung von Vorlagen lassen sich dynamische und statische Inhalte sowie deren Gestaltung und Struktur optimal und frei von Redundanzen zusammenführen. - -### app-menu - -Das [app-menu](/gitblit/docs/web!app-menu.git) setzt auf die Nutzung von Vorlagen auf und fügt dem radio-ui ein Menü zur Bedienung der Anwendung hinzu. Es ist zudem eingebettet in die Funktion des app-layout. Das radio-ui zeigt so den Einsatz des app-menu und mithin das Zusammenspiel von Vorlagen, app-layout und Menü am praktischen Beispiel. - -### CRUD-Muster - -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). - -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. - -| Operation | Bedienoberfläche (radio-ui) | Server | -| ------------- |-------------| -----| -| 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 | -| Read | Funktion zum Abruf der Senderliste, Lesen der Senderliste, Darstellen der Liste als Kacheln | Ausgeben einer Liste von Sendern | -| 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 | -| 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 | - -Die Tabelle läßt ahnen, dass der größere Aufwand zur Herstellung eines CRUD-Musters auf die Bedienoberfläche entfällt. - -Mit seinen Menüfunktionen und der Art, wie mit Daten als Liste und als einzelnem Datensatz umgegangen wird sowie der Kombination dieser Funktionen mit der Verwendung von Vorlagen zeigt das radio-ui einen generischen Lösungsansatz, der sich für die Wiederverwendung in anderen Anwendungen eignet und dabei wenige Abhängigkeiten erfordert. +Wie in der Anwendung radio-ui die obigen Themen umgesetzt sind, ist auf der [Beispielseite](beispiel.md) näher betrachtet. ## Abhängigkeiten @@ -81,101 +44,11 @@ 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. -## Kombination von pirc und radio-ui +## Zusammenspiel mit dem Raspberry Pi -Zur Verwendung des radio-ui mit [pirc](/gitblit/docs/pirc.git) 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. +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. -### Abspielen auf dem Raspberry Pi - -Kommandos an [pirc](/gitblit/docs/pirc.git) 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 - -1. `http://raspi:8080/` - URL der Maschine -1. `pirc/` - Name des Kontext, unter dem die Anwendung pirc läuft -1. `sys/rpc` - Service-Endpunkt der pirc-API -1. `c=de.uhilger.pirc.App` - Name der Klasse von pirc, die die Abspielmethode enthält -1. `m=abspielen` - Name der Methode zum Abspielen -1. `p=Sender-URL` - der Parameter mit dem URL zum Audiostream des Webradiosenders - -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. - -#### Beispiel Abspielen - -Ist die Fernbedienung pirc auf einem Raspberry Pi installiert, lautet das Kommando zum Abspielen des Webradiosenders radiobob (vgl. Senderliste weiter unten) wie folgt - -```` -http://raspi:8080/pirc/sys/rpc?c=de.uhilger.pirc.App&m=abspielen&p=http://bob.hoerradar.de/radiobob-live-mp3-hq&p= -```` - -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. - -#### Beispiel Stoppen - -Zum Stoppen des zur Zeit abgespielten Webradios dient das folgende Kommando - -```` -http://raspi:8080/sys/rpc?c=de.uhilger.pirc.App&m=kommando&p=q -```` - -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. - - -## Radiostreams - -Nachfolgend die Adressen einiger Radiostreams - -### hr3 - -[Livestream-Übersicht](http://www.hr3.de/service/hr3-online-hoeren,webradio-100.html) - -128 kbit http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3 - -48 kbit http://hr-hr3-live.cast.addradio.de/hr/hr3/live/mp3/48/stream.mp3 - -### hr info - -[Livestream-Übersicht](http://www.hr-inforadio.de/livestream/index.html) - -128 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3 - -48 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/48/stream.mp3 - -### radiobob - -[Livestream-Übersicht](http://www.radiobob.de/radiobob/empfang/livestream) - -MP3: http://bob.hoerradar.de/radiobob-live-mp3-hq - -Mobile Nutzung: http://bob.hoerradar.de/aac-radiobob - -#### Test der Bandbreite - -Spielt man den URL 'hq' von Radiobob im Browser zeigt der Netzwerkmonitor von Linux eine Netznutzung von 24-32 kbit/s. Das ergibt die folgende Betrachtung: - -+ 32 kBit/s -+ 115.20.000 Bit/Std (kBit x 3600 x 1000) -+ 13,74 MB pro Stunde (Bit : 8 : 1.024 : 1.024) - -### FFH - -[Livestream-Übersicht](https://www.ffh.de/musik/webradios/stream-adressen.html) - -128kbps http://mp3.ffh.de/radioffh/hqlivestream.mp3 - -48kbps http://mp3.ffh.de/radioffh/livestream.aac - -## Noch zu erledigen - -### Templates für Mustache dynamisch laden - -Spart Ladezeit zu Beginn. Lösungsansatz: Eine Funktion, die als Parameter das Element erhält, dessen html mit dem gerenderten Template ersetzt werden soll und den zu rendernden Inhalt. Die dynamische Ladefunktion - -1. prüft, ob das Template schon im cache ist -1. Lädt das Template, wenn nicht -1. wartet, bis das Template geladen ist -1. rendert das Template mit dem übergebenen Inhalt -1. schreibt das Ergebnis ins html des übergebenen Elements - -Der letzte Teil des Ablaufs muss asynchron gefasst sein, damit auf das Laden gewartet werden kann. +Auf der Seite [Kombination von pirc und radio-ui](pirc.md) ist beschrieben, wie pirc aus dem radio-ui heraus genutzt werden kann. ## Schnittstellenbeschreibung diff --git a/app.css b/app.css index bfceca5..d4e2b3e 100644 --- a/app.css +++ b/app.css @@ -290,7 +290,7 @@ padding-right: 0.2em; } -.abspieler-auswahl { +.abspieler-auswahl, .abspieler-form-auswahl { width: 70%; margin-left: 0.4em; } diff --git a/app.js b/app.js index 6839ef2..fbf0b54 100644 --- a/app.js +++ b/app.js @@ -79,6 +79,7 @@ $(".hamburger").toggleClass("is-active"); // hamburger-icon umschalten app_menu_toggle(); // menue oeffnen/schliessen } + /* Abspieler und abspielen */ function app_get_abspiel_ziel() { diff --git a/beispiel.md b/beispiel.md new file mode 100644 index 0000000..bfb3770 --- /dev/null +++ b/beispiel.md @@ -0,0 +1,38 @@ +# Beispiel + +Das [radio-ui](README.md) veranschaulicht verschiedene Aspekte des Baus von Webanwendungen wie nachfolgend beschrieben. + +## app-layout + +Das radio-ui verwendet das [app-layout](/gitblit/docs/web!app-layout.git), das mit Hilfe von HTML und CSS die Grundlage einer für Webanwendungen geeigneten Bedienoberfläche schafft. + +## Nutzung von Vorlagen + +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. + +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. + +Durch die Nutzung von Vorlagen lassen sich dynamische und statische Inhalte sowie deren Gestaltung und Struktur optimal und frei von Redundanzen zusammenführen. + +## app-menu + +Das [app-menu](/gitblit/docs/web!app-menu.git) setzt auf die Nutzung von Vorlagen auf und fügt dem radio-ui ein Menü zur Bedienung der Anwendung hinzu. Es ist zudem eingebettet in die Funktion des app-layout. Das radio-ui zeigt so den Einsatz des app-menu und mithin das Zusammenspiel von Vorlagen, app-layout und Menü am praktischen Beispiel. + +## CRUD-Muster + +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). + +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. + +| Operation | Bedienoberfläche (radio-ui) | Server | +| ------------- |-------------| -----| +| 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 | +| Read | Funktion zum Abruf der Senderliste, Lesen der Senderliste, Darstellen der Liste als Kacheln | Ausgeben einer Liste von Sendern | +| 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 | +| 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 | + +Die Tabelle läßt ahnen, dass der größere Aufwand zur Herstellung eines CRUD-Musters auf die Bedienoberfläche entfällt. + +Mit seinen Menüfunktionen und der Art, wie mit Daten als Liste und als einzelnem Datensatz umgegangen wird sowie der Kombination dieser Funktionen mit der Verwendung von Vorlagen zeigt das radio-ui einen generischen Lösungsansatz, der sich für die Wiederverwendung in anderen Anwendungen eignet und dabei wenige Abhängigkeiten erfordert. diff --git a/data/tpl/dlg-abspieler-edit-form.tpl b/data/tpl/dlg-abspieler-edit-form.tpl index 877fd4e..e21a35b 100644 --- a/data/tpl/dlg-abspieler-edit-form.tpl +++ b/data/tpl/dlg-abspieler-edit-form.tpl @@ -15,12 +15,12 @@ <input value="{{url}}" id="abspieler-url" name="abspieler-url" placeholder="URL" type="text" class="abspieler-eingabe"></br> <label class="inline-label">Typ:</label> - <select id="abspieler-typ" size="1" class="abspieler-auswahl"> + <select id="abspieler-typ" size="1" class="abspieler-form-auswahl"> <option value="lokal">lokal</option> <option value="pirc">pirc</option> </select></br> <label class="inline-label">Zustand:</label> - <select id="abspieler-zustand" size="1" class="abspieler-auswahl"> + <select id="abspieler-zustand" size="1" class="abspieler-form-auswahl"> <option value="">nicht ausgewählt</option> <option value="selected">ausgewählt</option> </select></br> diff --git a/pirc.md b/pirc.md new file mode 100644 index 0000000..b9879d3 --- /dev/null +++ b/pirc.md @@ -0,0 +1,36 @@ +## Kombination von pirc und radio-ui + +Zur Verwendung des radio-ui mit [pirc](/gitblit/docs/pirc.git) 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. + +### Abspielen auf dem Raspberry Pi + +Kommandos an [pirc](/gitblit/docs/pirc.git) 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 + +1. `http://raspi:8080/` - URL der Maschine +1. `pirc/` - Name des Kontext, unter dem die Anwendung pirc läuft +1. `sys/rpc` - Service-Endpunkt der pirc-API +1. `c=de.uhilger.pirc.App` - Name der Klasse von pirc, die die Abspielmethode enthält +1. `m=abspielen` - Name der Methode zum Abspielen +1. `p=Sender-URL` - der Parameter mit dem URL zum Audiostream des Webradiosenders + +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. + +#### Beispiel Abspielen + +Ist die Fernbedienung pirc auf einem Raspberry Pi installiert, lautet das Kommando zum Abspielen des Webradiosenders radiobob (vgl. [Senderliste](radiostreams.md)) wie folgt + +```` +http://raspi:8080/pirc/sys/rpc?c=de.uhilger.pirc.App&m=abspielen&p=http://bob.hoerradar.de/radiobob-live-mp3-hq&p= +```` + +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. + +#### Beispiel Stoppen + +Zum Stoppen des zur Zeit abgespielten Webradios dient das folgende Kommando + +```` +http://raspi:8080/sys/rpc?c=de.uhilger.pirc.App&m=kommando&p=q +```` + +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. diff --git a/radiostreams.md b/radiostreams.md new file mode 100644 index 0000000..188d410 --- /dev/null +++ b/radiostreams.md @@ -0,0 +1,57 @@ +## Radiostreams + +Nachfolgend die Adressen einiger Radiostreams + +### hr3 + +[Livestream-Übersicht](http://www.hr3.de/service/hr3-online-hoeren,webradio-100.html) + +128 kbit http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3 + +48 kbit http://hr-hr3-live.cast.addradio.de/hr/hr3/live/mp3/48/stream.mp3 + +### hr info + +[Livestream-Übersicht](http://www.hr-inforadio.de/livestream/index.html) + +128 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3 + +48 kBit/s http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/48/stream.mp3 + +### radiobob + +[Livestream-Übersicht](http://www.radiobob.de/radiobob/empfang/livestream) + +MP3: http://bob.hoerradar.de/radiobob-live-mp3-hq + +Mobile Nutzung: http://bob.hoerradar.de/aac-radiobob + +#### Test der Bandbreite + +Spielt man den URL 'hq' von Radiobob im Browser zeigt der Netzwerkmonitor von Linux eine Netznutzung von 24-32 kbit/s. Das ergibt die folgende Betrachtung: + ++ 32 kBit/s ++ 115.20.000 Bit/Std (kBit x 3600 x 1000) ++ 13,74 MB pro Stunde (Bit : 8 : 1.024 : 1.024) + +### FFH + +[Livestream-Übersicht](https://www.ffh.de/musik/webradios/stream-adressen.html) + +128kbps http://mp3.ffh.de/radioffh/hqlivestream.mp3 + +48kbps http://mp3.ffh.de/radioffh/livestream.aac + +## Noch zu erledigen + +### Templates für Mustache dynamisch laden + +Spart Ladezeit zu Beginn. Lösungsansatz: Eine Funktion, die als Parameter das Element erhält, dessen html mit dem gerenderten Template ersetzt werden soll und den zu rendernden Inhalt. Die dynamische Ladefunktion + +1. prüft, ob das Template schon im cache ist +1. Lädt das Template, wenn nicht +1. wartet, bis das Template geladen ist +1. rendert das Template mit dem übergebenen Inhalt +1. schreibt das Ergebnis ins html des übergebenen Elements + +Der letzte Teil des Ablaufs muss asynchron gefasst sein, damit auf das Laden gewartet werden kann. -- Gitblit v1.9.3