启动/停止Ffmpeg视频捕获

时间:2011-11-02 08:32:40

标签: java video ffmpeg cmd capture

我目前正在使用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管道正在关闭......

2 个答案:

答案 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

更多链接: http://code.google.com/p/jjmpeg/