From b16b544a3982da609564491ac207e74c0e121c25 Mon Sep 17 00:00:00 2001 From: undisclosed Date: Sat, 31 Dec 2022 16:09:31 +0000 Subject: [PATCH] VLC Basiskommandos play, pause, stop eingebaut --- src/de/uhilger/calypso/App.java | 2 src/de/uhilger/calypso/handler/DBusHandler.java | 35 +++++ src/de/uhilger/calypso/handler/AbstractHandler.java | 9 - src/de/uhilger/calypso/handler/SeekHandler.java | 12 + src/de/uhilger/calypso/handler/VLCKillHandler.java | 25 ++++ src/de/uhilger/calypso/Server.java | 58 +++++--- src/de/uhilger/calypso/handler/Player.java | 6 + src/de/uhilger/calypso/handler/OMXPlayer.java | 70 +++-------- src/de/uhilger/calypso/handler/VLCPlayer.java | 16 ++ src/de/uhilger/calypso/handler/BasePlayer.java | 51 ++++++++ src/de/uhilger/calypso/handler/PlayHandler.java | 18 ++ 11 files changed, 208 insertions(+), 94 deletions(-) diff --git a/src/de/uhilger/calypso/App.java b/src/de/uhilger/calypso/App.java index 1de8ffc..00ddfd1 100644 --- a/src/de/uhilger/calypso/App.java +++ b/src/de/uhilger/calypso/App.java @@ -87,7 +87,7 @@ server.setContextName(DEFAULT_CTX); } try { - server.start(); + server.start(playerType); } catch (IOException ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/src/de/uhilger/calypso/Server.java b/src/de/uhilger/calypso/Server.java index 6a11452..612ab3e 100644 --- a/src/de/uhilger/calypso/Server.java +++ b/src/de/uhilger/calypso/Server.java @@ -14,12 +14,13 @@ 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.calypso; import com.sun.net.httpserver.HttpServer; +import de.uhilger.calypso.handler.BasePlayer; import de.uhilger.calypso.handler.CmdHandler; +import de.uhilger.calypso.handler.DBusHandler; import de.uhilger.calypso.handler.FileHandler; import de.uhilger.calypso.handler.LogHandler; import de.uhilger.calypso.handler.OMXPlayer; @@ -28,58 +29,69 @@ import de.uhilger.calypso.handler.PlayOnHandler; import de.uhilger.calypso.handler.SeekHandler; import de.uhilger.calypso.handler.StopServerHandler; +import de.uhilger.calypso.handler.VLCKillHandler; +import de.uhilger.calypso.handler.VLCPlayer; import java.io.IOException; import java.util.logging.Logger; import java.net.InetSocketAddress; import java.util.concurrent.Executors; +import java.util.logging.Level; /** * * @author ulrich */ public class Server { - + private static final Logger logger = Logger.getLogger(Server.class.getName()); private int port; - + private String contextName; - + public Server(int port) { this.port = port; } - + public void setPort(int port) { this.port = port; } - + /** - * + * * @param contextName e.g. '/calypso' or '/cal' */ public void setContextName(String contextName) { this.contextName = contextName; } - - public void start() throws IOException { - logger.info("Server starting on port " + port); + + public void start(String playerType) throws IOException { + logger.log(Level.INFO, "Server starting on port {0}", port); HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); - server.createContext(contextName + "/play", new PlayHandler(OMXPlayer.F_PLAY)); - server.createContext(contextName + "/seek", new SeekHandler(OMXPlayer.F_SEEK)); - server.createContext(contextName + "/stop", new CmdHandler(OMXPlayer.CMD_STOP)); - server.createContext(contextName + "/pause", new CmdHandler(OMXPlayer.CMD_PAUSE_RESUME)); - server.createContext(contextName + "/vol-inc", new CmdHandler(OMXPlayer.CMD_INC_VOL)); - server.createContext(contextName + "/vol-dec", new CmdHandler(OMXPlayer.CMD_DEC_VOL)); - server.createContext(contextName + "/info", new CmdHandler(OMXPlayer.CMD_TOGGLE_INFO)); - server.createContext(contextName + "/ping", new PingHandler(OMXPlayer.F_PING)); - server.createContext(contextName + "/server/stop", new StopServerHandler()); - server.createContext(contextName + "/log", new LogHandler()); - server.createContext(contextName + "/playon", new PlayOnHandler(OMXPlayer.F_PLAY_ON)); + server.createContext(contextName + "/play", new PlayHandler(BasePlayer.F_PLAY)); + if (playerType.equals(App.OMX_PLAYER)) { + server.createContext(contextName + "/seek", new SeekHandler(OMXPlayer.F_SEEK)); + server.createContext(contextName + "/stop", new CmdHandler(OMXPlayer.CMD_STOP)); + server.createContext(contextName + "/pause", new CmdHandler(OMXPlayer.CMD_PAUSE_RESUME)); + server.createContext(contextName + "/vol-inc", new CmdHandler(OMXPlayer.CMD_INC_VOL)); + server.createContext(contextName + "/vol-dec", new CmdHandler(OMXPlayer.CMD_DEC_VOL)); + server.createContext(contextName + "/info", new CmdHandler(OMXPlayer.CMD_TOGGLE_INFO)); + server.createContext(contextName + "/log", new LogHandler()); + server.createContext(contextName + "/playon", new PlayOnHandler(OMXPlayer.F_PLAY_ON)); + } else if (playerType.equals(App.VLC_PLAYER)) { + server.createContext(contextName + "/play", new PlayHandler(BasePlayer.F_PLAY)); + //server.createContext(contextName + "/stop", new CmdHandler(VLCPlayer.CMD_STOP)); + server.createContext(contextName + "/pause", new DBusHandler(VLCPlayer.CMD_PAUSE_RESUME)); + server.createContext(contextName + "/stop", new VLCKillHandler()); + + } server.createContext(contextName + "/ui", new FileHandler(App.getInitParameter(App.IP_WWW_DATA))); + server.createContext(contextName + "/ping", new PingHandler(BasePlayer.F_PING)); + server.createContext(contextName + "/server/stop", new StopServerHandler()); //server.setExecutor(null); // creates a default executor server.setExecutor(Executors.newFixedThreadPool(20)); server.start(); - } + } } diff --git a/src/de/uhilger/calypso/handler/AbstractHandler.java b/src/de/uhilger/calypso/handler/AbstractHandler.java index 3a7a6d8..a46d368 100644 --- a/src/de/uhilger/calypso/handler/AbstractHandler.java +++ b/src/de/uhilger/calypso/handler/AbstractHandler.java @@ -73,15 +73,6 @@ /* --- --- */ - protected String getParam(Map map, String key) { - Object o = map.get(key); - if(o != null) { - return o.toString(); - } else { - return null; - } - } - /* Den Query-Teil einer URL in die Parameter zerlegen diff --git a/src/de/uhilger/calypso/handler/BasePlayer.java b/src/de/uhilger/calypso/handler/BasePlayer.java index 28a052d..19576a4 100644 --- a/src/de/uhilger/calypso/handler/BasePlayer.java +++ b/src/de/uhilger/calypso/handler/BasePlayer.java @@ -2,9 +2,14 @@ import de.uhilger.calypso.App; import static de.uhilger.calypso.handler.OMXPlayer.CMD_STOP; +import java.io.BufferedWriter; import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -16,6 +21,9 @@ private static final Logger logger = Logger.getLogger(BasePlayer.class.getName()); + public static final String F_PLAY = "play"; + public static final String F_PING = "ping"; + @Override public void prozessBeendet(String meldeUrlStr) { @@ -62,5 +70,46 @@ } return antwort; } - + + public String getParam(Map map, String key) { + Object o = map.get(key); + if(o != null) { + return o.toString(); + } else { + return null; + } + } + + /** + * Dem laufenden Abspielprozess ein Kommando uebermitteln + * @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 { + //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); + antwort = "Es wird nichts abgespielt dem ein Kommando gesendet werden kann."; + } else { + Process player_process = o; + OutputStream os = player_process.getOutputStream(); + Writer out = new BufferedWriter(new OutputStreamWriter(os)); + out.write(k); + out.flush(); + antwort = "Kommando '" + k + "' ausgefuehrt."; + } + } + catch(IOException ex) { + antwort = "Fehler: " + ex.getMessage(); + } + return antwort; + } + } diff --git a/src/de/uhilger/calypso/handler/DBusHandler.java b/src/de/uhilger/calypso/handler/DBusHandler.java new file mode 100644 index 0000000..fc61df4 --- /dev/null +++ b/src/de/uhilger/calypso/handler/DBusHandler.java @@ -0,0 +1,35 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package de.uhilger.calypso.handler; + +import com.sun.net.httpserver.HttpExchange; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author ulli + */ +public class DBusHandler extends CmdHandler { + + public DBusHandler(String cmd) { + super(cmd); + } + + @Override + protected String process(HttpExchange t, String params) { + String antwort;// = null; + try { + StringBuilder kommando = new StringBuilder(cmd); + Process player_process = Runtime.getRuntime().exec(kommando.toString()); + antwort = "Kommando ausgefuehrt: " + kommando; + } catch (IOException ex) { + antwort = "Fehler: " + ex.getMessage(); + } + return antwort; + } + +} diff --git a/src/de/uhilger/calypso/handler/OMXPlayer.java b/src/de/uhilger/calypso/handler/OMXPlayer.java index 10b869f..f012ad9 100644 --- a/src/de/uhilger/calypso/handler/OMXPlayer.java +++ b/src/de/uhilger/calypso/handler/OMXPlayer.java @@ -18,6 +18,7 @@ package de.uhilger.calypso.handler; +import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.App; import de.uhilger.calypso.MeldeThread; import de.uhilger.calypso.ProzessLauscher; @@ -30,6 +31,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -64,8 +66,6 @@ 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_PLAY_ON = "playon"; public static final String F_SEEK = "seek"; public static final String OPT_HDMI_AUDIO = "-o%20hdmi"; @@ -115,6 +115,23 @@ } return antwort; } + + @Override + public StringBuilder buildParams(HttpExchange t, Map map) { + 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 log = getParam(map, "log"); + if (log != null && log.equalsIgnoreCase("true")) { + params.append(" --genlog"); + } + return params; + } + /** * Einen eventuell laufenden Abspielprozess beenden und den @@ -149,55 +166,6 @@ return antwort; } */ - - /** - * Dem laufenden Abspielprozess ein Kommando uebermitteln - * @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 { - //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); - antwort = "Es wird nichts abgespielt dem ein Kommando gesendet werden kann."; - } else { - Process player_process = o; - OutputStream os = player_process.getOutputStream(); - Writer out = new BufferedWriter(new OutputStreamWriter(os)); - out.write(k); - out.flush(); - if(k.equals(CMD_STOP)) { - out.close(); - - /* - fuer den Fall, dass ein Stopp-Signal den Player nicht erreicht - oder dort nicht funktioniert, gibt es keine Moeglichkeit festzustellen, - dass der Player noch spielt. Damit in einem solchen Fall der Zeiger - auf den Abspielprozess nicht verloren geht, wird der Zeiger nicht - auf null gesetzt. - */ - - //App.setPlayerProcess(null); - //player_process.destroy(); - //player_process = null; - //t.setAttribute(App.PI_PLAYER, null); - //servletContext.removeAttribute(PI_PLAYER); - } - antwort = "Kommando '" + k + "' ausgefuehrt."; - } - } - catch(IOException ex) { - antwort = "Fehler: " + ex.getMessage(); - } - return antwort; - } /* ------ Implementierung ProzessLauscher ----------------- */ diff --git a/src/de/uhilger/calypso/handler/PlayHandler.java b/src/de/uhilger/calypso/handler/PlayHandler.java index 0c2b527..86b99b4 100644 --- a/src/de/uhilger/calypso/handler/PlayHandler.java +++ b/src/de/uhilger/calypso/handler/PlayHandler.java @@ -55,6 +55,16 @@ super(cmd); } + + @Override + protected StringBuilder buildParams(HttpExchange t) { + StringBuilder params = super.buildParams(t); + params.append(App.getPlayer().buildParams(t, map)); + return params; + } + + + /* protected StringBuilder buildParams(HttpExchange t) { StringBuilder params = super.buildParams(t); params.append("-o "); @@ -69,7 +79,8 @@ } return params; } - + */ + @Override protected String process(HttpExchange t, String params) { if (cmd.equalsIgnoreCase(OMXPlayer.F_PLAY)) { @@ -85,8 +96,9 @@ logger.log(Level.SEVERE, null, ex); } } - String antwort = App.getPlayer().abspielen( - getParam(map, "titel"), params, getParam(map, "r"), "1"); + Player player = App.getPlayer(); + String antwort = player.abspielen( + player.getParam(map, "titel"), params, player.getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; } diff --git a/src/de/uhilger/calypso/handler/Player.java b/src/de/uhilger/calypso/handler/Player.java index 70c7016..9808bcb 100644 --- a/src/de/uhilger/calypso/handler/Player.java +++ b/src/de/uhilger/calypso/handler/Player.java @@ -5,7 +5,9 @@ */ package de.uhilger.calypso.handler; +import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.ProzessLauscher; +import java.util.Map; /** * @@ -55,6 +57,10 @@ * @return die Antwort des Servers */ String kommando(String k); + + StringBuilder buildParams(HttpExchange t, Map m); + + String getParam(Map map, String key); /* ------ Implementierung ProzessLauscher ----------------- */ void prozessBeendet(String meldeUrlStr); diff --git a/src/de/uhilger/calypso/handler/SeekHandler.java b/src/de/uhilger/calypso/handler/SeekHandler.java index c230fce..9d3c255 100644 --- a/src/de/uhilger/calypso/handler/SeekHandler.java +++ b/src/de/uhilger/calypso/handler/SeekHandler.java @@ -37,8 +37,9 @@ @Override protected String process(HttpExchange t, String params) { - String antwort = App.getPlayer().abspielen( - getParam(map, "titel"), params, getParam(map, "r"), "1"); + Player player = App.getPlayer(); + String antwort = player.abspielen( + player.getParam(map, "titel"), params, player.getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; } @@ -55,9 +56,12 @@ Select the hotkey to use to swap paused state. */ protected StringBuilder buildParams(HttpExchange t) { + Player player = App.getPlayer(); StringBuilder params = super.buildParams(t); - params.append(" --pos "); - params.append(getParam(map, "pos")); + if(player instanceof OMXPlayer) { + params.append(" --pos "); + params.append(player.getParam(map, "pos")); + } return params; } diff --git a/src/de/uhilger/calypso/handler/VLCKillHandler.java b/src/de/uhilger/calypso/handler/VLCKillHandler.java new file mode 100644 index 0000000..34325f1 --- /dev/null +++ b/src/de/uhilger/calypso/handler/VLCKillHandler.java @@ -0,0 +1,25 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package de.uhilger.calypso.handler; + +import com.sun.net.httpserver.HttpExchange; +import de.uhilger.calypso.App; + +/** + * + * @author ulli + */ +public class VLCKillHandler extends AbstractHandler { + + @Override + protected String process(HttpExchange t, String params) { + Process p = App.getPlayerProcess(); + p.destroy(); + App.setPlayerProcess(null); + String antwort = "Player-Prozess beendet."; + return antwort; + } + +} diff --git a/src/de/uhilger/calypso/handler/VLCPlayer.java b/src/de/uhilger/calypso/handler/VLCPlayer.java index 849babb..82a495e 100644 --- a/src/de/uhilger/calypso/handler/VLCPlayer.java +++ b/src/de/uhilger/calypso/handler/VLCPlayer.java @@ -5,9 +5,11 @@ */ package de.uhilger.calypso.handler; +import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.App; import de.uhilger.calypso.MeldeThread; import java.io.IOException; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -18,6 +20,9 @@ public class VLCPlayer extends BasePlayer implements Player { private static final Logger logger = Logger.getLogger(VLCPlayer.class.getName()); + + public static final String CMD_STOP = "s"; + public static final String CMD_PAUSE_RESUME = "dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause"; @Override public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { @@ -79,9 +84,10 @@ return antwort; } - @Override + + /* public String kommando(String k) { - if(k.equalsIgnoreCase(OMXPlayer.CMD_STOP)) { + if(k.equalsIgnoreCase(VLCPlayer.CMD_STOP)) { Process p = App.getPlayerProcess(); p.destroy(); App.setPlayerProcess(null); @@ -89,6 +95,12 @@ String antwort = "Kommando '" + k + "' ausgefuehrt."; return antwort; } +*/ + + @Override + public StringBuilder buildParams(HttpExchange t, Map m) { + return new StringBuilder(); + } } -- Gitblit v1.9.3