App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
undisclosed
2023-01-07 2f2aa7d344d41c6d4083149b1ea6b41e7fb1f683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package de.uhilger.calypso.handler;
 
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;
 
/**
 *
 * @author ulli
 */
public abstract class BasePlayer implements Player {
  
  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) {
    logger.log(Level.INFO, 
              "Abspielen beendet, sende Meldung an {0}.", 
              new Object[]{meldeUrlStr});
    try {
      HttpURLConnection conn = (HttpURLConnection) new URL(meldeUrlStr).openConnection();
      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});
          /*
            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);
    } catch(IOException ex) {
      logger.log(Level.INFO, ex.getMessage(), ex);
    }
  }
 
  @Override
  public String tilgen() {
    logger.log(Level.INFO,"Player tilgen.");
    String antwort; // = null;
    try {
      Process o = App.getPlayerProcess();
      if(o == null) {
        antwort = "Es ist kein Player zum Beenden vorhanden.";
        //App.setPlayerProcess(null);
      } else {
        kommando(CMD_STOP); // setzt den Prozess der App auf null
        antwort = "Player gestoppt.";
      }
    } 
    catch(Exception ex) {
      antwort = "Fehler: " + ex.getMessage();
    }
    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;
  }
 
}