我目前正在使用以下命令在java中运行ffmpeg进程:
Process ffmpeg = new ProcessBuilder("ffmpeg", ...).start();
ffmpeg.waitFor();
问题是这个过程永远不会终止。但是,如果我这样做:
ProcessBuilder ffmpeg = new ProcessBuilder("ffmpeg", ...);
ffmpeg.redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.INHERIT);
ffmpeg.start().waitFor();
这个过程运行良好。
有谁知道为什么会这样?除非我读取它的输出,否则进程不会进行似乎非常奇怪。
答案 0 :(得分:5)
这是完全正常的。需要读取(或重定向到bitbucket)的输出缓冲区数量有限。
当人们开始使用ProcessBuilder
并且不首先阅读文档时,这也是最常见的陷阱之一;)