java - 开始/停止 Ffmpeg 视频捕获

标签 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 不会最终确定视频,让我得到一个损坏的、需要修复的输出。

有什么方法可以“远程”触发完成过程。

谢谢, 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/

相关文章:

java - *** 中的字段 authenticationManager 需要找不到类型为 'org.springframework.security.authentication.AuthenticationManager' 的 bean

Android ffmpeg库的使用

ios - 从 linux/osx 到 iOS 设备的 DIY 视频文件流式传输

java - 从 JpaRepository 方法返回一个 boolean 值

java - 在 JApplet 上使用 KeyAdapter 和 Thread 重置/重新启动我的迷你游戏

ios - 如何在 UITableViewCell 中添加视频

Python VTK,如何录制视频?

FFMPEG : How to swap audio tracks and output the same file

ffmpeg - 缩放似乎裁剪了视频的边缘

Java 相当于 SSJS 中的 getComponent()