|  |  | 
 |  |  |  | 
 |  |  | import de.uhilger.calypso.MeldeThread; | 
 |  |  | import de.uhilger.calypso.Rueckmelder; | 
 |  |  | import de.uhilger.calypso.http.Server; | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.logging.Level; | 
 |  |  | import java.util.logging.Logger; | 
 |  |  | 
 |  |  | public class PlayActor { | 
 |  |  |  | 
 |  |  |   public Process run(Map parameter) { | 
 |  |  |     Logger logger = Logger.getLogger(PlayActor.class.getName()); | 
 |  |  |     String meldeUrlStr = null; | 
 |  |  |     Object o = parameter.get("r"); | 
 |  |  |     if (o instanceof String) { | 
 |  |  |       meldeUrlStr = (String) o; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     StringBuilder kommando = new StringBuilder(); | 
 |  |  |     //StringBuilder kommando = new StringBuilder(); | 
 |  |  |     ArrayList<String> kommando = new ArrayList<>(); | 
 |  |  |     o = parameter.get("titel"); | 
 |  |  |     if (o instanceof String) { | 
 |  |  |       String titel = (String) o; | 
 |  |  |       kommando.append("mpv --input-ipc-server=/tmp/mpvsocket --no-terminal --no-sub "); | 
 |  |  |       if (titel.toLowerCase().endsWith(".mp3")) { | 
 |  |  |         kommando.append("--vo=null "); | 
 |  |  |       //kommando.append("mpv --input-ipc-server=/tmp/mpvsocket --no-terminal --no-sub "); | 
 |  |  |       kommando.add("mpv"); | 
 |  |  |       kommando.add("--input-ipc-server=/tmp/mpvsocket"); | 
 |  |  |       kommando.add("--no-terminal"); | 
 |  |  |        | 
 |  |  |       /* | 
 |  |  |         wenn eine Untertitel-Datei verwendet werden soll, kommt von Tango | 
 |  |  |         &sub=on im Abspiel-URL zu Calypso. | 
 |  |  |        | 
 |  |  |         Calypso muss das umsetzen zu --sub-file=[Name des Videos mit Endung .srt],  | 
 |  |  |         was voraussetzt, dass die gewuenschten Untertitel auf dem Server stets  | 
 |  |  |         in einer Datei vorliegen, die so heisst wie das Video und die Endung .srt hat. | 
 |  |  |        | 
 |  |  |         Kommt von Tango der Abspiel-URL ohne den Zusatz &sub=on, muss stattdessen  | 
 |  |  |         die Untertitel-Anzeige von mpv ausgeschaltet werden, damit nicht unkontrolliert  | 
 |  |  |         irgendwelche Untertitel ausgegeben werden. Der Parameter fuer mpv lautet  | 
 |  |  |         dann --no-sub | 
 |  |  |       */ | 
 |  |  |        | 
 |  |  |       if(parameter.get("sub") != null) { | 
 |  |  |         StringBuilder subFileStr = new StringBuilder(); | 
 |  |  |         logger.log(Level.FINEST, "titel: {0}", titel); | 
 |  |  |         subFileStr.append("--sub-file="); | 
 |  |  |         subFileStr.append(titel.substring(0, titel.lastIndexOf("."))); | 
 |  |  |         subFileStr.append(".srt"); | 
 |  |  |         kommando.add(subFileStr.toString()); | 
 |  |  |         logger.log(Level.FINEST, "subFileStr: {0}", subFileStr.toString()); | 
 |  |  |       } else {       | 
 |  |  |         kommando.add("--no-sub"); | 
 |  |  |       } | 
 |  |  |       kommando.append(titel); | 
 |  |  |       Logger.getLogger(PlayActor.class.getName()).log(Level.FINE, kommando.toString()); | 
 |  |  |       if (titel.toLowerCase().endsWith(".mp3")) { | 
 |  |  |         //kommando.append("--vo=null "); | 
 |  |  |         kommando.add("--vo=null"); | 
 |  |  |       } | 
 |  |  |       //kommando.append(titel); | 
 |  |  |       kommando.add(titel); | 
 |  |  |       logger.log(Level.FINE, kommando.toString()); | 
 |  |  |       Process player_process; | 
 |  |  |       try { | 
 |  |  |         player_process = Runtime.getRuntime().exec(kommando.toString()); | 
 |  |  |         player_process = Runtime.getRuntime().exec(kommando.toArray(String[]::new)); | 
 |  |  |         if (meldeUrlStr != null) { | 
 |  |  |           MeldeThread mt = new MeldeThread(); | 
 |  |  |           mt.setProcess(player_process); | 
 |  |  | 
 |  |  |         } | 
 |  |  |         return player_process; | 
 |  |  |       } catch (IOException ex) { | 
 |  |  |         Logger logger = Logger.getLogger(PlayActor.class.getName()); | 
 |  |  |         logger = Logger.getLogger(PlayActor.class.getName()); | 
 |  |  |         logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); | 
 |  |  |         ex.printStackTrace(); | 
 |  |  |         return null; |