Depending on what you really need to do, it may not be necessary to get 
that fancy.  Most users of VirtualGL use it with an X11 proxy.  TurboVNC 
is the X proxy that our project provides and which has features and 
performance specifically targeted at 3D applications, but there are 
other X proxies that work with VGL as well (although usually not as fast 
as TurboVNC.)  The X proxy, when combined with VirtualGL, will cause all 
of the 2D (X11) as well as 3D (OpenGL) rendering commands from the 
application to be rendered on the server and sent to the client as image 
updates.  TurboVNC specifically has a feature called "automatic lossless 
refresh", which allows you to use a very low JPEG quality for most 
updates, but when the server senses that you have stopped moving things 
around (such as when you stop rotating a 3D scene, etc.), it will send a 
lossless update of the screen.  X proxies also do a much better job of 
handling high-latency networks, since they are sending more 
coarse-grained image updates instead of very fine-grained and chatty X11 
updates over the network.

VirtualGL can also operate without an X proxy, but this is less useful 
on high-latency networks, because it requires that the non-3D-related 
X11 commands be sent over the network to the client machine.  Even 
though the 3D-related X11 commands are being redirected by VirtualGL and 
are being rendered on the server, the 2D-related X11 commands used to 
draw the application GUI, etc. are still sent over the network, and that 
can create performance problems on wide-area networks.

Now, to more specifically answer your question-- you can reduce the JPEG 
quality in VirtualGL, which will significantly reduce the bandwidth. 
Using TurboVNC will likely reduce the bandwidth as well, not only 
because the X11 stuff is being rendered on the server but because 
TurboVNC has a more adaptive compression scheme, whereas VirtualGL uses 
plain motion-JPEG.  I'm currently working with nVidia to research 
possible ways of leveraging their NVENC library to do H.264 compression 
in VirtualGL, but there are a lot of technical hurdles we haven't 
figured out yet vis-a-vis how that would interact with X proxies such as 
TurboVNC.  Also, H.264 doesn't benefit all applications-- mainly it will 
only improve the situation for games and other very video-like 
workloads.  More tradition 3D applications (CAD, visualization, etc.) 
are already quite optimal with TurboVNC's existing compression scheme.

VirtualGL does have a transport plugin API, so you could conceivably use 
that to write your own transport plugin based on the existing VGL 
Transport code (see server/testplugin.cpp for an example) but which uses 
ffmpeg instead of libjpeg-turbo to do the 3D image compression.  Whether 
or not that would really improve bandwidth usage would depend a lot on 
your specific workload.


On 5/27/15 1:31 AM, Marco Marino wrote:
> Hi,
> i'm a student and i'm trying virtualgl for education purposes. From my
> tests with vglrun I saw that huge amount of bandwidth is required for
> acceptable image quality (eg: -c jpeg with quality 90 requires peaks of
> 50/60 Mbits). Is there a way to compress the video flow? Can i do
> something like: "VGLSOCKET" -> My compression library (like ffmpeg or
> similar) -> TCP/UDP socket ? In practice i want try to compress with my
> own code the output of VGL. Is this possible? I'm sorry if this is a
> stupid question, but I don't have knowledge about virtualgl.
> Thanks

------------------------------------------------------------------------------
_______________________________________________
VirtualGL-Users mailing list
VirtualGL-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtualgl-users

Reply via email to