Webserver: Steuerung des Players
Für die Steuerung des Players und der Playlist werden bestimmte URLs verwendet. Da bei der Steuerung des Players das "Ergebnis" eigentlich keine neue Seite im Browser ist, sondern einfach nur die Tatsache, dass der Player "etwas getan hat", gibt es für die Steuerung generell zwei Varianten.
- Einfache URLs mit passenden Parametern. Nemp wird die entsprechende Aktion ausführen und den Benutzer dann auf die Player- oder Playlist-Seite weiterleiten, wo die Änderungen dann sichtbar sein sollten.
- Requests von JavaScript. Nemp wird die entsprechende Aktion ausführen, und eine passende Antwort zurücksenden, die vom JavaScript verarbeitet werden kann. In einigen Fällen ist dann ein Austausch einer Grafik sinnvoll, oder das Nachladen von Teilen der aktuell angezeigten Webseite.
Einfache URLs
Die Variante mit normalen URLs wird benötigt, wenn kein JavaScript zur Verfügung steht. Nemp liefert dafür das Theme "No JavaScript" mit, das aber eigentlich nicht mehr verwendet werden sollte.
Steuerung des Players mit /playercontrol
Für die Steuerung des Players wird die Seite /playercontrol mit einem Parameter action aufgerufen. Mögliche Werte dafür sind:
- playpause: Fortführen oder Anhalten der Wiedergabe, je nach aktuellem Status des Players.
- stop: Stop, Anhalten der Wiedergabe.
- next: Abspielen des nächsten Titels.
- previous: Je nach Fortschritt im aktuellen Titel: erneutes Abspielen des aktuellen Titels oder Abspielen des vorherigen Titels.
Beispiel: /playercontrol?action=playpause
Bei Aufruf von /playercontrol wird auf die Player-Seite weitergeleitet, d.h. diese wird dann ggf. neu geladen.
Steuerung der Playlist mit /playlistcontrol
Für die Steuerung der Playlist wird die Seite /playlistcontrol mit zwei Parametern id und action aufgerufen. Der Wert für id ist die interne ID des Titels in der Playlist oder in der Medienbibliothek. Für den Parameter action sind folgende Werte möglich:
- file_playnow: Startet die Wiedergabe dieses Titels. Wenn der Titel noch nicht in der Playlist enthalten ist, wird er hinter den aktuell abgespielten Titel eingefügt.
- file_vote: Fügt dem Titel ein "Gefällt mir" hinzu und ändert entsprechend die Position des Titels in der Playlist. Falls der Titel noch nicht in der Playlist enthalten ist, wird er mit einem "Like" in die Playlist eingefügt.
- file_add: Fügt den Titel ans Ende der Playlist ein
- file_addnext: Fügt den Titel hinter den aktuellen Titel in die Playlist ein
- file_movedown: Verschiebt den Titel eine Position nach oben
- file_moveup: Verschiebt den Titel eine Position nach unten
- file_delete: Entfernt den Titel aus der Playlist.
Beispiel: http://localhost/playlistcontrol?id=12345&action=file_vote Fügt der Datei mit der ID 12345 ein "Like" hinzu.
Bei Aufruf von /playlistcontrol wird auf die Playlist-Seite weitergeleitet, d.h. diese wird dann ggf. neu geladen.
Wenn mehrere Personen Zugriff auf den Webserver haben, dann ist es empfehlenswert, eine direkte Manipulation der Playlist zu unterbinden. In den Optionen wird das über die Einstellung "Fernsteuerung des Players erlauben" geregelt. Einfügen von Dateien und das priorisierte Abspielen per "Gefällt mir" sind in so einem Szenario sicherer.
Der "Admin" hat jedoch unabhängig von der Einstellung Vollzugriff auf den Player über den Webbrowser - es sei denn, das gewählte Theme liefert die Buttons zur Steuerung nicht an den Browser aus.
Verwendung von JavaScript
Für die Steuerung des Players ist es eigentlich nicht nötig, dass danach die ganze Seite im Browser neu geladen wird. Daher gibt es dafür weitere URLs, die von einem JavaScript aufgerufen werden können, um den Player zu steuern und/oder Teile nachzuladen.
Abfrage von Player-Eigenschaften mit /playerJS
Für die regelmäßige Aktualisierung des aktuellen Titels kann /playerJS genutzt werden. Optionaler Parameter ist data, der die Werte progress oder volume haben kann.
- Wenn der Parameter data nicht gesetzt ist, wird der Inhalt der Player-Seite zurückgeliefert, wie er im Template PagePlayer.tpl definiert wird. Das JavaScript sollte den vorhandenen Teil mit der erhaltenen Antwort ersetzen.
- progress ermöglicht das Abfragen des Fortschritts im aktuellen Titel in Prozent. Die Antwort enthält einfach nur einen String mit den aktuellen Fortschritt (d.h. "0" bis "100"), die das JavaScript nutzen kann, um den Fortschrittsbalken zu aktualisieren.
- volume liefert die aktuelle Lautstärke als Wert zwischen 0 und 100 zurück.
Beispiel: http://localhost/playerJS?data=progress liefert den prozentualen Fortschritt im aktuellen Titel zurück.
Steuerung des Players mit /playercontrolJS
- Die actions playpause, stop, next und previous funktionieren analog zu /playercontrol. Anstatt einer Weiterleitung auf die Player-Seite werden die Player-Daten zurückgeliefert, wie sie /playerJS ausgibt. Der Parameter data sollte hier weggelassen werden.
- setprogress ermöglicht das spulen im aktuellen Titel. Sinnvolle Eingabe-Methode ist hier <input type="range">. Angabe des Fortschritts in Prozent über den zusätzlichen Parameter value.
Der Inhalt der Antwort kann über den zusätzlichen Parameter data=progress gesteuert werden (vgl. Abschnitt /playerJS).
Beispiel: playercontrolJS?action=setprogress&value=50&data=progress setzt den Fortschritt auf 50% und liefert bei Erfolg als Antwort den Wert "50" zurück. - setvolume ermöglicht das Setzen der Lautstärke des Players. Wie bei setprogress werden Werte zwischen 0 und 100 akzeptiert. Zusätzlich sind die Werte "1000" und "-1000" erlaubt, mit der die Lautstärke um einen festgelegten Wert erhöht oder reduziert wird.
Der Inhalt der Antwort kann über den zusätzlichen Parameter data=volume gesteuert werden (vgl. Abschnitt /playerJS).
Falls die Steuerung des Players über den Browser nicht gestattet ist, dann werden entsprechende Versuche mit einem passenden HTTP-StatusCode (z.B. 403 oder 404) beantwortet. In der Regel sollte das aber nicht auftreten, da der Webserver in dem Fall die Steuerungs-Buttons gar nicht mit in den HTML-Code einfügt. Allenfalls wenn im laufenden Betrieb die Zugriffsrechte weiter eingeschränkt werden, und ein User noch eine veraltete Player-Seite mit höheren Rechten angezeigt bekommen hat, kann es dazu kommen. Und natürlich, wenn ein versierter Anwender entsprechende URLs manuell eingibt.
Nachladen der Playlist mit /playlistJS
Bei Änderungen an der Playlist kann auch nur die Liste der Titel abgefragt werden, d.h. der Teil, der im Template PagePlaylist.tpl für den Platzhalter {{PlaylistItems}} eingefügt wird.
Früher konnte hier auch ein Parameter angegeben werden, über den nur einzelne Titel nachgeladen wurden. Da sich das aber als nicht sonderlich sinnvoll herausgestellt hat, wurde diese Möglichkeit in Version 5.1 entfernt.
Steuerung der Playlist mit /playlistcontrolJS
Für das Ändern der Playlist, d.h. Einfügen oder Löschen von Titeln, das Ändern der Reihenfolge oder voten kann /playlistcontrolJS verwendet werden. Die Parameter id und action funktionieren ganz analog zu /playlistcontrol. Anstelle einer Weiterleitung auf die Playlist-Seite gibt es hier allerdings nur eine kurze Antwort, die über den Erfolg oder Fehlschlag der Aktion informiert.
- file_playnow (sofortiges Abspielen eines Titels)
- "0": Es ist ein Fehler aufgetreten. In der Regel ist die übermittelte ID nicht mehr gültig, z.B. weil der Titel in der Zwischenzeit anderweitig aus der Playlist gelöscht wurde.
- "<neueID>": Im Erfolgsfall wird die ID des neu gestarteten Titels übermittelt.
- file_add, file_addnext (einfügen eines Titels in die Playlist)
- "ok": Der Titel wurde erfolgreich in die Playlist eingefügt
- "error": Es ist ein Fehler aufgetreten.
- file_moveup, file_movedown (verschieben eines Titels in der Playlist)
- "ok": Der Titel wurde erfolgreich verschoben
- "prebook": Der Titel wurde nur innerhalb der Vormerk-Liste verschoben (siehe unten)
- "denied": Der Titel konnte nicht verschoben werden (z.B. kann der erste Titel in der Liste nicht weiter nach oben verschoben werden)
- "error": Es ist ein Fehler aufgetreten.
- file_vote (voten eines Titels)
- "ok": Das "gefällt mir" wurde erfolgreich registriert und der Titel entsprechend der Gesamtbewertung in der Playlist neu einsortiert
- "already voted": Der Anwender hat bereits für diesen Titel gestimmt. Das "gefällt mir" wurde nicht berücksichtigt.
- "spam": Der Anwender hat in der letzten Zeit zu viele Titel geliked. Das "gefällt mir" wurde nicht berücksichtigt.
- "error": Es ist ein Fehler aufgetreten.
- file_delete (entfernen eines Titels aus der Playlist)
- "ok": Der Titel wurde erfolgreich aus der Playlist entfernt
- "prebook": Der Titel wurde nur aus der Vormerk-Liste entfernt. Er ist aber immer noch in der Playlist enthalten.
- "error": Es ist ein Fehler aufgetreten.
Wenn die auslösenden Buttons auf der Playlist-Seite sind, sollte auf jeden Fall die Playlist mit /playlistJS neu geladen werden. Einzelne Änderungen im HTML DOM sind nur begrenzt sinnvoll, da sich die Playlist auch anderweitig geändert haben kann. Damit dem Anwender regelmäßig eine aktuelle Playlist im Browser angezeigt wird, sollte diese nach Änderungen durch den user im Zweifel komplett neu geladen werden.
Wenn die Buttons für "Hinzufügen" oder "Gefällt mir" außerhalb der Playlist-Seite genutzt werden, dann reicht es, den jeweiligen Button durch ein anderes Element zu ersetzen, das dem Anwender zeigt, dass das Klicken Erfolg (oder eben keinen Erfolg) hatte.
Was ist die "Vormerk-Liste"? - Die Vormerkliste ist ein verstecktes Feature der Nemp-Playlist. Sie können im Player über die Zifferntasten 0..9 eine temporäre individuelle Reihenfolge festlegen. Markieren Sie einfach das Stück, dass Sie als nächstes hören wollen, und drücken sie die Taste 1. Ein anderes markieren Sie mit 2 usw. Wenn sie die Reihenfolge ändern wollen, funktioniert das ebenso. Wenn Sie eine Markierung entfernen wollen, drücken Sie die 0. In der Playlist erscheint dann ein Timer-Symbol mit der Angabe der Abspielreihenfolge dahinter.
Die Verwendung der Vormerk-Liste in Kombination mit dem Webserver ergibt nur wenig Sinn und sollte vermieden werden. Beim "voten" wird die Abspielreihenfolge durch umsortieren der Titel erreicht, bei der Vormerkliste ist das absichtlich nicht so. Diese beiden Ansätze sind nicht miteinander vereinbar und sorgen in Kombination für ein unerwartetes Verhalten. Dennoch werden diese Fälle im Webserver berücksichtigt.