I’m trying to do a “remote desktop viewer”.
For this I need to send the user’s desktop – and it’s alot of infomation for sockets…(especially if the resolution is high and the information can approach to 5.3MB (1680X1050))
So I started to compress with GZIP stream and the 5.3MB became 500KB, then I added my own compress algorithm (I think it called RLE) – taking near pixels and write it in format that 1) have 256 >> 3 = 32 colors(for red,blue,green each) and write how many pixels in a row have the same color. + GZIP.
That brought the compression to be in average 60~65KB – up to 200KB and it can be also under 5000 if the screen is totally white.
Now – I thought (and haven’t implemented yet) about passing the difference between each frame – for each line I write where the difference(between the pixels) is starting and how long is the difference.
well, it can help – maybe I could get 30KB for each frame in average. but for sockets it’s alot.
has anyone ever succeed to fit with this problem? (and how of course…)
There are standard algorithms for compressing images: e.g. JPEG.
A further optimization is to know something about the image: for example on a desktop, items like the Windows Start button, and various application icons, and widgets on the title bar, are standard: so instead of sending their pixels values, you can send their logical identifiers.
Yes people have succeeded with this problem: people who write remote desktop software, including the open source VNC.