From 2dd7a5b331b57db5c7aa5bef9540e3e198848060 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Thu, 01 Apr 2021 14:04:54 +0000
Subject: [PATCH] weiterspielen (erste Fassung fertig)

---
 src/de/uhilger/avdirektor/handler/OMXPlayer.java |   95 ++++++++++-------------------------------------
 1 files changed, 21 insertions(+), 74 deletions(-)

diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java
index 991e12b..d360e13 100644
--- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java
+++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java
@@ -22,12 +22,16 @@
 import de.uhilger.avdirektor.MeldeThread;
 import de.uhilger.avdirektor.ProzessLauscher;
 import java.io.BufferedWriter;
+import java.io.File;
 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.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -61,6 +65,7 @@
   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";
   public static final String OPT_LOCAL_AUDIO = "-o%20local";
@@ -73,81 +78,27 @@
   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 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);
-  }
-  */
-  
   @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("omxplayer ");
-      if(parameter != null) {
-        kommando.append(parameter);
-        kommando.append(BLANK);
-      }
+      List<String> kommando = new ArrayList();
+      kommando.add("omxplayer");
+      kommando.addAll(Arrays.asList(parameter.split(BLANK)));
       if(urlStr.startsWith("http")) {
-        kommando.append(urlStr.replace(" ", "%20"));
-        kommando.append("?t=");
-        kommando.append(token);
+        kommando.add(urlStr.replace(" ", "%20"));
       } 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);
-      }
+        kommando.add(App.getInitParameter("nfs-prefix") + urlStr);        
+      }      
+      logger.log(Level.FINE, "parameter: {0}", parameter);
       logger.log(Level.FINE, "kommando: {0}", kommando.toString());
-      Process player_process = Runtime.getRuntime().exec(kommando.toString());
+      ProcessBuilder pb = new ProcessBuilder(kommando);
+      pb.directory(new File(System.getProperty("omx.wd")));
+      Process player_process = pb.start();
       if(meldeUrlStr != null) {
         MeldeThread mt = new MeldeThread();
         mt.setProcess(player_process);
@@ -155,10 +106,7 @@
         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) {
@@ -184,16 +132,12 @@
   public String tilgen() {
     String antwort; // = null;
     try {
-      //Object o = t.getAttribute(App.PI_PLAYER);
       Process o = App.getPlayerProcess();
       if(o == null) {
-        //t.setAttribute(App.PI_PLAYER, null);
-        App.setPlayerProcess(null);
-        // t.removeAttribute(App.PI_PLAYER);
         antwort = "Es ist kein Player zum Beenden vorhanden, aber der Servlet-Kontext wurde bereinigt.";
+        App.setPlayerProcess(null);
       } else {
-        kommando(CMD_STOP);
-        //t.removeAttribute(PI_PLAYER);
+        kommando(CMD_STOP); // setzt den Prozess der App auf null
         antwort = "Player gestoppt, Kontext bereinigt.";
       }
     } 
@@ -253,7 +197,10 @@
       conn.setRequestMethod("GET");
       conn.connect();
       int status = conn.getResponseCode();
-      logger.log(Level.INFO, "Abspielen beendet, Meldung an {0} mit Statuscode {1} gesendet.", new Object[]{meldeUrlStr, status});
+      logger.log(Level.INFO, 
+              "Abspielen beendet, Meldung an {0} mit Statuscode {1} gesendet.", 
+              new Object[]{meldeUrlStr, status});
+      App.setPlayerProcess(null);
     } catch(IOException ex) {
       logger.log(Level.INFO, ex.getMessage(), ex);
     }

--
Gitblit v1.9.3