Ich habe diesen Thread bereits gesehen, aber ich habe immer noch ein Problem: starting vlc player in java Es scheint, die Java-Bindungen für VLC sind nicht mehr aktiv entwickelt und unterstützen nicht alles in der Befehlszeile sowieso möglich.Starten Sie VLC in Java und verbinden Sie es über RC-Schnittstelle
Mit dem folgenden Code kann ich VLC nicht aus einer Java-Anwendung auf Mac OS 10.5.8 (Java 1.6) starten und dann über die RC-Schnittstelle über das Terminal oder eine andere Java-Anwendung eine Verbindung zu ihm herstellen.
public class Main {
public static void main(String[] args) {
String s = null;
try {
//Process p = Runtime.getRuntime().exec("/Applications/VLC.app/Contents/MacOS/VLC -I telnet --telnet-host=localhost:4442 -I rc --rc-host=localhost:4444");
//Process p = Runtime.getRuntime().exec("/Applications/VLC.app/Contents/MacOS/VLC -I rc --rc-host=localhost:4444");
//ProcessBuilder pb = new ProcessBuilder("/Applications/VLC.app/Contents/MacOS/VLC","-I rc","--rc-host=localhost:4444");
ProcessBuilder pb = new ProcessBuilder("/Applications/VLC.app/Contents/MacOS/VLC","-IRC","--rc-host=localhost:4444");
Process p = pb.start();
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), false);
StreamGobbler inputGobbler = new StreamGobbler(p.getInputStream(), false);
errorGobbler.start();
inputGobbler.start();
System.out.println("Waiting: \n"+p.waitFor());
System.out.println("All done here");
//p.destroy();
//System.exit(0);
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (Exception ie) {
ie.printStackTrace();
}
}
}
class StreamGobbler extends Thread {
InputStream is;
boolean discard;
StreamGobbler(InputStream is, boolean discard) {
this.is = is;
this.discard = discard;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ((line = br.readLine()) != null)
if(!discard)
System.out.println(line);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
} }
Hier ist die Java-Anwendung, die Apache Commons Net-Paket verwenden, das ich versuche, auf die obige App zu verbinden, die auf der gleichen Maschine laufen:
public class TelnetTest {
public static void main(String args[]) {
TelnetClient tl = new TelnetClient();
try {
tl.connect("localhost", 4444);
if(tl.isConnected()) {
System.out.println("Connected successfully!");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(tl.getOutputStream()));
bw.write("quit");
bw.flush();
} else {
System.err.println("Problem with connection");
}
} catch(Exception e) {
System.err.println("Telnet connection threw an exception: "+e.getMessage());
}
}
}
Die Letztere App funktioniert gut, wenn ich VLC mit den Befehlen der ersten App im Terminal starte. Ebenso kann ich keine Verbindung zur ersten App vom Terminal herstellen, indem ich "telnet localhost 4444" im Terminal verwende.
Der einzige Unterschied, den ich finden kann, ist in der Ausgabe von VLC. Wenn im Terminal läuft:
[0x2786e8] main interface error: no interface module matched "globalhotkeys,none"
[0x2786e8] main interface error: no suitable interface module
[0x201b28] main libvlc error: interface "globalhotkeys,none" initialization failed
Remote control interface initialized. Type `help' for help.
Wenn Sie über die Top-Java-Anwendung ausführen:
[0x4009178] main interface error: no interface module matched "globalhotkeys,none"
[0x4009178] main interface error: no suitable interface module
[0x2017a8] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x4009178] main interface error: no suitable interface module
[0x2017a8] main libvlc error: interface "default" initialization failed
Kann mir jemand helfen hier? Ich bin ratlos. Vielen Dank.
Für jeden, dies implementieren wollen, beachten Sie die "\ n" am Ende jedes Befehls. Beachten Sie außerdem, dass das Schließen des Ausgabestreams zum Herunterfahren der VLC-Instanz führt. Das waren zwei Dinge, die mich erwischt haben. –