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