From fa4bcf5f03a8b2fc45faa1aef8f0c8ff4dd616b6 Mon Sep 17 00:00:00 2001 From: ulrich <ulrich@ulrich-vaio> Date: Mon, 29 Mar 2021 19:49:19 +0000 Subject: [PATCH] VLCPlayer Pause Seek in Arbeit --- src/de/uhilger/avdirektor/handler/OMXPlayer.java | 159 ++++++++++++++++++++++------------------------------- 1 files changed, 66 insertions(+), 93 deletions(-) diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java index 252c8ce..991e12b 100644 --- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java +++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java @@ -1,11 +1,23 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ + AV-Direktor - Control OMXPlayer on Raspberry Pi via HTTP + Copyright (C) 2021 Ulrich Hilger + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + package de.uhilger.avdirektor.handler; -import com.sun.net.httpserver.HttpExchange; import de.uhilger.avdirektor.App; import de.uhilger.avdirektor.MeldeThread; import de.uhilger.avdirektor.ProzessLauscher; @@ -16,110 +28,69 @@ import java.io.Writer; import java.net.HttpURLConnection; import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; /** + * Methoden zur Ausfuehrung des Programmes omxplayer des Raspberry Pi + * sowie zum Senden von Kommandos an eine laufende Instanz des + * omxplayer. + * + * Die Klasse OMXPlayer stellt als abstrakte Basisklasse ihre Methoden + * den Handler-Klassen zur Verfuegung. * * @author ulrich */ -public abstract class OMXPlayer implements ProzessLauscher { +public class OMXPlayer implements Player , ProzessLauscher { private static final Logger logger = Logger.getLogger(OMXPlayer.class.getName()); - protected String getParam(Map map, String key) { - Object o = map.get(key); - if(o != null) { - return o.toString(); - } else { - return null; - } - } - - /* - - 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.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; - } - - protected String getResponseString(Map map, String cmd, String antwort) { - Set keys = map.keySet(); - StringBuilder buf = new StringBuilder(); - buf.append("play"); - buf.append(System.lineSeparator()); - keys.forEach((Object key) -> { - buf.append("key: "); - buf.append(key); - buf.append(System.lineSeparator()); - buf.append("value: "); - buf.append(map.get(key)); - buf.append(System.lineSeparator()); - //logger.log(Level.FINE, "key {0} value {1}", new Object[]{key, map.get(key)}); - }); - buf.append(antwort); - return buf.toString(); - } - + public static final String BLANK = " "; + public static final String CMD_DEC_SPEED = "1"; + public static final String CMD_DEC_VOL = "-"; + public static final String CMD_INC_SPEED = "2"; + public static final String CMD_INC_VOL = "+"; + public static final String CMD_NEXT_AUDIO = "k"; + public static final String CMD_NEXT_CHAPTER = "o"; + public static final String CMD_NEXT_SUB = "m"; + public static final String CMD_PAUSE_RESUME = "p"; + public static final String CMD_PREV_AUDIO = "j"; + public static final String CMD_PREV_CHAPTER = "i"; + public static final String CMD_PREV_SUB = "n"; + public static final String CMD_STOP = "q"; + public static final String CMD_TOGGLE_SUB = "s"; + public static final String F_PING = "ping"; + public static final String F_PLAY = "play"; + public static final String F_SEEK = "seek"; + public static final String OPT_HDMI_AUDIO = "-o%20hdmi"; + public static final String OPT_LOCAL_AUDIO = "-o%20local"; + public static final String PFEIL_HERAUF = "5b41"; + public static final String PFEIL_HERUNTER = "5b42"; + public static final String PFEIL_LINKS = "5b44"; + public static final String PFEIL_RECHTS = "5b43"; + public static final String SP_RUECK_30 = "rueck30"; + public static final String SP_RUECK_600 = "rueck600"; + public static final String SP_VOR_30 = "rueck30"; + public static final String SP_VOR_600 = "vor600"; + + /** * Einen Prozess zum Abspielen mit dem omxplayer starten - * @param t * @param urlStr URL der Quelle, die abgespielt werden soll * @param token * @return Antwort des Servers */ + /* public String abspielen(String urlStr, String token) { return abspielenMitParametern(urlStr, null, token); } + */ + /* public String abspielenMitRueckmeldung(String urlStr, String meldeUrlStr, String token) { return abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, token); } + */ /** * Einen Prozess zum Abspielen mit dem omxplayer starten @@ -128,17 +99,19 @@ <a href="https://github.com/huceke/omxplayer/blob/master/README.md"target="_blank">Aufstellung der Parameter</a>.Die Zeichenkette parameter enthaelt Eintraege wie z.B. * App.OPT_LOCAL_AUDIO oder App.OPT_HDMI_AUDIO. Mehrere Parameter werden mit App.BLANK getrennt. - * @param t * @param urlStr der URL der Quelle, die abgespielt werden soll * @param parameter die Parameter, die vom omxplayer angewendet werden sollen * @param token * @return Antwort des Servers */ + /* public String abspielenMitParametern(String urlStr, String parameter, String token) { return abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, token); } + */ - public String abspielenMitParameternUndRueckmeldung(String urlStr, String parameter, String meldeUrlStr, String token) { + @Override + public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { String antwort;// = null; try { //Object o = t.getAttribute(App.PI_PLAYER); @@ -149,7 +122,7 @@ StringBuilder kommando = new StringBuilder("omxplayer "); if(parameter != null) { kommando.append(parameter); - kommando.append(App.BLANK); + kommando.append(BLANK); } if(urlStr.startsWith("http")) { kommando.append(urlStr.replace(" ", "%20")); @@ -205,9 +178,9 @@ entfernen und gibt so das Objekt wieder frei fuer die Ausfuehrung weiterer Kommandos. * - * @param t * @return die Antwort des Servers */ + @Override public String tilgen() { String antwort; // = null; try { @@ -219,7 +192,7 @@ // t.removeAttribute(App.PI_PLAYER); antwort = "Es ist kein Player zum Beenden vorhanden, aber der Servlet-Kontext wurde bereinigt."; } else { - kommando(App.CMD_STOP); + kommando(CMD_STOP); //t.removeAttribute(PI_PLAYER); antwort = "Player gestoppt, Kontext bereinigt."; } @@ -233,11 +206,11 @@ /** * Dem laufenden Abspielprozess ein Kommando uebermitteln - * @param t * @param k das Kommando laut * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a> * @return die Antwort des Servers */ + @Override public String kommando(String k) { String antwort; // = null; try { @@ -254,7 +227,7 @@ Writer out = new BufferedWriter(new OutputStreamWriter(os)); out.write(k); out.flush(); - if(k.equals(App.CMD_STOP)) { + if(k.equals(CMD_STOP)) { out.close(); App.setPlayerProcess(null); //player_process.destroy(); -- Gitblit v1.9.3