我目前正在使用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,但是我需要停止没有键盘输入的进程。
这将是相当容易实现的过程,但在这种情况下,不完成视频,留下我一个腐败,需要修复,输出。
是否有任何方法可以“远程”触发最后确定过程。
Thx,D.
*******EDIT__**********
我想你指的是
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管道正在关闭.
发布于 2011-11-02 08:47:11
您需要将"q\n“发送到ffmpeg进程。要做到这一点,首先需要使用InputStream获取Process.getInputStream()并发送输入。
最好先阅读一下有关从Java控制子进程的内容。这里有一些很好的帖子,搜索ProcessBuilder
发布于 2011-11-02 12:14:14
如果您坚持使用当前的方法,可以通过JNA将Java绑定到FFmpeg库。
http://fmj-sf.net/ffmpeg-java/getting_started.php
注意:关于如何在Windows下构建Java绑定的实际链接不再是available...in
https://stackoverflow.com/questions/7977527
复制相似问题