Java web開發調用外部ffmpeg或mencoder轉碼...
遇到的問題是ffmpeg或mencoder程序阻塞, 需要停掉tomcat--javaw.exe程序之後才能執行ffmpeg.exe或mencoder.exe
問題的原因: getErrorStream 和 getInputStream 緩沖區沒有清空
解決的方法: 同時清空getErrorStream 和 getInputStream 的緩沖區
代碼如下:
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process process = builder.start();
final InputStream is1 = process.getInputStream();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is1));
try {
while(br.readLine() != null) ;
} catch (IOException e) {
e.printStackTrace();
}
}
}).start(); // 啟動單獨的線程來清空process.getInputStream()的緩沖區
InputStream is2 = process.getErrorStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
StringBuilder buf = new StringBuilder(); // 儲存輸出結果流
String line = null;
while((line = br2.readLine()) != null) buf.append(line);