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