Ein Programm zur Steuerung der Mediawiedergabe auf einem Raspberry Pi.
1. Einleitung
Programme zur Mediawiedergabe werden häufig über ihre eigene Bedienoberfläche auf dem Gerät gesteuert, auf dem sie installiert sind. Das erfordert zusätzliche Geräte wie z.B. Bildschirm oder Tastatur. Für einen Media-Zuspieler ist das keine optimale Konfiguration, weshalb für manche Media-Software Zusätze nachrüstbar sind, die eine Steuerung von anderen Geräten aus erlauben.
Teils muss für eine solche Fernbedienung der Fernseher laufen, damit die Bedienoberfläche des Media-Zuspielers dargestellt werden kann. Teils gelingt die Fernbedienung auf dem Browser oder in einer eigens zu installierenden App des als Fernbedienung verwendeten Gerätes. Bei näherem Hinsehen lassen viele dieser Angebote aber zu wünschen übrig.
Calypso geht einen anderen Weg und stattet einen Raspberry Pi lediglich mit einer schlanken Möglichkeit aus, die Mediawiedergabe mit HTTP-Signalen zu steuern. Eine eigene Bedienoberfläche und Geräte wie Maus oder Tastatur sind nicht nötig. Mit Calypso ausgestattet wird das kleine Kästchen einfach neben Fernseher oder Stereoanlage gestellt und schon kann aus jedem Browser heraus die Wiedergabe gesteuert werden.
2. Vorbereitung
Zur Ausführung von Calypso ist ein Raspberry Pi mit Java und OMXPlayer erforderlich. Die folgenden Schritte schaffen die nötigen Voraussetzungen.
-
Den Raspberry Pi in Betrieb nehmen [5], falls noch nicht geschehen
-
Mit dem Befehl
omxplayer -version
überprüfen, ob das Paketomxplayer
installiert ist -
Das OMXPlayer-Paket [1] installieren, falls es noch nicht vorhanden ist
sudo apt-get install omxplayer
-
Mit dem Befehl
java -version
überprüfen, ob Java installiert ist -
Das JDK-Paket [2] installieren, falls Java noch nicht vorhanden ist
sudo apt-get install openjdk-11-jdk
Nun ist der Raspberry Pi bereit zur Installation von Calypso wie im nächsten Kapitel beschrieben.
3. Installation
Mit Abschluss der Vorbereitung sind folgende Schritte zur Installation von Calypso nötig.
-
Die Datei
calypso.zip
herunterladen -
Die Datei
calypso.zip
an einen Ort der Wahl entpacken, z.B. nach/home/pi/prg/calypso
Nun ist Calypso bereit zum Start wie im nächsten Kapitel beschrieben.
Damit Calypso bereits läuft, wenn der Raspberry Pi gestartet wurde, kann das Programm als Dienst eingerichtet werden.
Optional kann ein USB-Stick [3] am Raspberry Pi angebracht werden.
4. Start
Calypso wird als Programm gestartet, das auf HTTP-Steuerbefehle lauscht und diese ausführt. Der Aufruf geschieht wie folgt.
java -jar calypso.jar port=9090 player=omx ctx=/calypso
Mit dem obigen Aufruf werden URLs als Parameter zur Angabe des abzuspielenden Titels erwartet und an den OMXPlayer durchgereicht. Diese werden dann über HTTP-Streaming abgespielt. Mit der Angabe player=omx
wird der OMXPlayer zum Abspielen verwendet, ein Programm, das die Hardwareunterstützung des Raspberry Pi beim Abspielen von Videos nutzt.
Der zusätzliche Parameter nfs-prefix
erlaubt zudem Inhalte wiederzugeben, die über NFS für den Raspberry Pi erreichbar sind. In diesem Fall werden abzuspielende Titel als relative Pfadangabe übergeben und mit dem Präfix laut Parameter nfs-prefix
kombiniert. Für diese Betriebsart lautet der Aufruf wie folgt.
java -jar calypso.jar port=9090 nfs-prefix="/media/mc" player=omx ctx=/calypso
Mit den obigen Aufrufen ist Calypso über den in port
angegebenen Port per HTTP steuerbar. Zwei weitere Funktionen beeinflussen die Protokollierung wie folgt.
- Ablageort für das Abspielprotokoll
-
Während der Mediawiedergabe kann ein Protokoll erzeugt werden, das im Falle von Unterbrechungen zur Bestimmung der Stelle zum Weiterspielen dienen kann. Da das Mitschreiben des Protokolls vergleichsweise umfangreiche Schreibvorgänge erfordert, sollte die Ausgabe auf ein zusätzlich dafür angebrachtes Speichermedium und nicht auf die SD-Karte des Raspberry Pi geschehen. Der Parameter
omx.wd
dient in diesem Fall zur Angabe des Ablageortes. - Konfiguration der Protokollierung
-
Zusätzlich zur Protokollierung der Mediawiedergabe können auch die Aktivitäten Calypsos protokolliert und mit einer Konfigurationsdatei eingestellt werden, deren Name und Ablageort über den Parameter
java.util.logging.config.file
benannt wird.
Die Parameter zur Protokollierung werden beim Start Calypsos wie folgt übergeben.
java -Domx.wd=/mnt/store/calypso -Djava.util.logging.config.file=logging.properties -jar calypso.jar port=9090 player=omx ctx=/calypso &
In der Datei logging.properties
ist die Pfadangabe für den FileHandler auf /mnt/store/calypso
voreingestellt. Die Angabe kann an den gewünschten Ablageort für das Ausführungsprotokoll angepasst werden.
5. Beenden
Calypso kann einfach beendet werden, indem mit Strg-C
der laufende Prozess beendet wird. Ferner lässt sich Calypso auch per HTTP wie folgt beenden.
http://rpi4:9090/calypso/server/stop
6. Calypso bedienen
Die Bedienung von Calypso funktioniert am besten mit dem Programm Tango [4], das speziell für die Zusammenarbeit mit Calypso ausgelegt ist. Das folgende Schaubild zeigt deren Zusammenspiel.

Nachfolgend zudem einige Programmbefehle, wie sie auch in Tango eingebaut und zur Verwendung von Calypso direkt oder zum Einbau in Drittprogramme geeignet sind. Eine vollständige API-Dokumentation ist noch in Arbeit.
6.1. Abspielen
Zum Abspielen eines Titels wird ein HTTP GET
Aufruf an einen Uniform Resource Locator (URL) wie in folgendem Beispiel abgegeben.
http://rpi4:9090/calypso/play?&th=1&ti=10&o=local&log=true&titel=http://example.com:9090/srv/Filme/S/sound_city.m4v
Auf Wunsch gibt Calypso eine Rückmeldung, wenn das Abspielen des Titels beendet ist.
http://rpi4-wz:9090/calypso/play?&th=1&ti=240&o=local&log=true&titel=http://example.com:9090/srv/Filme/S/sound_city.m4v&r=http://mein-server:8080/mc/abspielenBeendet/11/3
6.1.1. Parameter
- th
-
aus der OMXPlayer-Doku: (threshold) Amount of buffered data required to finish buffering [s]
- ti
-
aus der OMXPlayer-Doku: (timeout) Timeout for stalled file/network operations (default 10s)
- o
-
Audio-Ausgabe (
local
|hdmi
|none
) Wenn zusätzlich zum Fernseher auch ein Audiogerät (Stereo-Anlage, Verstärker ö.ä.) angeschlossen und dieses über den analogen Ausgang verbunden ist, kann mit Angabe vono=local
der Fernseher ausgeschaltet bleiben, wenn nur Musik gehört wird.
- log
-
Log-Ausgabe (
true
|false
) Die Log-Ausgabe muss eingeschaltet sein (log=true
), damit das Weiterspielen von der letzten Unterbrechung aus gelingt. - titel
-
URL des Titels, der abgespielt werden soll
- r
-
URL für Rückmeldung (optional)
6.2. Weiterspielen
Wird ein Abspielvorgang durch Betätigen der Stopp-Taste unterbrochen oder bricht ein Abspielvorgang unerwartet ab, kann mit der Funktion Weiterspielen
das Abspielen an der Position fortgesetzt werden, an der der Abbruch erfolgte. Der Aufruf zum Weiterspielen lautet wie folgt.
http://rpi4:9090/calypso/playon?&th=1&ti=240&o=local&log=true&titel=http://example.com:9090/srv/Filme/S/sound_city.m4v
Die Funktion zum Weiterspielen funktioniert nur für den zuletzt gespielten Titel und verwendet das Abspielprotokoll. Das Abspielprotokoll muss daher eingeschaltet sein, damit das Weiterspielen funktioniert.
7. USB-Stick anschließen
Der Raspberry Pi sollte mit einem USB-Stick [3] ausgestattet werden, um die SD-Karte mit dem Betriebssystem von Schreibvorgängen zu entlasten. Die folgenden Schritte etablieren das Verzeichnis /mnt/store
auf einem USB-Stick und hängen diesen dauerhaft ins Dateisystem.
-
sudo blkid
liefert die UUID des USB-Sticks -
dann
sudo nano /etc/fstab
/etc/fstab
des Raspberry PiUUID=b40e99c3-9798-4589-bcf8-f29b17b28a4d /mnt/store ext4 rw,suid,dev,exec,auto,async,relatime,users,nofail,x-systemd.device-timeout=5 0 0
sudo mkdir /mnt/store sudo mkdir /mnt/store/calypso sudo chown -R pi:pi /mnt/store sudo chmod -R ug+rwx /mnt/store
Damit ist der USB-Stick dauerhaft am Raspberry Pi eingerichtet und wird bei jedem Neustart entsprechend verwendet.
8. Dienst einrichten
Zur Einrichtung von Calypso als Dienst wird auf dem Raspberry Pi wird eine Datei namens calypso.service
mit folgendem Inhalt erstellt. Die Angaben unter ExecStart
und WorkingDirectory
müssen dabei auf den Ablageort von Calypso verweisen.
[Unit] Description=Calypso After=network.target syslog.target [Service] ExecStart=/home/pi/prg/calypso/start WorkingDirectory=/home/pi/prg/calypso StandardOutput=inherit StandardError=inherit Restart=always User=pi Type=forking [Install] WantedBy=multi-user.target
Die Datei wie folgt ins Verzeichnis /etc/systemd/system
kopieren.
sudo cp calypso.service /etc/systemd/system/calypso.service
Zum Starten dient der folgende Befehl.
sudo systemctl start calypso.service
Der folgende Befehl stoppt den Dienst.
sudo systemctl stop calypso.service
Wenn das Starten und Stoppen verläuft wie vorgesehen, kann der Dienst wie folgt aktiviert werden.
sudo systemctl enable calypso.service
Damit wird Calypso stets gestartet wenn der Raspberry Pi eingeschaltet wird.