App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
ulrich
2021-04-25 05d10e985e7fe6a44d9dc17c7ea4397f39677aea
commit | author | age
8e2038 1
4d64b6 2 # Calypso
8e2038 3
4d64b6 4 Calypso arbeitet als Empfänger von HTTP-Signalen und setzt diese in Kommandos an den [OMXPlayer](https://www.raspberrypi.org/documentation/raspbian/applications/omxplayer.md) um. Auf diese Weise kann ein Raspberry Pi als Abspieler von anderen Geräten aus fernbedient werden, am Pi selbst ist keine Bedienung erforderlich.
0af362 5
2c7545 6 Weitere Infos zu Calypso auf der [Produktseite](https://uhilger.de/data/ulrich/prg/calypso/).
U 7
b9e3c5 8 ## Nutzungsvoraussetzungen
U 9
4d64b6 10 Zur Ausführung von Calypso wird eine Java-Ablaufumgebung (Java Runtime Environment, JRE) benötigt, wie sie beim Raspberry Pi OS in der Variante 'full' bereits vorinstalliert ist. Auf der Kommandozeile des Raspberry Pi kann mit dem folgenden Kommando ermittelt werden ob das JRE vorhanden ist.
b9e3c5 11
U 12 ```
13 java -version
14 ```
15
20a0c8 16 Wenn eine Antwort wie z.B.
b9e3c5 17
U 18 ```
19 openjdk version "11.0.9.1" 2020-11-04
20 OpenJDK Runtime Environment (build 11.0.9.1+1-post-Raspbian-1deb10u2)
21 OpenJDK Server VM (build 11.0.9.1+1-post-Raspbian-1deb10u2, mixed mode)
22 ```
23
20a0c8 24 erscheint, ist das JRE vorhanden. Andernfalls kann es mit folgendem Kommando installiert werden:
b9e3c5 25
U 26 ```
e4ac75 27 sudo apt-get update
U 28 sudo apt-get install default-jdk
b9e3c5 29 ```
U 30
05d10e 31 ## Calypso erhalten
eb27be 32
05d10e 33 Der Quellcode von Calypso wird von hier an einen frei wählbaren lokalen Ablageort [heruntergeladen](/gitblit/zip/?r=Calypso.git&format=zip) und entpackt. In der hier folgenden weiteren Beschreibung wird das so entstandene Verzeichnis `Calypso` einschließlich des absoluten Pfades dorthin `$CALYPSO` genannt. Anstelle von `$CALYPSO` würde man also beispielweise `/home/fred/Calypso` notieren, wenn in das persönliche Verzeichnis des Benutzers `fred` heruntergealden und entpackt wurde.
U 34
35 ## Programm herstellen
36
37 Zur Herstellung des Programmes werden mit Hilfe der wie zuvor beschrieben geladenen Teile die folgenden Kommandos ausgeführt (Beispiel für Linux):
38
39 ```
40 cd $CALYPSO
41 mkdir classes
42 mkdir dist
43
44 $JDK/bin/javac -d classes src/de/uhilger/calypso/*.java src/de/uhilger/calypso/handler/*.java
45
46 $JDK/bin/jar -cf dist/calypso.jar -C classes .
47 rm -r classes
48 ```
49
50 Das fertig verwendbare Programm liegt anschließend unter `$CALYPSO/dist/calypso.jar`.
b9e3c5 51
0af362 52 ## Media-Quellen einrichen
U 53
4d64b6 54 Calypso kann in zwei Betriebsarten gestartet werden:
0af362 55
29124c 56 1. NFS-Client
U 57 1. HTTP-Client
0af362 58
U 59 ### NFS-Client
60
4d64b6 61 Mit dem Parameter `nfs-prefix` spielt Calypso Media-Inhalte aus Quellen ab, die über das Network File System (NFS) eingebunden sind. 
0af362 62
U 63 ```
eb27be 64 java -jar calypso.jar nfs-prefix="/media/mc" port=9090
0af362 65 ```
U 66
4d64b6 67 In dieser Betriebsart wird dem Inhalt, der beim Abspielen über den Parameter `title` angegeben wird, der Präfix aus dem Parameter `nfs-prefix` vorangestellt. Wird Calypso beispielsweise mit folgendem URL aufgerufen:
0af362 68
U 69 ```
eb27be 70 http://rpi4-wz:9090/calypso/play?title=/Filme/H/heat.m4v&th=60&ti=60&o=local
0af362 71 ```
U 72
cd13d9 73 wird die Datei `/media/mc/Filme/H/heat.m4v` abgespielt. 
U 74
75 #### Betriebsart NFS-Client einrichten
29124c 76
4d64b6 77 Zur Verwendung Calypsos in der Betriebsart NFS-Client muss der Raspberry Pi die Softwarepakete für den NFS-Client installiert haben, wie sie z.B. im Raspberry Pi OS in der Variante 'full' bereits enthalten sind. Zudem muss auf dem Raspberry Pi in der Datei `/etc/fstab` ein Eintrag gemacht werden, der die entsprechende Quelle angibt, z.B.
0af362 78
U 79 ```
80 mein-media-server:/media/extssd/mc /media/mc nfs rw 0 0
81 ```
82
83 Welche Quellen für einen solchen Eintrag verfügbar sind lässt sich auf dem Raspberry Pi mit folgendem Kommando sehen.
84
85 ```
86 showmount -e mein-media-server
87 ```
88
20a0c8 89 Die Maschine `mein-media-server` in den obigen Beispielen muss dafür als NFS-Server eingerichtet sein und Inhalte entsprechend via NFS freigeben.
29124c 90
U 91 ### HTTP-Client
92
4d64b6 93 Das folgende Kommando startet Calypso als HTTP-Client.
dae2e6 94
cd13d9 95 ```
eb27be 96 java -jar calypso.jar port=9090
cd13d9 97 ```
U 98
99
4d64b6 100 Wird der Parameter `nfs-prefix` beim Start Calypsos weggelassen, werden im Parameter `titel` Uniform Resource Locators (URLs) zu Media-Quellen erwartet wie z.B. in
29124c 101
U 102 ```
eb27be 103 http://mein-raspi:9090/calypso/play?title=http://mein-media-server:8080/tango/media/Filme/H/heat.m4v&th=60&ti=60&o=local
29124c 104 ```
U 105
20a0c8 106 Für das Abspielen über HTTP muss der Raspberry Pi nicht als NFS-Client eingerichtet werden. Der Media-Server muss dann das Streaming über HTTP implementieren.
fd5fbe 107
U 108 ## Steuerbefehle
109
4d64b6 110 Die folgenden Service-Endpunkte werden von Calypso bereitgestellt.
29124c 111
eb27be 112 /calypso/play +
U 113 /calypso/seek +
114 /calypso/pause +
115 /calypso/stop +
116 /calypso/ping +
117 /calypso/server/stop
185402 118
U 119 ### play
120
121 Text
122
123 ### seek
124
125 Text
126
127 ### pause
128
129 Test
130
131 ### stop
132
133 Text
134
135 ### ping
136
137 Text
138
139 ### server/stop
140
141 Text
0af362 142
4d64b6 143 ## Calypso als Dienst einrichten
0af362 144
4d64b6 145 Das Verteilpaket Calypsos enthält eine Beispieldatei namens `calypso.service`. Diese verweist auf das ebenfalls im Verteilpaket enthaltene Beispiel-Startskript namens `start`. Nach Anpassung der Pfade in `calypso.service` kann die Datei wie in folgendem Beispiel in das passende Systemverzeichnis des Raspberry Pi kopiert werden.
dae2e6 146
0af362 147 ```
4d64b6 148 cd /home/pi/prg/calypso
U 149 sudo cp calypso.service /etc/systemd/system/calypso.service
0af362 150 ```
U 151
152 ### Dienst starten
dae2e6 153
U 154 Mit folgendem Kommando kann der Dienst probehalber gestartet werden.
0af362 155
U 156 ```
4d64b6 157 sudo systemctl start calypso.service
0af362 158 ```
U 159
160 ### Dienst stoppen
161
162 Der laufende Dienst kann mit folgendem Signal via HTTP veranlasst werden, sich zu beenden.
163
164 ```
4d64b6 165 http://mein-raspi:9090/calypso/server/stop
0af362 166 ```
U 167
168 Ueber systemd kann stattdessen der Prozess wie folgt 'hart' beendet werden.
169
170 ```
4d64b6 171 sudo systemctl stop calypso.service
0af362 172 ```
U 173
174 ### Dienst dauerhaft aktivieren
175
dae2e6 176 Der folgende Befehl bewirkt, dass der Dienst nach einem Neustart des Raspberry Pi automatisch startet.
0af362 177
U 178 ```
4d64b6 179 sudo systemctl enable calypso.service
0af362 180 ```
U 181
182 ### Dienst deaktivieren
183
184 ```
4d64b6 185 sudo systemctl disable calypso.service
0af362 186 ```
U 187
188 ### Status des Dienstes pruefen
189
190 ```
4d64b6 191 sudo systemctl status calypso
0af362 192 ```