How to get over 30FPS using Java in a Screen Capture Program?

前端 未结 2 899
遥遥无期
遥遥无期 2020-12-17 06:40

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 b

2条回答
  •  有刺的猬
    2020-12-17 07:01

    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();
        }
    }
    

    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.

提交回复
热议问题