App zur Steuerung des mpv Mediaplayers auf einem Raspberry Pi über HTTP
undisclosed
2022-12-31 b16b544a3982da609564491ac207e74c0e121c25
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";
25   public static final String CMD_PAUSE_RESUME = "dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2   org.mpris.MediaPlayer2.Player.PlayPause";
cfe367 26
U 27   @Override
28   public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) {
29     String antwort;// = null;
30     try {
31       //Object o = t.getAttribute(App.PI_PLAYER);
32       Process o = App.getPlayerProcess();
33       if(o != null) {
34         tilgen();        
35       }
36       StringBuilder kommando = new StringBuilder("vlc --fullscreen ");
37       /*
38       if(parameter != null) {
39         kommando.append(parameter);
40         kommando.append(BLANK);
41       }
42       */
43       if(urlStr.startsWith("http")) {
44         kommando.append(urlStr.replace(" ", "%20"));
45         kommando.append("?t=");
46         kommando.append(token);
47       } else {
48         /*
49           //url z.B.: Filme/H/HEAT_D2.m4v
50         
51           hier muss noch der Pfad hinzugefuegt werden, unter 
52           dem auf dem raspi die Datenquelle via NFS eingebunden ist,
53           z.B. /media/mc/
54           dieser Teil des Pfades muss in pirc als Init-Parameter oder 
55           etwas aehnliches hinterlegt sein, weil es lokal zum jeweils 
56           verwendeten raspi gehoert
57   
58         */
59         
60         String pfad = App.getInitParameter("nfs-prefix");
61         kommando.append(pfad);
62         
63         kommando.append(urlStr);
64       }
82594d 65       kommando.append(" vlc://quit");
cfe367 66       logger.log(Level.FINE, "kommando: {0}", kommando.toString());
U 67       Process player_process = Runtime.getRuntime().exec(kommando.toString());
68       if(meldeUrlStr != null) {
69         MeldeThread mt = new MeldeThread();
70         mt.setProcess(player_process);
71         mt.lauscherHinzufuegen(this);
72         mt.setMeldeUrl(meldeUrlStr);
73         mt.start();
74       }
75       //servletContext.setAttribute(App.PI_PLAYER, player_process);
76       //t.setAttribute(App.PI_PLAYER, player_process);
77       App.setPlayerProcess(player_process);
78       //Runtime.getRuntime().exec("killall dbus-daemon");
79       antwort = "Abspielen gestartet, url: " + urlStr;
80     }
81     catch(IOException ex) {
82       antwort = "Fehler: " + ex.getMessage();
83     }
84     return antwort;
85   }
86
b16b54 87   
U 88   /*
cfe367 89   public String kommando(String k) {
b16b54 90     if(k.equalsIgnoreCase(VLCPlayer.CMD_STOP)) {
cfe367 91       Process p = App.getPlayerProcess();
U 92       p.destroy();
93       App.setPlayerProcess(null);
94     }
95     String antwort = "Kommando '" + k + "' ausgefuehrt.";
96     return antwort;
97   }
b16b54 98 */
U 99
100   @Override
101   public StringBuilder buildParams(HttpExchange t, Map m) {
102     return new StringBuilder();
103   }
cfe367 104
U 105
106 }