我目前正在使用ffmpeg从网络摄像头源录制视频。
目前我使用Java调用ffmpeg执行录制操作。
代码相当简单明了。
ffmpeg -f dshow -i video="Dualpix HD720p for Notebooks" -s cif -r 20 -f flv TEST.FLV
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + cmd);
而且它运行得很好。
唯一的真正问题是当我需要停止录制过程时。
我知道我可以在CMD中按q或甚至ctrl+c,但我需要在没有键盘输入的情况下停止进程。
这样做很容易被杀死进程,但在这种情况下,ffmpeg不会完成视频处理,导致输出文件损坏,需要修复。
是否有任何方法可以“远程”触发最终处理过程呢?
谢谢, D。
*******编辑**********
感谢及时回答,我想你指的是
Process.getOutputStream()
对于这种情况,我已经尝试了以下代码:
public Process doCommand(String cmd) throws Exception {
rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
recOS= proc.getOutputStream();
regcIS= proc.getInputStream();
return proc;
}
receOS.write(("q/n".getBytes()));
recOS.flush();
我仍然遇到一个错误,更具体地说,是java.io.IOException: 管道正在关闭...