src/de/uhilger/avdirektor/App.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/Server.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/AbstractHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/CmdHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/OMXPlayer.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/PlayHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/Player.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/SeekHandler.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/avdirektor/handler/VLCPlayer.java | ●●●●● patch | view | raw | blame | history |
src/de/uhilger/avdirektor/App.java
@@ -18,6 +18,9 @@ package de.uhilger.avdirektor; import de.uhilger.avdirektor.handler.OMXPlayer; import de.uhilger.avdirektor.handler.Player; import de.uhilger.avdirektor.handler.VLCPlayer; import java.io.IOException; import java.util.HashMap; import java.util.logging.Level; @@ -45,9 +48,15 @@ public static final String IP_PORT = "port"; public static final String IP_WWW_DATA = "www-data"; public static final String IP_NFS_PREFIX = "nfs-prefix"; public static final String IP_PLAYER = "player"; public static final String VLC_PLAYER = "vlc"; public static final String OMX_PLAYER = "omx"; private static HashMap initParams; private static Process playerproc; private static Player player; /** * @param args the command line arguments @@ -59,6 +68,15 @@ initParams.put(argParts[0], argParts[1]); } String playerType = getInitParameter(IP_PLAYER); switch(playerType) { case VLC_PLAYER: player = new VLCPlayer(); break; case OMX_PLAYER: player = new OMXPlayer(); break; } Server server = new Server(Integer.parseInt(getInitParameter(IP_PORT))); try { server.start(); @@ -87,4 +105,15 @@ public static void setPlayerProcess(Process p) { playerproc = p; } public static Player getPlayer() { return player; } public static void setPlayer(Player pl) { player = pl; } } src/de/uhilger/avdirektor/Server.java
@@ -24,8 +24,10 @@ import de.uhilger.avdirektor.handler.OMXPlayer; import de.uhilger.avdirektor.handler.PingHandler; import de.uhilger.avdirektor.handler.PlayHandler; import de.uhilger.avdirektor.handler.Player; import de.uhilger.avdirektor.handler.SeekHandler; import de.uhilger.avdirektor.handler.StopServerHandler; import de.uhilger.avdirektor.handler.VLCPlayer; import java.io.IOException; import java.util.logging.Logger; import java.net.InetSocketAddress; @@ -39,7 +41,6 @@ private static final Logger logger = Logger.getLogger(Server.class.getName()); private int port; public Server(int port) { @@ -64,6 +65,6 @@ //server.setExecutor(null); // creates a default executor server.setExecutor(Executors.newFixedThreadPool(20)); server.start(); } } } src/de/uhilger/avdirektor/handler/AbstractHandler.java
@@ -32,7 +32,7 @@ * * @author ulrich */ public abstract class AbstractHandler extends OMXPlayer implements HttpHandler { public abstract class AbstractHandler implements HttpHandler { private static final Logger logger = Logger.getLogger(AbstractHandler.class.getName()); @@ -119,7 +119,6 @@ }); buf.append(antwort); return buf.toString(); } } } src/de/uhilger/avdirektor/handler/CmdHandler.java
@@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -35,7 +36,7 @@ } protected String process(HttpExchange t, String params) { String antwort = this.kommando(cmd); String antwort = App.getPlayer().kommando(cmd); logger.log(Level.FINE, antwort); return antwort; } src/de/uhilger/avdirektor/handler/OMXPlayer.java
@@ -41,42 +41,38 @@ * * @author ulrich */ public abstract class OMXPlayer implements ProzessLauscher { public class OMXPlayer implements Player , ProzessLauscher { private static final Logger logger = Logger.getLogger(OMXPlayer.class.getName()); public static final String CMD_STOP = "q"; public static final String BLANK = " "; public static final String CMD_DEC_SPEED = "1"; public static final String CMD_INC_SPEED = "2"; public static final String CMD_PREV_AUDIO = "j"; public static final String CMD_NEXT_AUDIO = "k"; public static final String CMD_PREV_CHAPTER = "i"; public static final String CMD_NEXT_CHAPTER = "o"; public static final String CMD_PREV_SUB = "n"; public static final String CMD_NEXT_SUB = "m"; public static final String CMD_TOGGLE_SUB = "s"; public static final String CMD_PAUSE_RESUME = "p"; public static final String CMD_DEC_VOL = "-"; public static final String CMD_INC_SPEED = "2"; public static final String CMD_INC_VOL = "+"; public static final String PFEIL_LINKS = "5b44"; public static final String PFEIL_RECHTS = "5b43"; public static final String PFEIL_HERAUF = "5b41"; public static final String PFEIL_HERUNTER = "5b42"; public static final String SP_RUECK_30 = "rueck30"; public static final String SP_VOR_30 = "rueck30"; public static final String SP_VOR_600 = "vor600"; public static final String SP_RUECK_600 = "rueck600"; public static final String OPT_LOCAL_AUDIO = "-o%20local"; public static final String OPT_HDMI_AUDIO = "-o%20hdmi"; public static final String CMD_NEXT_AUDIO = "k"; public static final String CMD_NEXT_CHAPTER = "o"; public static final String CMD_NEXT_SUB = "m"; public static final String CMD_PAUSE_RESUME = "p"; public static final String CMD_PREV_AUDIO = "j"; public static final String CMD_PREV_CHAPTER = "i"; public static final String CMD_PREV_SUB = "n"; public static final String CMD_STOP = "q"; public static final String CMD_TOGGLE_SUB = "s"; public static final String F_PING = "ping"; public static final String F_PLAY = "play"; public static final String F_SEEK = "seek"; public static final String F_PING = "ping"; public static final String OPT_HDMI_AUDIO = "-o%20hdmi"; public static final String OPT_LOCAL_AUDIO = "-o%20local"; public static final String PFEIL_HERAUF = "5b41"; public static final String PFEIL_HERUNTER = "5b42"; public static final String PFEIL_LINKS = "5b44"; public static final String PFEIL_RECHTS = "5b43"; public static final String SP_RUECK_30 = "rueck30"; public static final String SP_RUECK_600 = "rueck600"; public static final String SP_VOR_30 = "rueck30"; public static final String SP_VOR_600 = "vor600"; public static final String BLANK = " "; /** * Einen Prozess zum Abspielen mit dem omxplayer starten @@ -114,6 +110,7 @@ } */ @Override public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { String antwort;// = null; try { @@ -183,6 +180,7 @@ * * @return die Antwort des Servers */ @Override public String tilgen() { String antwort; // = null; try { @@ -212,6 +210,7 @@ * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a> * @return die Antwort des Servers */ @Override public String kommando(String k) { String antwort; // = null; try { src/de/uhilger/avdirektor/handler/PlayHandler.java
@@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -52,7 +53,7 @@ @Override protected String process(HttpExchange t, String params) { String antwort = abspielen( String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; src/de/uhilger/avdirektor/handler/Player.java
New file @@ -0,0 +1,77 @@ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.uhilger.avdirektor.handler; import de.uhilger.avdirektor.ProzessLauscher; /** * * @author ulrich */ public interface Player extends ProzessLauscher { /** * Einen Prozess zum Abspielen mit dem omxplayer starten * @param urlStr URL der Quelle, die abgespielt werden soll * @param token * @return Antwort des Servers */ /* public String abspielen(String urlStr, String token) { return abspielenMitParametern(urlStr, null, token); } */ /* public String abspielenMitRueckmeldung(String urlStr, String meldeUrlStr, String token) { return abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, token); } */ /** * Einen Prozess zum Abspielen mit dem omxplayer starten * und Parameter uebergeben.Moegliche Parameter fuer das Abspielen mit dem omxplayer beschreibt die Seite <a href="https://github.com/huceke/omxplayer/blob/master/README.md"target="_blank">Aufstellung der Parameter</a>.Die Zeichenkette parameter enthaelt Eintraege wie z.B. * App.OPT_LOCAL_AUDIO oder App.OPT_HDMI_AUDIO. Mehrere Parameter werden mit App.BLANK getrennt. * @param urlStr der URL der Quelle, die abgespielt werden soll * @param parameter die Parameter, die vom omxplayer angewendet werden sollen * @param token * @return Antwort des Servers */ /* public String abspielenMitParametern(String urlStr, String parameter, String token) { return abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, token); } */ String abspielen(String urlStr, String parameter, String meldeUrlStr, String token); /** * Dem laufenden Abspielprozess ein Kommando uebermitteln * @param k das Kommando laut * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a> * @return die Antwort des Servers */ String kommando(String k); /* ------ Implementierung ProzessLauscher ----------------- */ void prozessBeendet(String meldeUrlStr); /** * Einen eventuell laufenden Abspielprozess beenden und den * Servlet-Kontext bereinigen.Diese Methode kann auch verwendet werden, wenn es beim normalen Abspielen zu Fehlern kommt und womoeglich der Servlet-Kontext noch eine Referenz zu einem Abspielprozess enthaelt, die nicht mehr aktuell ist. * * Mit der Methode tilgen kann man eine solche Referenz entfernen und gibt so das Objekt wieder frei fuer die Ausfuehrung weiterer Kommandos. * * @return die Antwort des Servers */ String tilgen(); } src/de/uhilger/avdirektor/handler/SeekHandler.java
@@ -19,6 +19,7 @@ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; import de.uhilger.avdirektor.App; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,7 +37,7 @@ @Override protected String process(HttpExchange t, String params) { String antwort = abspielen( String antwort = App.getPlayer().abspielen( getParam(map, "titel"), params, getParam(map, "r"), "1"); logger.log(Level.FINE, antwort); return antwort; src/de/uhilger/avdirektor/handler/VLCPlayer.java
New file @@ -0,0 +1,103 @@ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.uhilger.avdirektor.handler; import de.uhilger.avdirektor.App; import de.uhilger.avdirektor.MeldeThread; import static de.uhilger.avdirektor.handler.OMXPlayer.BLANK; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author ulrich */ public class VLCPlayer implements Player { private static final Logger logger = Logger.getLogger(VLCPlayer.class.getName()); @Override public String abspielen(String urlStr, String parameter, String meldeUrlStr, String token) { String antwort;// = null; try { //Object o = t.getAttribute(App.PI_PLAYER); Process o = App.getPlayerProcess(); if(o != null) { tilgen(); } StringBuilder kommando = new StringBuilder("vlc --fullscreen "); /* if(parameter != null) { kommando.append(parameter); kommando.append(BLANK); } */ if(urlStr.startsWith("http")) { kommando.append(urlStr.replace(" ", "%20")); kommando.append("?t="); kommando.append(token); } else { /* //url z.B.: Filme/H/HEAT_D2.m4v hier muss noch der Pfad hinzugefuegt werden, unter dem auf dem raspi die Datenquelle via NFS eingebunden ist, z.B. /media/mc/ dieser Teil des Pfades muss in pirc als Init-Parameter oder etwas aehnliches hinterlegt sein, weil es lokal zum jeweils verwendeten raspi gehoert */ String pfad = App.getInitParameter("nfs-prefix"); kommando.append(pfad); kommando.append(urlStr); } logger.log(Level.FINE, "kommando: {0}", kommando.toString()); Process player_process = Runtime.getRuntime().exec(kommando.toString()); if(meldeUrlStr != null) { MeldeThread mt = new MeldeThread(); mt.setProcess(player_process); mt.lauscherHinzufuegen(this); mt.setMeldeUrl(meldeUrlStr); mt.start(); } //servletContext.setAttribute(App.PI_PLAYER, player_process); //t.setAttribute(App.PI_PLAYER, player_process); App.setPlayerProcess(player_process); //Runtime.getRuntime().exec("killall dbus-daemon"); antwort = "Abspielen gestartet, url: " + urlStr; } catch(IOException ex) { antwort = "Fehler: " + ex.getMessage(); } return antwort; } @Override public String kommando(String k) { if(k.equalsIgnoreCase(OMXPlayer.CMD_STOP)) { Process p = App.getPlayerProcess(); p.destroy(); App.setPlayerProcess(null); } String antwort = "Kommando '" + k + "' ausgefuehrt."; return antwort; } @Override public void prozessBeendet(String meldeUrlStr) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public String tilgen() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }