java - 无法从 javaCV FrameRecorder 类创建 java InputStream

标签 java opencv ffmpeg javacv

我正在使用 JavaCV 使用 FrameRecorder 从我的网络摄像头捕获视频。

我正在努力创建一个库实用程序类,它将提供网络摄像头视频作为“avi”视频输入流,在这里我无法这样做,因为 FrameRecorder 不提供任何此类设施,它只需要一个文件名并将视频保留在文件系统上。 我应该怎么做才能从 FrameRecorder 生成 java InputStream?

以下是示例代码供引用:

FrameGrabber frameGrabber = FrameGrabber.createDefault(1);
frameGrabber.start();
IplImage grabbedImage = frameGrabber.grab();
int width = grabbedImage.width();
int height = grabbedImage.height();

FrameRecorder frameRecorder = new FFmpegFrameRecorder("c:\\output.avi", width, height);
frameRecorder.setAudioChannels(frameGrabber.getAudioChannels());
frameRecorder.start();        

int i = 0;
while ((grabbedImage = frameGrabber.grab()) != null && i <= 500) {
    frameRecorder.record(grabbedImage);
    i++;
}

frameRecorder.stop();
frameGrabber.stop();

我也对任何其他替代方案持开放态度......

提前致谢

阿什什

最佳答案

根据http://code.google.com/p/javacv/source/browse/src/main/java/com/googlecode/javacv/cpp/avformat.java

似乎写入帧数据所调用的方法如下:

/**
* Write a packet to an output media file.
*
* The packet shall contain one audio or video frame.
* The packet must be correctly interleaved according to the container
* specification, if not then av_interleaved_write_frame must be used.
*
* @param s media file handle
* @param pkt The packet, which contains the stream_index, buf/buf_size,
* dts/pts, ...
* This can be NULL (at any time, not just at the end), in
* order to immediately flush data buffered within the muxer,
* for muxers that buffer up data internally before writing it
* to the output.
* @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush
*/
public static native int av_write_frame(AVFormatContext s, AVPacket pkt);

作为其 native 方法,您的赌注将是重定向 native lib 输出而不是文件, 或使用返回的图像数据“构建”您的 AVI。

您可以使用内存映射文件,但在这种情况下您想要连续捕获视频,我认为这不是一个好主意。

关于java - 无法从 javaCV FrameRecorder 类创建 java InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698509/

相关文章:

windows - 使用 Windows 批处理脚本为文件夹中的每个文件应用命令

android - cvCreateVideoWriter (OpenCV 2.2 + FFMPEG)

java - Opencv 背景减法不检测带有小阵雪的视频的移动物体

c# - FFMPEG 视频缩放和添加图像背景

Java 8 HttpClient 4.5 HttpGet 和 HttpPost 位于一个函数中

python - OpenCV 检测并追踪图像上最暗的线条并覆盖网格

node.js - Node ffmpeg模块卡住了多个文件

java - Java 中的十进制格式

java - 我怎样才能修复我的 Spinner 并继续前进

java - 使用 osgi 访问包内的公共(public)属性文件