From cfe3676d7c9667824c52bb5e5c782d4a9a89b672 Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 29 Mar 2021 19:16:44 +0000 Subject: [PATCH] VLCPlayer hinzugefuegt --- src/de/uhilger/avdirektor/handler/CmdHandler.java | 3 src/de/uhilger/avdirektor/handler/SeekHandler.java | 3 src/de/uhilger/avdirektor/Server.java | 5 src/de/uhilger/avdirektor/handler/PlayHandler.java | 3 src/de/uhilger/avdirektor/handler/Player.java | 77 +++++++++++++++ src/de/uhilger/avdirektor/handler/OMXPlayer.java | 53 +++++----- src/de/uhilger/avdirektor/App.java | 29 +++++ src/de/uhilger/avdirektor/handler/AbstractHandler.java | 5 src/de/uhilger/avdirektor/handler/VLCPlayer.java | 103 ++++++++++++++++++++ 9 files changed, 246 insertions(+), 35 deletions(-) diff --git a/src/de/uhilger/avdirektor/App.java b/src/de/uhilger/avdirektor/App.java index 917b31c..4831380 100644 --- a/src/de/uhilger/avdirektor/App.java +++ b/src/de/uhilger/avdirektor/App.java @@ -18,6 +18,9 @@ package de.uhilger.avdirektor; +import de.uhilger.avdirektor.handler.OMXPlayer; +import de.uhilger.avdirektor.handler.Player; +import de.uhilger.avdirektor.handler.VLCPlayer; import java.io.IOException; import java.util.HashMap; import java.util.logging.Level; @@ -45,9 +48,15 @@ public static final String IP_PORT = "port"; public static final String IP_WWW_DATA = "www-data"; public static final String IP_NFS_PREFIX = "nfs-prefix"; + public static final String IP_PLAYER = "player"; + public static final String VLC_PLAYER = "vlc"; + public static final String OMX_PLAYER = "omx"; + private static HashMap initParams; private static Process playerproc; + private static Player player; + /** * @param args the command line arguments @@ -59,6 +68,15 @@ initParams.put(argParts[0], argParts[1]); } + String playerType = getInitParameter(IP_PLAYER); + switch(playerType) { + case VLC_PLAYER: + player = new VLCPlayer(); + break; + case OMX_PLAYER: + player = new OMXPlayer(); + break; + } Server server = new Server(Integer.parseInt(getInitParameter(IP_PORT))); try { server.start(); @@ -87,4 +105,15 @@ public static void setPlayerProcess(Process p) { playerproc = p; } + + public static Player getPlayer() { + return player; + } + + public static void setPlayer(Player pl) { + player = pl; + } + + + } diff --git a/src/de/uhilger/avdirektor/Server.java b/src/de/uhilger/avdirektor/Server.java index e423e98..e768c81 100644 --- a/src/de/uhilger/avdirektor/Server.java +++ b/src/de/uhilger/avdirektor/Server.java @@ -24,8 +24,10 @@ import de.uhilger.avdirektor.handler.OMXPlayer; import de.uhilger.avdirektor.handler.PingHandler; import de.uhilger.avdirektor.handler.PlayHandler; +import de.uhilger.avdirektor.handler.Player; import de.uhilger.avdirektor.handler.SeekHandler; import de.uhilger.avdirektor.handler.StopServerHandler; +import de.uhilger.avdirektor.handler.VLCPlayer; import java.io.IOException; import java.util.logging.Logger; import java.net.InetSocketAddress; @@ -39,7 +41,6 @@ private static final Logger logger = Logger.getLogger(Server.class.getName()); - private int port; public Server(int port) { @@ -64,6 +65,6 @@ //server.setExecutor(null); // creates a default executor server.setExecutor(Executors.newFixedThreadPool(20)); server.start(); - } + } } diff --git a/src/de/uhilger/avdirektor/handler/AbstractHandler.java b/src/de/uhilger/avdirektor/handler/AbstractHandler.java index c480364..d85ba38 100644 --- a/src/de/uhilger/avdirektor/handler/AbstractHandler.java +++ b/src/de/uhilger/avdirektor/handler/AbstractHandler.java @@ -32,7 +32,7 @@ * * @author ulrich */ -public abstract class AbstractHandler extends OMXPlayer implements HttpHandler { +public abstract class AbstractHandler implements HttpHandler { private static final Logger logger = Logger.getLogger(AbstractHandler.class.getName()); @@ -119,7 +119,6 @@ }); buf.append(antwort); return buf.toString(); - } - + } } diff --git a/src/de/uhilger/avdirektor/handler/CmdHandler.java b/src/de/uhilger/avdirektor/handler/CmdHandler.java index 9892e84..4a96ec9 100644 --- a/src/de/uhilger/avdirektor/handler/CmdHandler.java +++ b/src/de/uhilger/avdirektor/handler/CmdHandler.java @@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; +import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -35,7 +36,7 @@ } protected String process(HttpExchange t, String params) { - String antwort = this.kommando(cmd); + String antwort = App.getPlayer().kommando(cmd); logger.log(Level.FINE, antwort); return antwort; } diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java index 7c0e407..991e12b 100644 --- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java +++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java @@ -41,42 +41,38 @@ * * @author ulrich */ -public abstract class OMXPlayer implements ProzessLauscher { +public class OMXPlayer implements Player , ProzessLauscher { private static final Logger logger = Logger.getLogger(OMXPlayer.class.getName()); - public static final String CMD_STOP = "q"; + public static final String BLANK = " "; public static final String CMD_DEC_SPEED = "1"; - public static final String CMD_INC_SPEED = "2"; - public static final String CMD_PREV_AUDIO = "j"; - public static final String CMD_NEXT_AUDIO = "k"; - public static final String CMD_PREV_CHAPTER = "i"; - public static final String CMD_NEXT_CHAPTER = "o"; - public static final String CMD_PREV_SUB = "n"; - public static final String CMD_NEXT_SUB = "m"; - public static final String CMD_TOGGLE_SUB = "s"; - public static final String CMD_PAUSE_RESUME = "p"; 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 PFEIL_LINKS = "5b44"; - public static final String PFEIL_RECHTS = "5b43"; - public static final String PFEIL_HERAUF = "5b41"; - public static final String PFEIL_HERUNTER = "5b42"; - - public static final String SP_RUECK_30 = "rueck30"; - public static final String SP_VOR_30 = "rueck30"; - public static final String SP_VOR_600 = "vor600"; - public static final String SP_RUECK_600 = "rueck600"; - - public static final String OPT_LOCAL_AUDIO = "-o%20local"; - public static final String OPT_HDMI_AUDIO = "-o%20hdmi"; - + 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 F_PING = "ping"; + 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"; - public static final String BLANK = " "; /** * Einen Prozess zum Abspielen mit dem omxplayer starten @@ -114,6 +110,7 @@ } */ + @Override public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { String antwort;// = null; try { @@ -183,6 +180,7 @@ * * @return die Antwort des Servers */ + @Override public String tilgen() { String antwort; // = null; try { @@ -212,6 +210,7 @@ * <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 { diff --git a/src/de/uhilger/avdirektor/handler/PlayHandler.java b/src/de/uhilger/avdirektor/handler/PlayHandler.java index d201d48..61658bd 100644 --- a/src/de/uhilger/avdirektor/handler/PlayHandler.java +++ b/src/de/uhilger/avdirektor/handler/PlayHandler.java @@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; +import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -52,7 +53,7 @@ @Override protected String process(HttpExchange t, String params) { - String antwort = abspielen( + String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; diff --git a/src/de/uhilger/avdirektor/handler/Player.java b/src/de/uhilger/avdirektor/handler/Player.java new file mode 100644 index 0000000..f665b3a --- /dev/null +++ b/src/de/uhilger/avdirektor/handler/Player.java @@ -0,0 +1,77 @@ +/* + * 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. + */ +package de.uhilger.avdirektor.handler; + +import de.uhilger.avdirektor.ProzessLauscher; + +/** + * + * @author ulrich + */ +public interface Player extends ProzessLauscher { + + /** + * Einen Prozess zum Abspielen mit dem omxplayer starten + * @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 + * und Parameter uebergeben.Moegliche Parameter fuer das Abspielen mit dem omxplayer + beschreibt die Seite + <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 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); + } + */ + String abspielen(String urlStr, String parameter, String meldeUrlStr, String token); + + /** + * 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 + */ + String kommando(String k); + + /* ------ Implementierung ProzessLauscher ----------------- */ + void prozessBeendet(String meldeUrlStr); + + /** + * Einen eventuell laufenden Abspielprozess beenden und den + * Servlet-Kontext bereinigen.Diese Methode kann auch verwendet werden, wenn es beim normalen + Abspielen zu Fehlern kommt und womoeglich der Servlet-Kontext noch + eine Referenz zu einem Abspielprozess enthaelt, die nicht mehr + aktuell ist. + * + * Mit der Methode tilgen kann man eine solche Referenz + entfernen und gibt so das Objekt wieder frei fuer die Ausfuehrung + weiterer Kommandos. + * + * @return die Antwort des Servers + */ + String tilgen(); + +} diff --git a/src/de/uhilger/avdirektor/handler/SeekHandler.java b/src/de/uhilger/avdirektor/handler/SeekHandler.java index 8d2e5d6..500fce8 100644 --- a/src/de/uhilger/avdirektor/handler/SeekHandler.java +++ b/src/de/uhilger/avdirektor/handler/SeekHandler.java @@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; +import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,7 +37,7 @@ @Override protected String process(HttpExchange t, String params) { - String antwort = abspielen( + String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; diff --git a/src/de/uhilger/avdirektor/handler/VLCPlayer.java b/src/de/uhilger/avdirektor/handler/VLCPlayer.java new file mode 100644 index 0000000..95a615e --- /dev/null +++ b/src/de/uhilger/avdirektor/handler/VLCPlayer.java @@ -0,0 +1,103 @@ +/* + * 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. + */ +package de.uhilger.avdirektor.handler; + +import de.uhilger.avdirektor.App; +import de.uhilger.avdirektor.MeldeThread; +import static de.uhilger.avdirektor.handler.OMXPlayer.BLANK; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author ulrich + */ +public class VLCPlayer implements Player { + + private static final Logger logger = Logger.getLogger(VLCPlayer.class.getName()); + + @Override + public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { + String antwort;// = null; + try { + //Object o = t.getAttribute(App.PI_PLAYER); + Process o = App.getPlayerProcess(); + if(o != null) { + tilgen(); + } + StringBuilder kommando = new StringBuilder("vlc --fullscreen "); + /* + if(parameter != null) { + kommando.append(parameter); + kommando.append(BLANK); + } + */ + if(urlStr.startsWith("http")) { + kommando.append(urlStr.replace(" ", "%20")); + kommando.append("?t="); + kommando.append(token); + } else { + /* + //url z.B.: Filme/H/HEAT_D2.m4v + + hier muss noch der Pfad hinzugefuegt werden, unter + dem auf dem raspi die Datenquelle via NFS eingebunden ist, + z.B. /media/mc/ + dieser Teil des Pfades muss in pirc als Init-Parameter oder + etwas aehnliches hinterlegt sein, weil es lokal zum jeweils + verwendeten raspi gehoert + + */ + + String pfad = App.getInitParameter("nfs-prefix"); + kommando.append(pfad); + + kommando.append(urlStr); + } + logger.log(Level.FINE, "kommando: {0}", kommando.toString()); + Process player_process = Runtime.getRuntime().exec(kommando.toString()); + if(meldeUrlStr != null) { + MeldeThread mt = new MeldeThread(); + mt.setProcess(player_process); + mt.lauscherHinzufuegen(this); + mt.setMeldeUrl(meldeUrlStr); + mt.start(); + } + //servletContext.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; + } + catch(IOException ex) { + antwort = "Fehler: " + ex.getMessage(); + } + return antwort; + } + + @Override + public String kommando(String k) { + if(k.equalsIgnoreCase(OMXPlayer.CMD_STOP)) { + Process p = App.getPlayerProcess(); + p.destroy(); + App.setPlayerProcess(null); + } + String antwort = "Kommando '" + k + "' ausgefuehrt."; + return antwort; + } + + @Override + public void prozessBeendet(String meldeUrlStr) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public String tilgen() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} -- Gitblit v1.9.3