2010-07-06 15 views
5

Sto cercando di eseguire ffmpeg tramite la chiamata exec su linux. Comunque devo usare le virgolette nel comando (ffmpeg lo richiede). Ho cercato attraverso java doc per processbuilder ed exec e domande su stackoverflow ma non riesco a trovare una soluzione.Java Runtime.getRuntime(). Exec() con le virgolette

ho bisogno di correre

ffmpeg -i "rtmp://127.0.0.1/vod/sample start=1500 stop=24000" -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv 

ho bisogno di inserire citazioni nella stringa di argomento di seguito. Nota: l'aggiunta di virgolette singole o doppie precedute da una barra rovesciata non funziona a causa della natura di come il programma di elaborazione analizza ed esegue i comandi.

String argument = "ffmpeg -i rtmp://127.0.0.1/vod/" 
        + nextVideo.getFilename() 
        + " start=" + nextVideo.getStart() 
        + " stop=" + nextVideo.getStop() 
        + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv"; 

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

6

Crea un array!

exec può prendere un array di stringhe, che vengono utilizzati come una matrice di comando & argomenti (al contrario di una serie di comandi)

qualcosa di simile ...

String[] arguments = new String[] { "ffmpeg", 
"-i", 
"rtmp://127.0.0.1/vod/sample start=1500 stop=24000", 
"-re", 
... 
}; 
+0

è possibile rimuovere i caratteri "new String []"; le parentesi graffe produrranno automaticamente un array di stringhe per te. –

+1

Questo non funzionerà come rtmp: //127.0.0.1/vod/sample start = xxx stop = xxx deve avere le virgolette intorno. Mettere l'argomento in un array di stringhe non aiuta. –

+0

Spiacente, non aiuta se si inseriscono virgolette di escape, come segue: "\" rtmp: //127.0.0.1/vod/sample start = 1500 stop = 24000 \ "" – laher

1

Suona come hai bisogno di sfuggire citazioni all'interno della stringa argomento. Questo è abbastanza semplice da fare con un backslash precedente.

E.g.

String containsQuote = "\""; 

Questo valuterà una stringa contenente solo il carattere di citazione.

o nel vostro caso particolare:

String argument = "ffmpeg -i \"rtmp://127.0.0.1/vod/" 
      + nextVideo.getFilename() 
      + " start=" + nextVideo.getStart() 
      + " stop=" + nextVideo.getStop() + "\"" 
      + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv"; 
Problemi correlati