App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
ulrich
2021-03-22 a7f0a18275d394ff92e44fcce55a511a54535787
commit | author | age
8e2038 1 package de.uhilger.avdirektor.handler;
U 2
3 import com.sun.net.httpserver.HttpExchange;
4 import com.sun.net.httpserver.HttpHandler;
5 import java.io.IOException;
6 import java.io.OutputStream;
7 import java.util.HashMap;
e448af 8 import java.util.Map;
8e2038 9 import java.util.Set;
e448af 10 import java.util.function.Consumer;
8e2038 11 import java.util.logging.Level;
U 12 import java.util.logging.Logger;
13
14 /**
15  * Es koennen mehrere Varianten beim Abspielen verwendet werden.
16  * 
17  * Abspielen eines Titels
18  * abspielenMitParameternUndRueckmeldung(urlStr, null, null, 1)
19  * 
20  * Abspielen eines Titels mit Rueckmeldung (z.B. fuer Playlisten)
21  * abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, 1)
22  * 
23  * Abspielen mit Parametern
24  * abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, 1)
25  * 
26  * Abspielen mit Parametern und Rueckmeldung
27  * abspielenMitParameternUndRueckmeldung(urlStr, parameter, meldeUrlStr, 1)
28  * 
29  * Token wird zur Zeit nicht genutzt, hier kann einfach eine beliebige
30  * Zahl uebergeben werden.
31  * 
32  * Die drei Parameter t, p, r werden als Query im URL erwartet. Beispiele:
33  * t = titel
34  * p = parameter
35  * r = url fuer rueckmeldung
36  * 
37  * 
38  * /avd/play?t=/Pfad/zum/Titel.mp3
39  * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60
40  * /avd/play?t=/Pfad/zum/Titel.mp3&r=http:/uhilger.de/rueckmelde/pfad
41  * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60&r=http:/uhilger.de/rueckmelde/pfad
42  * 
43  * String urlStr, String parameter, String meldeUrlStr, String token
44  * 
45  * 
46  * 
47  * 
48  *
49  * @author ulrich
50  */
51 public class PlayHandler extends OMXPlayer implements HttpHandler {
52   
53   private static final Logger logger = Logger.getLogger(PlayHandler.class.getName());
54
a7f0a1 55   /*
U 56   rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&to=60&ti=60&o=local
57   
58     OMXPlayer.abspielenMitParameternUndRueckmeldung(
59       String urlStr, String parameter, String meldeUrlStr, String token)
60   
61     Parameter des Aufrufs play als query
62   
63     ?titel=/Filme/S/sound_city.m4v
64     &ti=60
65     &th=60
66     &o=local|hdmi|both
67     &r=http://uhilger.de/mc/api/usw
68   
69     r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist
70
71   */
72   
73   
8e2038 74   @Override
U 75   public void handle(HttpExchange t) throws IOException {
0c8d27 76     logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString());
8e2038 77     
a7f0a1 78     Map map = getQueryMap(t);
U 79     StringBuilder params = new StringBuilder();
80     params.append("-o ");
81     params.append(getParam(map, "o"));
82     params.append(" --threshold ");
83     params.append(getParam(map, "th"));
84     params.append(" --timeout ");
85     params.append(getParam(map, "ti"));
86     
87     String antwort = abspielenMitParameternUndRueckmeldung( 
88             getParam(map, "titel"), params.toString(), getParam(map, "r"), "1");    
0c8d27 89     
U 90     String response = getResponseString(map, "play", antwort);
8e2038 91     t.sendResponseHeaders(200, response.length());
U 92     OutputStream os = t.getResponseBody();
93     os.write(response.getBytes());
94     os.close();    
95   }
96 }