From d38b2158e0c48558188caa4b05fc99b24146a4eb Mon Sep 17 00:00:00 2001
From: ulrich
Date: Tue, 25 Mar 2025 08:41:36 +0000
Subject: [PATCH] Option Abspielen mit Untertitel-Datei hinzugefuegt
---
resources/skripte/seek | 4 ++
src/de/uhilger/calypso/actor/PlayActor.java | 51 +++++++++++++++++++++----
resources/calypso.properties | 4 ++
resources/skripte/pause | 3 +
4 files changed, 53 insertions(+), 9 deletions(-)
diff --git a/resources/calypso.properties b/resources/calypso.properties
new file mode 100644
index 0000000..bd8bdc9
--- /dev/null
+++ b/resources/calypso.properties
@@ -0,0 +1,4 @@
+port=9090
+player=mpv
+ctx=/calypso
+skripte=conf/skripte
diff --git a/resources/skripte/pause b/resources/skripte/pause
new file mode 100644
index 0000000..e478a96
--- /dev/null
+++ b/resources/skripte/pause
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo '{"command": ["cycle", "pause"]}' | socat - /tmp/mpvsocket
diff --git a/resources/skripte/seek b/resources/skripte/seek
new file mode 100644
index 0000000..b44b5cf
--- /dev/null
+++ b/resources/skripte/seek
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo '{"command": ["seek", '$1']}' | socat - /tmp/mpvsocket
+
diff --git a/src/de/uhilger/calypso/actor/PlayActor.java b/src/de/uhilger/calypso/actor/PlayActor.java
index 8ba4878..c9bb4cf 100644
--- a/src/de/uhilger/calypso/actor/PlayActor.java
+++ b/src/de/uhilger/calypso/actor/PlayActor.java
@@ -20,8 +20,8 @@
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;
@@ -44,25 +44,58 @@
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);
@@ -72,7 +105,7 @@
}
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;
--
Gitblit v1.9.3