Fastest method for screen capturing on Linux
This question is similar to this one
Fastest method of screen capturing
but for linux/X11.
To be more specific, i need a method to capture the pixel images of one window (the programmatic equivalent of alt-print screen in windows) running on a X11 diplay.
Notes and requirements:
1) Even if a new window is placed on top of the window that is being captured, the pixel image should still point to the original application window without any occlusion
2) it is not needed that the application window to be seen by the user, i just need to store the pixel buffers/images for video purposes
other alternatives that i've explored are:
1) xvfb - it works but it does does CPU rendering, which is slow and wasteful of a good GPU
2) x11 inside many lxc - theoretically could work but is complex to setup, and i'm not sure it will scale well with many windows being captured
suggestions and ideas are welcome
This is possible using VirtualGL in a server with hardware acceleration. Basically just configure the server appropiately, then either on the same machine or on a machine in the same network, run
export DISPLAY=<your xvfb display>
vglrun <your_app>
This will have the following advantages:
1) your app will render using virtualGL, which will use the hardware
2) VirtualGL will display your 3D context inside the Xfvb display, which will only render the 2D widgets in CPU
3) configure Xvfb to render to a framebuffer
4) profit!
This is not possible with pure X11.
You can get what you want with compositing, but only on servers which support it (most modern ones do). This actually has nothing to do with window managers. A WM is just another client, albeit with some special abilities, but those are unrelated to compositing. You can use the same compositing API.
man xcomposite
should get you started.
You can use xwd(1) to dump a X11 window (and xwud(1) to display it). ImageMagick and the Netpbm tools know how to deal with the XWD format. But these are not especially fast. And they will not reveal hidden portions of a window.
链接地址: http://www.djcxy.com/p/81006.html上一篇: C#WPF捕获键盘和鼠标
下一篇: 在Linux上进行屏幕截图的最快方法