2010-09-22 14 views
6

Voglio eseguire un programma chiamato VLC in java e controllarlo mentre è in esecuzione, ad esempio se l'utente fa clic sul pulsante di pausa o di avanzamento veloce, eseguo un'azione specifica specifica. Corro VLC da questo codice:come controllare VLC di java

 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"); 
     } 

Ho sentito parlare di binding Java, ma non so come funziona per questo lavoro.

risposta

5

Probabilmente stai cercando VLCJ, questo è un wrapper java per VLC. Ti permette di incorporare VLC media player in un'applicazione java e quindi aggiungere tutti i tuoi controlli personali.

(Do atto che per le applicazioni utente questo va bene, ma la biblioteca VLCJ non è perfetto, si possono avere diversi problemi pop-up.)

EDIT: Per il mio progetto ho visto le perdite di memoria e problemi con programmi di lunga durata (più istanze per diverse ore). Soprattutto le istanze multiple non funzionano in combinazione con alcune opzioni di compilazione (che sono attive per impostazione predefinita).

+0

Grazie, sto cercando di imparare come usare VLCJ ma c'è un modo per controllare questo processo chiamato attraverso i flussi in/out nel mio programma? Usare VLCJ è meglio o chiamare file .exe, come ho usato nel mio programma. Si noti che il controllo del video durante l'esecuzione è importante per me. – sajad

+0

Che tipo di problemi? – Grodriguez

+1

@Sajad Ho solo esperienza con l'utilizzo di VLCJ, è almeno possibile avviare/arrestare e mettere in pausa dall'applicazione, ma penso che tutti i comandi funzioneranno. Non ho esperienza con l'uso della normale VU gui in combinazione con la tua applicazione. Penso che se vuoi incorporare l'output nella tua applicazione hai bisogno di VLCJ. – Thirler

0

A seconda di ciò che si desidera eseguire in ultima analisi, è possibile che lo gstreamer Java bindings valga la pena di dare un'occhiata a un controllo granuloso sulla riproduzione. E tu puoi fare conversioni e tutto. Hanno anche un'applicazione di esempio di video player minimalista per iniziare.

+0

Grazie per la tua buona parafrasi! – sajad

+2

Non utilizzare Gstreamer. L'ho fatto alla fine, dopo anni ho capito quanto sia difficile per Crossplatform. Se sei a linux, va bene. – YumYumYum

5

VLCj è quello che stai cercando di sì, è essenzialmente un semplice wrapper Java su libvlc. Se lo si utilizza in processo (specialmente se si utilizzano più lettori in corso) a volte si vedono arresti anomali della VM - questa non è colpa di VLCJ, piuttosto di libvlc e le librerie native che utilizza sottostanti hanno alcuni bug di thread sottile che espongono questi problemi.

È possibile farlo funzionare in modo affidabile con più istanze, ma per farlo è necessario usarlo fuori processo. Vedi here per i miei primi tentativi di farlo. È un po 'di lavoro da preparare, ma una volta andando, le cose sembrano funzionare molto bene.

+0

Ho riscontrato questi sporadici arresti di JVM durante l'esecuzione di VLCj in corso. Questi problemi scompaiono quando VLCj è esaurito? Sto per provare a far sì che VLCj finisca il processo, ma non voglio andare allo sforzo se anche il risultato finale è inaffidabile. – Felix

+0

@nissemand Se si esegue un'istanza VLCJ in corso e va bene, ma più istanze si bloccano in modo sporadico, quindi sì - questo dovrebbe far scomparire questi problemi. Se una sola istanza si blocca, il problema probabilmente si trova altrove. – berry120

+1

Capisco. Ho eseguito solo un'istanza alla volta, ma molte in sequenza. Proverò a spostarli fuori processo e vedere cosa succede. Grazie per l'aiuto berry120! – Felix