Estou a fazer uma classe que executa um programa (ffmpeg) pra tirar informações de um video. Após debugar o programa percebi que ele não exibe nenhuma msg de erro mas para de executar qdo chega no while. Alguém poderia me informar aonde posso estar errando?
package br.com.ffmpeg;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ProcessBuiderClass {
public static void main(String [] args) throws IOException, InterruptedException{
try {
String [] comando = new String[3];
comando[0]="D:\Programas\Diversos\bin\ffmpeg.exe";
comando[1]=" -i";
comando[2]="D:\Video\Ben.flv";
ProcessBuilder pb=new ProcessBuilder(comando);
Process p = pb.start();
InputStream its=p.getInputStream();
InputStreamReader isr = new InputStreamReader(its);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Mas no caso ele não está lendo o arquivo de vídeo, e sim, a saída do processo. E a saída de um processo normalmente é um texto, que termina com quebras de linha.
O que pode estar acontecendo:
a) O seu processo não está gerando qualquer saída. Certifique-se que sua chamada ao processo está correta.
b) A saída não está no outputstream, e sim, no error stream;
c) A saída não é mesmo textual (caso que o Joao está salientando).
Uma idéia seria usar uma classe que faça a leitura tanto do OutputStream quanto do ErrorStream numa thread separada, como essa aqui:
Essa classe também faz a leitura de maneira binária, o que evita o problema que o Joao está citando.