Erro while[RESOLVIDO]

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

Se é String line

tenta utilizar o while ((line.equals( br.readLine())) != null)

Você tem certeza que deve usar br.readLine() para ler arquivos de video.

Lembre que arquivos de video não tem linha definida.

São binários, uma longa sequencia de bytes. No mínimo a línha seria
única e muito, muito grande.

Creio que seja preciso usar algo diferente.

Vou pesquisar, se encontrar algo te aviso.

Ola, é que vc está usando uma atribuição de valores no escopo.

Não tem nada a ver com a atribuição, ela é natural.

Ele está atribuindo e depois fazendo a comparação.

A atribuição não interessa para o while, interessa o != null que vem depois.

O problema é que arquivos de video não abrem em linhas.

Eles precisam de codecs e dlls para serem abertos.

Por incrivel que pareça ninguem teve coragem no GUJ de abrir topico
sobre isso, deve ser muito complexo.

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.

ViniGodoy vou analisar o tópico informado e vc esta certo estou tentando ler é a saída do processo mesmo. Qualquer coisa eu aviso.

Galera aqui funcionou assim:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VideoTime implements Runnable {
    
    private static String ffmpegApp;
    private static String video;
    private String time;
 
    public static void main(String[] args) {
	
	String ffmpegApp = "D:\Comum\Pessoais\ffmpeg\bin\ffmpeg.exe";
	String video = "D:\Comum\Pessoais\ffmpeg\videoplayback2.flv";
	
        VideoTime vt = new VideoTime(ffmpegApp, video);
	Thread comecar = new Thread(vt);
	comecar.start();
    }
    
   public VideoTime(String ffmpegApp, String video) {
	VideoTime.ffmpegApp = ffmpegApp;
	VideoTime.video = video;
    }
    
    public void run() {
	
	try {
	    String comando = ffmpegApp + " -i " + video;
	    Runtime rt = Runtime.getRuntime();
	    Process process = rt.exec(comando);
	    InputStream stderr = process.getErrorStream();
	    InputStreamReader isr = new InputStreamReader(stderr);
	    BufferedReader br = new BufferedReader(isr);
	    String line;
	    StringBuffer sb = new StringBuffer();
	    
	    while ((line = br.readLine()) != null) {
		sb.append(line);
	    }
	    
	    Pattern pattern = Pattern.compile("Duration: (.*?),");
	    Matcher matcher = pattern.matcher(sb);
	    
	    if (matcher.find()) {
		String time = matcher.group(1);
		int pos = 8;
		StringBuffer buf = new StringBuffer(time.length() - 1);
		buf.append(time.substring(0, pos)).append(
			time.substring(pos + 3));
		setTime(buf.toString() != null ? buf.toString() : "");
		System.out.println(getTime());
	    } else {
		System.out.println("Tempo do video não encontrado");
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
    
    public void setFfmpegApp(String ffmpegApp) {
	VideoTime.ffmpegApp = ffmpegApp;
    }
    
    public void setTime(String time) {
	this.time = time;
    }
    
    public void setVideo(String video) {
	VideoTime.video = video;
    }
    public String getTime() {
	return time;
    }
}