From a7f0a18275d394ff92e44fcce55a511a54535787 Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 22 Mar 2021 11:57:53 +0000 Subject: [PATCH] Play/Stop erste fertige Fassung --- src/de/uhilger/avdirektor/handler/CmdHandler.java | 2 src/de/uhilger/avdirektor/handler/PlayHandler.java | 33 ++++++++++- src/de/uhilger/avdirektor/handler/OMXPlayer.java | 82 ++++++++++++++++++++------ src/de/uhilger/avdirektor/App.java | 8 ++ 4 files changed, 101 insertions(+), 24 deletions(-) diff --git a/src/de/uhilger/avdirektor/App.java b/src/de/uhilger/avdirektor/App.java index 9eaac2e..c9552fc 100644 --- a/src/de/uhilger/avdirektor/App.java +++ b/src/de/uhilger/avdirektor/App.java @@ -48,6 +48,8 @@ private static HashMap initParams; + private static Process playerproc; + /** * @param args the command line arguments */ @@ -83,5 +85,11 @@ return param; } + public static Process getPlayerProcess() { + return playerproc; + } + public static void setPlayerProcess(Process p) { + playerproc = p; + } } diff --git a/src/de/uhilger/avdirektor/handler/CmdHandler.java b/src/de/uhilger/avdirektor/handler/CmdHandler.java index ac108f4..27b64d0 100644 --- a/src/de/uhilger/avdirektor/handler/CmdHandler.java +++ b/src/de/uhilger/avdirektor/handler/CmdHandler.java @@ -30,7 +30,7 @@ logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString()); Map map = getQueryMap(t); - String antwort = this.kommando(t, cmd); + String antwort = this.kommando(cmd); logger.log(Level.FINE, antwort); String response = getResponseString(map, "cmd", antwort); diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java index dc0a797..252c8ce 100644 --- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java +++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java @@ -39,15 +39,50 @@ } } + /* + + bei etwas wie + http://rpi4-az:9090/avd/play?t=/Filme/S/sound_city.m4v&p=--timeout=60%20--threshold=60 + + sind = nicht nur nach dem Query-Parameter sondern auch in dessen Wert + + also erstmal nach & zerlegen: + t=/Filme/S/sound_city.m4v + p=--timeout=60%20--threshold=60 + + dann die Position beim ersten = von links abschneiden + + */ protected Map getQueryMap(HttpExchange t) { HashMap map = new HashMap(); String query = t.getRequestURI().getQuery(); if(query != null && query.length() > 0) { String qParts[] = query.split("&"); for(String qPart : qParts) { - //logger.info("qPart: " + qPart); + logger.finer("qPart: " + qPart); String pParts[] = qPart.split("="); map.put(pParts[0], pParts[1]); + logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]); + /* + if(qPart.contains(" ")) { + String pParts[] = qPart.split(" "); + for(String pPart : pParts) { + String ppParts[] = pPart.split("="); + map.put(ppParts[0], ppParts[1]); + logger.finer("ppParts[0]: " + ppParts[0] + ", ppParts[1]: " + ppParts[1]); + } + } else { + String pParts[] = qPart.split("="); + map.put(pParts[0], pParts[1]); + logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]); + } + */ + /* + String pParts[] = qPart.split("="); + for(String pPart : pParts) { + logger.finer("pPart: " + pPart); + } + */ } } return map; @@ -78,12 +113,12 @@ * @param token * @return Antwort des Servers */ - public String abspielen(HttpExchange t, String urlStr, String token) { - return abspielenMitParametern(t, urlStr, null, token); + public String abspielen(String urlStr, String token) { + return abspielenMitParametern(urlStr, null, token); } - public String abspielenMitRueckmeldung(HttpExchange t, String urlStr, String meldeUrlStr, String token) { - return abspielenMitParameternUndRueckmeldung(t, urlStr, null, meldeUrlStr, token); + public String abspielenMitRueckmeldung(String urlStr, String meldeUrlStr, String token) { + return abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, token); } /** @@ -99,16 +134,17 @@ * @param token * @return Antwort des Servers */ - public String abspielenMitParametern(HttpExchange t, String urlStr, String parameter, String token) { - return abspielenMitParameternUndRueckmeldung(t, urlStr, parameter, null, token); + public String abspielenMitParametern(String urlStr, String parameter, String token) { + return abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, token); } - public String abspielenMitParameternUndRueckmeldung(HttpExchange t, String urlStr, String parameter, String meldeUrlStr, String token) { + public String abspielenMitParameternUndRueckmeldung(String urlStr, String parameter, String meldeUrlStr, String token) { String antwort;// = null; try { - Object o = t.getAttribute(App.PI_PLAYER); + //Object o = t.getAttribute(App.PI_PLAYER); + Process o = App.getPlayerProcess(); if(o != null) { - tilgen(t); + tilgen(); } StringBuilder kommando = new StringBuilder("omxplayer "); if(parameter != null) { @@ -147,7 +183,8 @@ mt.start(); } //servletContext.setAttribute(App.PI_PLAYER, player_process); - t.setAttribute(App.PI_PLAYER, player_process); + //t.setAttribute(App.PI_PLAYER, player_process); + App.setPlayerProcess(player_process); //Runtime.getRuntime().exec("killall dbus-daemon"); antwort = "Abspielen gestartet, url: " + urlStr; } @@ -171,16 +208,18 @@ * @param t * @return die Antwort des Servers */ - public String tilgen(HttpExchange t) { + public String tilgen() { String antwort; // = null; try { - Object o = t.getAttribute(App.PI_PLAYER); + //Object o = t.getAttribute(App.PI_PLAYER); + Process o = App.getPlayerProcess(); if(o == null) { - t.setAttribute(App.PI_PLAYER, null); + //t.setAttribute(App.PI_PLAYER, null); + App.setPlayerProcess(null); // t.removeAttribute(App.PI_PLAYER); antwort = "Es ist kein Player zum Beenden vorhanden, aber der Servlet-Kontext wurde bereinigt."; } else { - kommando(t, App.CMD_STOP); + kommando(App.CMD_STOP); //t.removeAttribute(PI_PLAYER); antwort = "Player gestoppt, Kontext bereinigt."; } @@ -199,25 +238,28 @@ * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a> * @return die Antwort des Servers */ - public String kommando(HttpExchange t, String k) { + public String kommando(String k) { String antwort; // = null; try { - Object o = t.getAttribute(App.PI_PLAYER); + //Object o = t.getAttribute(App.PI_PLAYER); + Process o = App.getPlayerProcess(); if(o == null) { + App.setPlayerProcess(null); //servletContext.removeAttribute(PI_PLAYER); - t.setAttribute(App.PI_PLAYER, null); + //t.setAttribute(App.PI_PLAYER, null); antwort = "Es wird nichts abgespielt dem ein Kommando gesendet werden kann."; } else { - Process player_process = (Process) o; + Process player_process = o; OutputStream os = player_process.getOutputStream(); Writer out = new BufferedWriter(new OutputStreamWriter(os)); out.write(k); out.flush(); if(k.equals(App.CMD_STOP)) { out.close(); + App.setPlayerProcess(null); //player_process.destroy(); //player_process = null; - t.setAttribute(App.PI_PLAYER, null); + //t.setAttribute(App.PI_PLAYER, null); //servletContext.removeAttribute(PI_PLAYER); } antwort = "Kommando '" + k + "' ausgefuehrt."; diff --git a/src/de/uhilger/avdirektor/handler/PlayHandler.java b/src/de/uhilger/avdirektor/handler/PlayHandler.java index 304d867..0806ed9 100644 --- a/src/de/uhilger/avdirektor/handler/PlayHandler.java +++ b/src/de/uhilger/avdirektor/handler/PlayHandler.java @@ -52,13 +52,40 @@ private static final Logger logger = Logger.getLogger(PlayHandler.class.getName()); + /* + rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&to=60&ti=60&o=local + + OMXPlayer.abspielenMitParameternUndRueckmeldung( + String urlStr, String parameter, String meldeUrlStr, String token) + + Parameter des Aufrufs play als query + + ?titel=/Filme/S/sound_city.m4v + &ti=60 + &th=60 + &o=local|hdmi|both + &r=http://uhilger.de/mc/api/usw + + r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist + + */ + + @Override public void handle(HttpExchange t) throws IOException { logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString()); - Map map = getQueryMap(t); - String antwort = abspielenMitParameternUndRueckmeldung(t, - getParam(map, "t"), getParam(map, "p"), getParam(map, "r"), "1"); + Map map = getQueryMap(t); + StringBuilder params = new StringBuilder(); + params.append("-o "); + params.append(getParam(map, "o")); + params.append(" --threshold "); + params.append(getParam(map, "th")); + params.append(" --timeout "); + params.append(getParam(map, "ti")); + + String antwort = abspielenMitParameternUndRueckmeldung( + getParam(map, "titel"), params.toString(), getParam(map, "r"), "1"); String response = getResponseString(map, "play", antwort); t.sendResponseHeaders(200, response.length()); -- Gitblit v1.9.3