App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
undisclosed
2023-01-06 098eefb772fa398997afeea9bef0cca4f22251f4
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
package de.uhilger.calypso.handler;
 
import com.sun.net.httpserver.HttpExchange;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 * Hier muss noch die Implementierung mit Unix Domain Sockets folgen,
 * sobald Java 16 fuer 64-bit Raspberry Pi 4 erhaeltlich ist.
 * 
 * Bis dahin wird hier (dirty trick) ein Shell Skript aufgerufen, 
 * das mit Hilfe des Tools socat das Kommando ausfuehrt. socat muss 
 * dafuer auf dem Raspberry Pi installiert sein.
 * 
 * Kommandos
 * 
 * pause: echo '{"command": ["cycle", "pause"]}' | socat - /tmp/mpvsocket
 * seek: echo '{"command": ["seek", '30']}' | socat - /tmp/mpvsocket
 * 
 * @author Ulrich Hilger
 */
public class SocketHandler extends CmdHandler {
  
  private static final Logger logger = Logger.getLogger(SocketHandler.class.getName());
 
  public SocketHandler(String cmd) {
    super(cmd);
  }
 
  @Override
  protected String process(HttpExchange t, String params) {
      String antwort;// = null;
    try {
      StringBuilder kommando = new StringBuilder();
      kommando.append(MPVPlayer.SOCK_PREFIX);
      kommando.append(cmd);
      logger.log(Level.FINE, "kommando: {0}", kommando.toString());
      Process player_process = Runtime.getRuntime().exec(kommando.toString());
      antwort = "Kommando ausgefuehrt: " + kommando;
    } catch (IOException ex) {
      antwort = "Fehler: " + ex.getMessage();
    }
    return antwort;
  }
}