App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
undisclosed
2023-01-01 ac496f2285d0f79b0124528edd636a732739829a
commit | author | age
cfe367 1 /*
U 2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
229976 6 package de.uhilger.calypso.handler;
cfe367 7
b16b54 8 import com.sun.net.httpserver.HttpExchange;
229976 9 import de.uhilger.calypso.App;
U 10 import de.uhilger.calypso.MeldeThread;
cfe367 11 import java.io.IOException;
b16b54 12 import java.util.Map;
cfe367 13 import java.util.logging.Level;
U 14 import java.util.logging.Logger;
15
16 /**
17  *
18  * @author ulrich
19  */
82594d 20 public class VLCPlayer extends BasePlayer implements Player {
cfe367 21   
U 22   private static final Logger logger = Logger.getLogger(VLCPlayer.class.getName());
b16b54 23
U 24   public static final String CMD_STOP = "s";
ac496f 25   public static final String DBUS_PREFIX = "dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2   org.mpris.MediaPlayer2.Player.";
U 26   public static final String CMD_PAUSE_RESUME = "PlayPause";
27   public static final String CMD_SEEK = "Seek";
cfe367 28
U 29   @Override
30   public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) {
31     String antwort;// = null;
32     try {
33       //Object o = t.getAttribute(App.PI_PLAYER);
34       Process o = App.getPlayerProcess();
35       if(o != null) {
36         tilgen();        
37       }
38       StringBuilder kommando = new StringBuilder("vlc --fullscreen ");
39       /*
40       if(parameter != null) {
41         kommando.append(parameter);
42         kommando.append(BLANK);
43       }
44       */
45       if(urlStr.startsWith("http")) {
46         kommando.append(urlStr.replace(" ", "%20"));
47         kommando.append("?t=");
48         kommando.append(token);
49       } else {
50         /*
51           //url z.B.: Filme/H/HEAT_D2.m4v
52         
53           hier muss noch der Pfad hinzugefuegt werden, unter 
54           dem auf dem raspi die Datenquelle via NFS eingebunden ist,
55           z.B. /media/mc/
56           dieser Teil des Pfades muss in pirc als Init-Parameter oder 
57           etwas aehnliches hinterlegt sein, weil es lokal zum jeweils 
58           verwendeten raspi gehoert
59   
60         */
61         
62         String pfad = App.getInitParameter("nfs-prefix");
63         kommando.append(pfad);
64         
65         kommando.append(urlStr);
66       }
82594d 67       kommando.append(" vlc://quit");
cfe367 68       logger.log(Level.FINE, "kommando: {0}", kommando.toString());
U 69       Process player_process = Runtime.getRuntime().exec(kommando.toString());
70       if(meldeUrlStr != null) {
71         MeldeThread mt = new MeldeThread();
72         mt.setProcess(player_process);
73         mt.lauscherHinzufuegen(this);
74         mt.setMeldeUrl(meldeUrlStr);
75         mt.start();
76       }
77       //servletContext.setAttribute(App.PI_PLAYER, player_process);
78       //t.setAttribute(App.PI_PLAYER, player_process);
79       App.setPlayerProcess(player_process);
80       //Runtime.getRuntime().exec("killall dbus-daemon");
81       antwort = "Abspielen gestartet, url: " + urlStr;
82     }
83     catch(IOException ex) {
84       antwort = "Fehler: " + ex.getMessage();
85     }
86     return antwort;
87   }
88
b16b54 89   
U 90   /*
cfe367 91   public String kommando(String k) {
b16b54 92     if(k.equalsIgnoreCase(VLCPlayer.CMD_STOP)) {
cfe367 93       Process p = App.getPlayerProcess();
U 94       p.destroy();
95       App.setPlayerProcess(null);
96     }
97     String antwort = "Kommando '" + k + "' ausgefuehrt.";
98     return antwort;
99   }
b16b54 100 */
U 101
102   @Override
103   public StringBuilder buildParams(HttpExchange t, Map m) {
104     return new StringBuilder();
105   }
cfe367 106
U 107
108 }