2010-09-22 19 views
6

Ich möchte ein Programm namens VLC in Java und steuern Sie es während der Ausführung, zum Beispiel wenn Benutzer auf Pause oder Schnellvorlauf-Taste, ich eine bestimmte geeignete Aktion. Ich betreiben VLC durch diesen Code:Wie VLC von Java zu steuern

 try{ 
      Runtime rt = Runtime.getRuntime(); 
      Process p = rt.exec(VLCProgramAddFile + " udp://@:" + listeningPort); 

      OutputStream out = p.getOutputStream(); 
      InputStream in = p.getInputStream(); 

      p.waitFor(); 
      System.out.println("End of VLC"); 
     } 
     catch (Exception e){ 
      System.out.println("error in running VLC"); 
     } 

Ich habe über Java-Bindungen gehört, aber ich weiß nicht, wie es für diesen Job nicht funktioniert.

Antwort

5

Sie suchen wahrscheinlich nach VLCJ, dies ist ein Java-Wrapper für VLC. Sie können VLC Media Player in eine Java-Anwendung einbetten und so alle Ihre persönlichen Steuerelemente hinzufügen.

(Sie beachten Sie, dass für Benutzeranwendungen ist es in Ordnung, aber die VLCJ Bibliothek ist nicht perfekt, man kann haben mehrere Probleme auftauchen.)

EDIT: Für mein Projekt, das ich gesehen habe Speicherlecks und Probleme mit lang laufenden Programmen (mehrere Instanzen für mehrere Stunden). Insbesondere funktionieren die mehreren Instanzen nicht in Kombination mit einigen Kompilierungsoptionen (die standardmäßig aktiviert sind).

+0

Danke, ich versuche zu lernen, wie VLCJ zu verwenden, aber gibt es eine Möglichkeit, diesen genannten Prozess durch In/Out-Streams in meinem Programm zu steuern? Die Verwendung von VLCJ ist besser oder ruft eine .exe-Datei auf, wie ich sie in meinem Programm verwendet habe. Bitte beachten Sie, dass das Steuern von Video während des Laufens für mich wichtig ist. – sajad

+0

Welche Art von Problemen? – Grodriguez

+1

@Sajad Ich habe nur Erfahrung mit VLCJ, es ist zumindest möglich zu starten/stoppen und von der Anwendung zu pausieren, aber ich denke, dass alle Befehle funktionieren. Ich habe keine Erfahrung mit der Verwendung der normalen VLC-GUI in Kombination mit Ihrer eigenen Anwendung. Ich denke, wenn Sie die Ausgabe in Ihre Anwendung einbetten möchten, benötigen Sie VLCJ. – Thirler

0

Je nachdem, was Sie letztlich erreichen möchten, sind vielleicht die gstreamer Java bindings einen Blick wert, der Ihnen eine sehr feinkörnige Kontrolle über die Wiedergabe geben wird. Und Sie können Conversions und alles tun. Sie haben auch eine minimalistische Video Player Beispielanwendung, mit der Sie beginnen können.

+0

Vielen Dank für Ihre gute Umschreibung! – sajad

+2

Verwenden Sie keinen Gstreamer. Das habe ich am Ende nach Jahren gemerkt, wie schwierig es für Crossplatform ist. WENN Sie in Linux sind, ist es in Ordnung. – YumYumYum

5

VLCj ist, was Sie nach ja - es ist im Wesentlichen eine gerade Java-Wrapper um libvlc. Wenn Sie es in Prozess verwenden (besonders wenn Sie mehrere Player in Prozess verwenden), sehen Sie manchmal VM-Abstürze - das ist nicht der Fehler von VLCJ, sondern libvlc und die nativen Bibliotheken, die darunter verwendet werden, haben einige subtile Threading-Fehler, die diese Probleme aufzeigen.

Sie können es zuverlässig mit mehreren Instanzen arbeiten, aber dazu müssen Sie es außerhalb des Prozesses verwenden. Siehe here für meine ersten Versuche, dies zu tun. Es ist ein bisschen Arbeit zu installieren, aber sobald es läuft, scheinen die Dinge sehr gut zu funktionieren.

+0

Ich habe diese sporadischen JVM-Abstürze mit laufendem VLCj erlebt. Verschwinden diese Probleme, wenn VLCj nicht mehr läuft? Ich versuche gerade, VLCj aus dem Prozess zu bringen, aber ich möchte nicht zu den Bemühungen gehen, wenn das Endergebnis auch unzuverlässig ist. – Felix

+0

@nissemand Wenn Sie eine VLCJ-Instanz in Bearbeitung ausführen und es in Ordnung ist, aber mehrere Instanzen sporadisch abstürzen, dann ja - das sollte diese Probleme verschwinden lassen. Wenn nur eine Instanz abstürzt, liegt das Problem wahrscheinlich anderswo. – berry120

+1

Ich sehe. Ich habe nur eine Instanz auf einmal ausgeführt, aber viele nacheinander. Ich werde versuchen, sie aus dem Prozess zu bewegen und sehen, was passiert. Danke für die Hilfe berry120! – Felix