src/de/uhilger/calypso/Server.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/calypso/handler/DBusHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/calypso/handler/VLCPlayer.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/calypso/handler/VLCSeekHandler.java | ●●●●● patch | view | raw | blame | history |
src/de/uhilger/calypso/Server.java
@@ -31,6 +31,7 @@ import de.uhilger.calypso.handler.StopServerHandler; import de.uhilger.calypso.handler.VLCKillHandler; import de.uhilger.calypso.handler.VLCPlayer; import de.uhilger.calypso.handler.VLCSeekHandler; import java.io.IOException; import java.util.logging.Logger; import java.net.InetSocketAddress; @@ -81,6 +82,8 @@ server.createContext(contextName + "/playon", new PlayOnHandler(OMXPlayer.F_PLAY_ON)); } else if (playerType.equals(App.VLC_PLAYER)) { server.createContext(contextName + "/pause", new DBusHandler(VLCPlayer.CMD_PAUSE_RESUME)); //server.createContext(contextName + "/seek", new DBusHandler(VLCPlayer.CMD_SEEK)); server.createContext(contextName + "/seek", new VLCSeekHandler(VLCPlayer.CMD_SEEK)); server.createContext(contextName + "/stop", new VLCKillHandler()); } server.createContext(contextName + "/ui", new FileHandler(App.getInitParameter(App.IP_WWW_DATA))); src/de/uhilger/calypso/handler/DBusHandler.java
@@ -1,21 +1,30 @@ package de.uhilger.calypso.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.App; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * Obwohl ein laufendes VLC-Programm mit Tastaturbefehlen gesteuert * werden kann, funktioniert es nicht, dem Prozess einen Tastaturbefehl * wie z.B. S fuer Stopp ueber process.getOutputStream zu 'schreiben'. * wie z.B. S fuer Stopp ueber process.getOutputStream zu 'schreiben', * moeglicherweise, weil auf dem Raspberry Pi das VLC als Kommando- * zeilenprogramm ohne UI laeuft. Im Augenblick gelingt nur die Steuerung * ueber dbus. Hier muss noch geprueft werden, ob das auch mit Windows und * Mac OS klappt, was aber fuer einen Einsatz auf dem Raspberry Pi * nebensaechlich ist. * * Im Augenblick gelingt nur die Steuerung ueber dbus. * * Hier muss noch geprueft werden, ob das auch mit Windows und * Mac OS klappt. * Die Steuerung von VLC via dbus wiederum folgt dem Standard mpris * (Media Player Remote Interfacing Specification) von freedesktop.org, * der von zahlreichen Mediaplayern unterstuetzt wird. * * @author Ulrich Hilger */ public class DBusHandler extends CmdHandler { private static final Logger logger = Logger.getLogger(DBusHandler.class.getName()); public DBusHandler(String cmd) { super(cmd); @@ -25,7 +34,10 @@ protected String process(HttpExchange t, String params) { String antwort;// = null; try { StringBuilder kommando = new StringBuilder(cmd); StringBuilder kommando = new StringBuilder(); kommando.append(VLCPlayer.DBUS_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) { @@ -33,5 +45,4 @@ } return antwort; } } src/de/uhilger/calypso/handler/VLCPlayer.java
@@ -22,7 +22,9 @@ private static final Logger logger = Logger.getLogger(VLCPlayer.class.getName()); public static final String CMD_STOP = "s"; 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"; public static final String DBUS_PREFIX = "dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player."; public static final String CMD_PAUSE_RESUME = "PlayPause"; public static final String CMD_SEEK = "Seek"; @Override public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { src/de/uhilger/calypso/handler/VLCSeekHandler.java
New file @@ -0,0 +1,61 @@ /* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package de.uhilger.calypso.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.calypso.App; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:-5000000 * * @author Ulrich Hilger */ public class VLCSeekHandler extends CmdHandler { private static final Logger logger = Logger.getLogger(VLCSeekHandler.class.getName()); public VLCSeekHandler(String cmd) { super(cmd); } @Override protected String process(HttpExchange t, String params) { String antwort;// = null; try { StringBuilder kommando = new StringBuilder(); kommando.append(VLCPlayer.DBUS_PREFIX); kommando.append(cmd); kommando.append(params); 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; } @Override protected StringBuilder buildParams(HttpExchange t) { Player player = App.getPlayer(); StringBuilder params = super.buildParams(t); if(player instanceof VLCPlayer) { String pos = player.getParam(map, "pos"); if(!pos.isEmpty()) { params.append(" "); params.append("int64:"); params.append(pos); params.append("000000"); // Mikrosekunden } } logger.log(Level.FINER, "params: " + params.toString()); return params; } }