App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
ulrich
2021-03-21 8e20383acd0ab64b0b54ffb94508db13cc056269
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;
8 import java.util.Set;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
11
12 /**
13  * Es koennen mehrere Varianten beim Abspielen verwendet werden.
14  * 
15  * Abspielen eines Titels
16  * abspielenMitParameternUndRueckmeldung(urlStr, null, null, 1)
17  * 
18  * Abspielen eines Titels mit Rueckmeldung (z.B. fuer Playlisten)
19  * abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, 1)
20  * 
21  * Abspielen mit Parametern
22  * abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, 1)
23  * 
24  * Abspielen mit Parametern und Rueckmeldung
25  * abspielenMitParameternUndRueckmeldung(urlStr, parameter, meldeUrlStr, 1)
26  * 
27  * Token wird zur Zeit nicht genutzt, hier kann einfach eine beliebige
28  * Zahl uebergeben werden.
29  * 
30  * Die drei Parameter t, p, r werden als Query im URL erwartet. Beispiele:
31  * t = titel
32  * p = parameter
33  * r = url fuer rueckmeldung
34  * 
35  * 
36  * /avd/play?t=/Pfad/zum/Titel.mp3
37  * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60
38  * /avd/play?t=/Pfad/zum/Titel.mp3&r=http:/uhilger.de/rueckmelde/pfad
39  * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60&r=http:/uhilger.de/rueckmelde/pfad
40  * 
41  * String urlStr, String parameter, String meldeUrlStr, String token
42  * 
43  * 
44  * 
45  * 
46  *
47  * @author ulrich
48  */
49 public class PlayHandler extends OMXPlayer implements HttpHandler {
50   
51   private static final Logger logger = Logger.getLogger(PlayHandler.class.getName());
52
53   @Override
54   public void handle(HttpExchange t) throws IOException {
55     logger.log(Level.INFO, "RequestURI.getPath: {0}", t.getRequestURI().getPath());
56     
57     String path = t.getRequestURI().getPath();
58     String[] parts = path.split("/");
59     for (String part : parts) {
60       logger.log(Level.INFO, "part: {0}", part);
61     }
62     //logger.log(Level.INFO, "query: {0}", t.getRequestURI().getQuery());
63
64     HashMap map = new HashMap();
65     String query = t.getRequestURI().getQuery();
66     if(query != null && query.length() > 0) {
67       String qParts[] = query.split("&");
68       for(String qPart : qParts) {
69         //logger.info("qPart: " + qPart);
70         String pParts[] = qPart.split("=");
71         map.put(pParts[0], pParts[1]);
72       }
73     }
74     Set keys = map.keySet();
75     keys.forEach(key -> {
76       logger.info("key " + key + " value " + map.get(key));
77     });
78     
79         
80     String response = "play";
81     t.sendResponseHeaders(200, response.length());
82     OutputStream os = t.getResponseBody();
83     os.write(response.getBytes());
84     os.close();    
85     
86   }
87
88 }