我目前正在使用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不会最终确定视频,让我感到腐败,需要修复,输出。
有没有办法“远程”触发最终确定过程。
THX, d。
的 的 ** * ** * * 修改< / EM> * ** * ** * ** *
快速回答的问题,我认为你指的是
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管道正在关闭......
答案 0 :(得分:3)
您需要向ffmpeg进程发送“q \ n”。要执行此操作,首先需要使用InputStream
获取Process.getInputStream()
并发送输入。
最好先阅读一些关于从Java控制子进程的内容。 SO上有一些好帖子,搜索ProcessBuilder
答案 1 :(得分:1)
如果您不熟悉当前的方法,可以通过JNA使用Java绑定到FFmpeg库
http://fmj-sf.net/ffmpeg-java/getting_started.php
警告:关于如何在Windows下构建Java JNA绑定的实际链接已不再可用...在这种情况下,另一种方法是使用FMJ或VLCJ