App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
ulrich
2021-03-21 e448afbfb51d405f9eb1d1140405c9619ca79153
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
55   @Override
56   public void handle(HttpExchange t) throws IOException {
e448af 57     logger.log(Level.FINE, "RequestURI.getPath: {0}", t.getRequestURI().getPath());
U 58     Map map = getQueryMap(t);
8e2038 59     Set keys = map.keySet();
e448af 60     StringBuffer buf = new StringBuffer();
U 61     buf.append("play");
62     buf.append(System.lineSeparator());
63     keys.forEach((Object key) -> {
64       buf.append("key: ");
65       buf.append(key);
66       buf.append(System.lineSeparator());
67       buf.append("value: "); 
68       buf.append(map.get(key));
69       buf.append(System.lineSeparator());
70       logger.log(Level.FINE, "key {0} value {1}", new Object[]{key, map.get(key)});
8e2038 71     });
U 72     
e448af 73     String response = buf.toString();
8e2038 74     t.sendResponseHeaders(200, response.length());
U 75     OutputStream os = t.getResponseBody();
76     os.write(response.getBytes());
77     os.close();    
78   }
79 }