我目前正在使用 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 The pipe is being closed ...
最佳答案
你需要发送“q\n”给ffmpeg进程。为此,首先您需要使用 Process.getInputStream()
获取 InputStream
并发送输入。
您最好先阅读一些有关从 Java 控制子进程的内容。 SO 上有一些不错的帖子,搜索 ProcessBuilder
关于java - 开始/停止 Ffmpeg 视频捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7977527/