【发布时间】:2016-07-05 12:05:27
【问题描述】:
我正在尝试从 Java 应用程序捕获视频屏幕截图。我已经下载了 sarxos/webcam-capture 库。我已将可执行 jar 添加到我的项目中。有点乱。我想从我创建的简单 javafx 界面捕获视频。问题是在安装了 lib 和 slf4 之后,还需要安装 xuggle。我在路径中添加了xuggle,我的代码如下:
File file = new File("output.ts");
IMediaWriter writer = ToolFactory.makeWriter(file.getName());
Dimension size = WebcamResolution.QVGA.getSize();
writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_H264, size.width, size.height);
Webcam webcam = Webcam.getDefault();
webcam.setViewSize(size);
webcam.open(true);
long start = System.currentTimeMillis();
for (int i = 0; i < 50; i++) {
System.out.println("Capture frame " + i);
BufferedImage image = ConverterFactory.convertToType(webcam.getImage(), BufferedImage.TYPE_3BYTE_BGR);
IConverter converter = ConverterFactory.createConverter(image, IPixelFormat.Type.YUV420P);
IVideoPicture frame = converter.toPicture(image, (System.currentTimeMillis() - start) * 1000);
frame.setKeyFrame(i == 0);
frame.setQuality(0);
writer.encodeVideo(0, frame);
// 10 FPS
Thread.sleep(100);
}
writer.close();
System.out.println("Video recorded in file: " + file.getAbsolutePath());
但是我收到以下信息:
Caused by: java.lang.UnsatisfiedLinkError: no xuggle-ferry in java.library.path
EDIT2 我也尝试了 jxcapture 库。我在我的项目中添加了所有必要的库我运行以下代码:enter link description here,代码运行良好我设法存储视频,但最后我收到以下错误:
8614 [JNIWrapper.ShutdownHook] 错误 com.jniwrapper.NativeResourceCollector - com.jniwrapper.FunctionExecutionException:回调参数类型或其计数不正确 在 com.jniwrapper.Function.invokeVirtualFunc(Native Method)
知道这个错误是关于什么的吗?什么是 JNIWrapper.ShutdownHook?我在 3 台不同的机器上尝试了代码,这仅发生在其中一台机器上?我该如何处理这个异常?
EDIT3:我尝试了@whitesite 提案EDIT3。 gui 启动了,我有两个按钮启动和停止启动按钮打开相机,当我试图停止时,我收到以下信息:
java.lang.NullPointerException:参数 0 的指针地址为 NULL。 在 org.bytedeco.javacpp.opencv_videoio$VideoWriter.write(本机方法) 在 org.bytedeco.javacv.OpenCVFrameRecorder.record(OpenCVFrameRecorder.java:105) 在 Test1.lambda$0(Test1.java:52) 在 java.lang.Thread.run(Unknown Source)
【问题讨论】:
-
“我在路径中添加 xuggle”是什么意思?据我了解,它有自己的依赖项,需要一些预编译的二进制文件,如果你不使用 maven 或其他东西,你必须手动提供。
-
我添加到我的 Eclipse 项目 webcam-capture 然后是 xuggle_3.4 然后是 slf4j 和 bridj-0.6.2。我不知道我还应该添加什么。
-
基本上,
UnsatisfiedLinkError表示 xuggle 找不到所需的库。如果您阅读xuggle download instructions,您会发现您需要提供其所有依赖项和预编译的二进制文件。使用 maven 会容易得多。 -
另一件事是我无法下载 xuggle 的更新版本。我在 5.2 或 5.4 中无处可去。
-
似乎他们很久以前就停止支持它了。你想达到什么目的?如果您只需要快照,它看起来就像普通的 sarxos 网络摄像头一样能够做到这一点。如果您需要更高级的视频解码/流/压缩功能,则可能需要一些额外的工具,比如 ffmpeg。
标签: java javafx webcam video-capture