Runtime exec und mplayer (linux)

Status
Nicht offen für weitere Antworten.

lordcarlos

Mitglied
Guten Tag liebes Java-forum.
Ich bin der neue 🙂

Ich versuche den video player, mplyer, mit meinem Java Programm zu starten, aber da läuft was schief wenn ich Daten mit einem Leerzeichen öffnen will.

Folgendes Beispiel funktioniert:
Java:
Runtime rt = Runtime.getRuntime();
String befehl = "/usr/bin/mplayer /home/carlos/downloads/benny.mkv &";  //debug
System.out.println(befehl);  //debug
rt.exec(befehl); //video starten

Aber wie spiele ich jetzt Filme mit Leerzeichen im Namen ab?
Habe auch schon ein wenig erfolglos getestet.
Java:
String befehl = "/usr/bin/mplayer /home/carlos/downloads/Alex\\ Gaudino\\ -\\ Destination\\ Calabria.mkv &";
Java:
String befehl = "/usr/bin/mplayer '/home/carlos/downloads/Alex Gaudino - Destination Calabria.mkv' &";

Die Zeile dir mir System.out.println(befehl); gibt lässt sich Problemlos in der Konsole ausführen. Die Datei ist also vorhanden.
Ich würde jetzt gerne noch eine Fehlermeldung posten, aber Runtime unterdrückt ja den ganzen output von mplayer.

Mfg Lord-carlos
 
danke für die schnelle Antwort!

Java:
ProcessBuilder process = new ProcessBuilder();
process.command(befehl);

Das geht mit keinem der drei befehl Möglichkeiten.

Ich habe auch mal folgendes getestet:
Java:
Process process = new ProcessBuilder(befehl).start();
Geht auch nicht aber ich bekomme ein fehler.

Code:
SCHWERWIEGEND: null
java.io.IOException: Cannot run program "/usr/bin/mplayer /home/carlos/downloads/benny.mkv &": java.io.IOException: error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:474)
        at pronsort.Main.main(Main.java:42)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
        at java.lang.ProcessImpl.start(ProcessImpl.java:81)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:467)
        ... 1 more
Was aber komisch ist, weil die file ist da und der Befehl vom sout immer noch funktioniert.
 
Java:
command("/usr/bin/mplayer", "/home/carlos/downloads/benny.mkv");
 
Danke, das geht leider auch nicht. mplayer wird gar nicht erst gestartet.
Kann ich dem ProcessBuilder das er eine Fehlermeldung ausgeben soll?
 
Das Process Objekt hat einen ErrorStream und einen OutputStream. Beide solltest du lesen und ausgeben (oder mit redirectErrorStream beide in den OutputStream laufen lassen und nur diesen lesen).
 
ah, .start() vergessen.
Java:
ProcessBuilder process = new ProcessBuilder();
process.command("/usr/bin/mplayer", "/home/carlos/downloads/benny.mkv").start();
Jetzt geht wenigsten das benny video wieder. Die anderen gehen immer noch nicht. Ich werde mal weiter fummeln.
 
Ich habe jetzt ein wenig umgestellt, und auch ein guten code als Vorlage gefunden:
http://www.avpresentations.com/code/java_mplayer_control_example.txt
Code:
    static InputStream is;
    static OutputStream os;
    static InputStreamReader isr;
    static OutputStreamWriter osw;
    static BufferedReader br;
    static BufferedWriter bw;
    static PrintWriter pw;
    static Process process;
etc.

Java:
                String datei = "/home/carlos/downloads/Alex\\ Gaudino\\ -\\ Destination\\ Calabria.mkv";
                String datei2 = "/'/home/carlos/downloads/Alex Gaudino - Destination Calabria.mkv";
                String datei3 = "/home/carlos/downloads/benny.mkv";
                //rt.exec(befehl); //video starten
                
                //ProcessBuilder process = new ProcessBuilder();
                //process.command("/usr/bin/mplayer", datei3).start();
                
                process = new ProcessBuilder("/usr/bin/mplayer", datei2).start();
                
                is = process.getInputStream();
                os = process.getOutputStream();
                isr = new InputStreamReader(is);
                osw = new OutputStreamWriter(os);
                br = new BufferedReader(isr);
                bw = new BufferedWriter(osw);
                pw = new PrintWriter(bw);
                String line;

                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }

und jetzt guck dir doch mal den output an -.-

Code:
MPlayer dev-SVN-r29170129 audio & 259 video codecs

Playing /'/home/carlos/downloads/Alex Gaudino - Destination Calabria.mkv.


Exiting... (End of file)

Was soll das denn jetzt? ;(
 
Huch? Wie ist das denn darein gekommen? Das tut mir leid, habe ich wohl übersehen.
nach ein wenig googeln habe ich auch das hier gefunden. Leerzeichen in cmd eingabe - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe

Java:
String[] play = {"/usr/bin/mplayer", "/home/carlos/downloads/Alex Gaudino - Destination Calabria.mkv"};
process = new ProcessBuilder(play).start();

Das geht erste Sahne. :toll:

Danke an deine Hilfe! Nettes forum, weiter so.

Mfg Lord-carlos
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben