You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@guacamole.apache.org by JimL <ji...@gmail.com> on 2018/04/11 14:22:23 UTC

Increase FPS in VNC Session

Hi,

Is it possible to increase the frame rate received through WebSocket in VNC
session?

For example, in TurboVNC, in case of low network, I can adjust the image
compression level to increase my frame rate. Is this possible through
Guacamole? Is it also possible to disable any image compression on Guacamole
to give lossless image output?

If such modifications are possible, could you give me some pointers on how
to go about it in the source code?

Thanks!




--
Sent from: http://apache-guacamole-general-user-mailing-list.2363388.n4.nabble.com/

Re: Increase FPS in VNC Session

Posted by Mike Jumper <mi...@glyptodon.org>.
On Tue, May 15, 2018 at 9:58 AM, Nick Couchman <vn...@apache.org> wrote:

> On Wed, Apr 11, 2018 at 10:22 AM, JimL <ji...@gmail.com> wrote:
>
>> Hi,
>>
>> Is it possible to increase the frame rate received through WebSocket in
>> VNC
>> session?
>>
>> For example, in TurboVNC, in case of low network, I can adjust the image
>> compression level to increase my frame rate. Is this possible through
>> Guacamole? Is it also possible to disable any image compression on
>> Guacamole
>> to give lossless image output?
>>
>
> Guacamole currently lacks the settings for compression to be able to do
> this within the Guacamole Client interface; however, it can be done in
> source code.  If you find such settings useful, you can open a JIRA issue
> and request it as a feature.  However, compression is generally only a
> problem if your system is either CPU or memory-bound, so if you're not
> seeing excessive CPU utilization or memory problems, disabling it may not
> make any difference.
>

In fact, disabling compression would likely result in the framerate being
unusably low. Increasing the amount of data that has to be processed
client-side is not likely to improve performance. Improving the heuristic
selection of compression algorithm and/or the efficiency with which that
compression is applied likely would, though.

Currently, Guacamole should already do a pretty decent job of deciding
whether PNG or JPEG / WebP is appropriate for given updates based on a
quick heuristic judgement of content and update frequency. I have some
experimental changes which go a bit further than that, adjusting the lossy
compression quality based on client processing lag:

https://github.com/mike-jumper/guacamole-server/tree/dynamic-quality

- Mike

Re: Increase FPS in VNC Session

Posted by Nick Couchman <vn...@apache.org>.
On Wed, Apr 11, 2018 at 10:22 AM, JimL <ji...@gmail.com> wrote:

> Hi,
>
> Is it possible to increase the frame rate received through WebSocket in VNC
> session?
>
> For example, in TurboVNC, in case of low network, I can adjust the image
> compression level to increase my frame rate. Is this possible through
> Guacamole? Is it also possible to disable any image compression on
> Guacamole
> to give lossless image output?
>

Guacamole currently lacks the settings for compression to be able to do
this within the Guacamole Client interface; however, it can be done in
source code.  If you find such settings useful, you can open a JIRA issue
and request it as a feature.  However, compression is generally only a
problem if your system is either CPU or memory-bound, so if you're not
seeing excessive CPU utilization or memory problems, disabling it may not
make any difference.


>
> If such modifications are possible, could you give me some pointers on how
> to go about it in the source code?
>
>
They should be possible.  I suggest taking a look at the
LibVNCServer/LibVNCClient documentation:

https://libvnc.github.io/doc/html/group__libvncclient__api.html

It contains information on the function calls for setting encoding and
compression.  The Guacamole Server code initializes the VNC (rfb) client,
here:

https://github.com/apache/guacamole-server/blob/b61a6ab758177b4d4cec4a3a0a2f51a3e76c3772/src/protocols/vnc/vnc.c#L127



You can see there that the encodings get initialized from the provided
options, and then the call to rfbInitClient contains two parameters set to
NULL - you can set those as documented in the API documentation and see
what happens.

-Nick