App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
undisclosed
2023-01-06 669ad47b6e59b02bfc8acce0cdf4c74515226da0
commit | author | age
098eef 1 package de.uhilger.calypso.handler;
U 2
3 import com.sun.net.httpserver.HttpExchange;
4 import de.uhilger.calypso.App;
5 import de.uhilger.calypso.MeldeThread;
6 import java.io.IOException;
7 import java.util.Map;
8 import java.util.logging.Level;
9 import java.util.logging.Logger;
10
11 /**
12  *
13  * @author ulrich
14  */
15 public class MPVPlayer extends BasePlayer implements Player {
16   
17   private static final Logger logger = Logger.getLogger(MPVPlayer.class.getName());
18
19   /*
20 echo '{ "command": ["get_property", "playback-time"] }' | socat - /tmp/mpvsocket
21 {"data":190.482000,"error":"success"}
22
23 echo 'show-text ${playback-time}' | socat - /tmp/mpvsocket  
24   
25   { "command": ["set_property", "pause", true] }
26   { "error": "success" }
27   
28 {"command": ["cycle", "pause"]}  
29
30   */
31   public static final String SOCK_PREFIX = "";
32   public static final String CMD_PAUSE_RESUME = "pause";
33   public static final String CMD_SEEK = "seek";
34
35   @Override
36   public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) {
37     String antwort;// = null;
38     try {
39       //Object o = t.getAttribute(App.PI_PLAYER);
40       Process o = App.getPlayerProcess();
41       if(o != null) {
42         tilgen();        
43       }
44       StringBuilder kommando = new StringBuilder("mpv --input-ipc-server=/tmp/mpvsocket --no-terminal ");
669ad4 45       
U 46       /*
47       mpv versucht Musikstuecke mit Album-Bildern in den Metadaten als Video 
48       abzuspielen und bricht ab.
49       (diese Einstellung muss noch parametriert und erweitert werden)
50       */
51       if(urlStr.contains(".mp3")) {
52         kommando.append("--vo=null ");
53       }
098eef 54       /*
U 55       if(parameter != null) {
56         kommando.append(parameter);
57         kommando.append(BLANK);
58       }
59       */
60       if(urlStr.startsWith("http")) {
61         kommando.append(urlStr.replace(" ", "%20"));
62         kommando.append("?t=");
63         kommando.append(token);
64       } else {
65         /*
66           //url z.B.: Filme/H/HEAT_D2.m4v
67         
68           hier muss noch der Pfad hinzugefuegt werden, unter 
69           dem auf dem raspi die Datenquelle via NFS eingebunden ist,
70           z.B. /media/mc/
71           dieser Teil des Pfades muss in pirc als Init-Parameter oder 
72           etwas aehnliches hinterlegt sein, weil es lokal zum jeweils 
73           verwendeten raspi gehoert
74   
75         */
76         
77         String pfad = App.getInitParameter("nfs-prefix");
78         kommando.append(pfad);
79         
80         kommando.append(urlStr);
81       }
82       //kommando.append(" vlc://quit");
83       logger.log(Level.FINE, "kommando: {0}", kommando.toString());
84       Process player_process = Runtime.getRuntime().exec(kommando.toString());
85       if(meldeUrlStr != null) {
86         MeldeThread mt = new MeldeThread();
87         mt.setProcess(player_process);
88         mt.lauscherHinzufuegen(this);
89         mt.setMeldeUrl(meldeUrlStr);
90         mt.start();
91       }
92       //servletContext.setAttribute(App.PI_PLAYER, player_process);
93       //t.setAttribute(App.PI_PLAYER, player_process);
94       App.setPlayerProcess(player_process);
95       //Runtime.getRuntime().exec("killall dbus-daemon");
96       antwort = "Abspielen gestartet, url: " + urlStr;
97     }
98     catch(IOException ex) {
99       antwort = "Fehler: " + ex.getMessage();
100     }
101     return antwort;
102   }
103
104   
105   /*
106   public String kommando(String k) {
107     if(k.equalsIgnoreCase(VLCPlayer.CMD_STOP)) {
108       Process p = App.getPlayerProcess();
109       p.destroy();
110       App.setPlayerProcess(null);
111     }
112     String antwort = "Kommando '" + k + "' ausgefuehrt.";
113     return antwort;
114   }
115 */
116
117   @Override
118   public StringBuilder buildParams(HttpExchange t, Map m) {
119     return new StringBuilder();
120   }
121
122
123 }