如何在屏幕捕获程序中使用Java获得超过30FPS? [英] How to get over 30FPS using Java in a Screen Capture Program?
问题描述
我目前正在使用Java中的Robot类来记录屏幕。但是,它不能达到每秒30帧的最小值。我不会重新创建对象,并且尽可能高效,但我平均每秒只有15帧。机器人根本就没有削减它。
I'm currently using the Robot classes in Java to record the screen. However, it does not achieve the minimum of 30 frames per second. I'm not re-creating objects, and am being as efficient as I can, but I only average around 15 frames per second. Robot is simply not cutting it.
我可以用什么来捕捉屏幕?我已经尝试过Xuggle了,但我似乎无法获得足够快的捕获速度。
What can I use to capture the screen? I've tried Xuggle, but I can't seem to get that to capture fast enough either.
推荐答案
对于以下操作系统X11标准(Linux,FreeBSD,Solaris等),我们可以通过 JavaCV 和 FFmpeg :
For operating systems following the X11 standard (Linux, FreeBSD, Solaris, etc.), we can do it this way via JavaCV and FFmpeg:
import com.googlecode.javacv.*;
public class ScreenGrabber {
public static void main(String[] args) throws Exception {
int x = 0, y = 0, w = 1024, h = 768; // specify the region of screen to grab
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(":0.0+" + x + "," + y);
grabber.setFormat("x11grab");
grabber.setImageWidth(w);
grabber.setImageHeight(h);
grabber.start();
CanvasFrame frame = new CanvasFrame("Screen Capture");
while (frame.isVisible()) {
frame.showImage(grabber.grab());
}
frame.dispose();
grabber.stop();
}
}
我不知道Windows或Mac OS X ,但我怀疑我们需要直接访问本机API。尽管如此, JavaCPP 可以为您提供帮助。
I don't know about Windows or Mac OS X, but I suspect we would need to access native APIs directly. Nevertheless, JavaCPP could help with that.
这篇关于如何在屏幕捕获程序中使用Java获得超过30FPS?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!