Hi, I've recently been exploring the images stored in Guacamole's recording files, particularly those sent to the client as base64. By slightly modifying the guacenc source code, I was able to save all the images to disk and analyze the screen changes they represent. This has helped me understand how screen updates are handled and recorded.
While reviewing the source code, I was curious to know whether Guacamole simply accepts the image stream from the underlying FreeRDP library and translates it directly into the Guacamole protocol, or if it performs additional optimizations—such as identifying redundant or duplicate regions and replacing them with copy or move instructions or techniques like bitmap caching, etc.—to minimize recording size and improve streaming efficiency. My ultimate goal is to fully understand Guacamole’s core architecture and design a C#-based streaming solution that transmits dirty rectangles from a target machine to any connected client. This is my first experience diving into such a large-scale open-source project, and I must say I’m very impressed by how clean and well-structured Guacamole’s C code is. I’m really excited to continue learning from it. This thread will really help the future beginners to be able to understand the behaviour and techniques used by guacamole that makes it so much more efficient and a light-weight clientless streaming solution. Best regards, Palaash Jain