【发布时间】:2014-01-09 12:46:52
【问题描述】:
我正在为 ffmpeg 构建一个简单的 UI,使用 exec() 启动带有参数的 ffmpeg.exe。它可以在 OS X 上运行,但在 Windows 7-8 上几秒钟后,ffmpeg 进程会自行挂起,只有在我杀死父进程时才会恢复。 (也创建了 ddlhost.exe) ffmpeg.exe从cmd成功转换同一个视频。
在互联网上搜索我发现了这个answer,但我在运行一个不使用输入和错误流的简单测试程序时遇到了同样的问题。
下面是测试程序代码,和主程序有同样的问题:
public class Main {
static String param_ffmpeg_1 = "./data/ffmpeg.exe";
static String param_ffmpeg_2 = "-i";
static String in = "./data/source.mov";
static String out = "./data/out.flv";
static Process p;
public static void main(String[] args) {
/*File f = new File(out);
if (f.exists()){
f.delete();
}*/
Runtime rt = Runtime.getRuntime() ;
//String cmd1 = param_ffmpeg_1 + param_ffmpeg_2 + in_path + param_ffmpeg_3 + out_path ;
System.out.println(in);
System.out.println(out);
String[] cmd1 = new String[] { param_ffmpeg_1, param_ffmpeg_2, in, "-ar", "44100", "-vb", "2500k", "-s", "882x496", "-f", "flv", out};
try {
p = rt.exec(cmd1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int r = 123456;
try {
r = p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(r);
}
}
【问题讨论】: