Olá...
Estou desenvolvendo uma aplicação que recebe um vídeo em um formato qualquer e o converte para o formato MPEG-1 (para que eu possa transmití-lo via RTP com a JMF). Para realizar esta conversão estou usando uma biblioteca nativa chamada FFMPEG (é provável que vários de vocês já tenham ouvido falar). Todavia, após a chamada nativa, minha aplicação fica parada e nunca chega ao final da execução. Abro o gerenciador de tarefas do Windows XP quando estou executando e posso ver meu processo Java e um processo ffmpeg rodando...O que eu fiz de errado? Outra dúvida, a forma que usei para capturar a saída do processo nativo está correta?
Abaixo segue o código da aplicação. Eu ia anexar a biblioteca também, mas ela ultrapassa o limite máximo de tamanho
/**
* @(#)Converte.java
*
*
* @author
* @version 1.00 2008/5/29
*/
import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Converte
{
private static final String caminhoFFMPEG = "C:\\ffmpeg\\ffmpeg.exe";
//private static final String caminhoFFMPEG = "ffmpeg";
private static final String diretorioDeVideosConvertidos = System.getProperty("user.dir")+"\\videos convertidos\\";
public Converte()
{
File diretorio = new File(diretorioDeVideosConvertidos);
if(!diretorio.exists())
{
diretorio.mkdir();
}
//System.out.println(diretorio.getPath());
}
public String paraMPEG1(String caminhoVideo)throws Exception
{
String retorno = "";
String linha = "";
String nomeVideoNovaExtensao = caminhoVideo.substring(caminhoVideo.lastIndexOf("\\"),caminhoVideo.length())+".mpeg";
Process convertendo = Runtime.getRuntime().exec( caminhoFFMPEG+" -i "+caminhoVideo+" -target mpeg "+diretorioDeVideosConvertidos+"\\"+nomeVideoNovaExtensao);
BufferedReader input = new BufferedReader(new InputStreamReader(convertendo.getInputStream()));
while ((linha = input.readLine()) != null)
{
retorno += linha;
}
convertendo.waitFor();
return retorno;
}
public static void main(String[] s)
{
Converte converte = new Converte();
String resultado = "";
try
{
resultado = converte.paraMPEG1("C:\\teste.mpg");
System.out.println(resultado);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
Valeu...