在工作中,有用到在后台用ffmpeg转换文件格式,然后前台收到成功信息之后,访问文件出现错误的问题,后来发现是因为在Action中调用转换文件的时候,传递给前台处理结果,其实文件还没转换完成。
这时候可以使用process.waitfor()让当前线程等子线程(执行控制台命令命令的线程)结束之后再向下执行。或者可以使用proce.getErrorStream 然后输出这个流的形式 来让文件转换完成之后再进行返回。(但是这样操作会造成性能的损失,我们这边这样操作主要是客户认为这种前台收到处理成功,却无法访问文件是一种BUG)
示意代码如下:
Runtime runtime = Runtime.getRuntime();
Process proce = null;
String cutCmd = "D:/ffmpeg.exe -i "+oldfilepath+"
-y -ab 32 -ar 22050 -b 800000 -s 640*480 "+toPath;
proce = runtime.exec(cutCmd);
InputStream erro = proce.getErrorStream();
byte[] a = new byte[1024];
int j = 0;
while((j=erro.read(a))>-1){
System.out.println(new String(a));
}