DisplayCast: a High Performance Screen Sharing System for Intranets
Screen sharing is an important collaboration feature. As a screencast, it is used to capture and archive screen contents for educational and training purposes. Real time screen sharing is widely used for remote logging, debugging and screen sharing. Some of the popular screen sharing applications include VNC (and variants such as Apple Remote Desktop), Microsoft Remote Desktop, Google Chrome Desktop and Cisco WebEx.
Historically, real time screen sharing systems were designed to operate over constrained networks. This design choice does not lend itself to scenarios in which such bottlenecks are irrelevant. DisplayCast targets intranet scenarios in which the wired/wireless networks and computation resources are abundant. We envision a collaboration scenario in which many users share their screens with many other users in an intranet setting. Our primary design goal is to faithfully reproduce the screen contents.
We achieve many of these goals. Some remain unachievable because of processor limitations. For example, capturing, compressing and sharing full screen HD movies remain beyond reach even with the state of the art laptop processors.
- Users are not required to reconfigure their systems (e.g., lower screen resolution) in order to make them suitable for screen sharing.
- Users can use any application and expect good performance.
DisplayCast system currently includes three components: Streamer, Player and Archiver.
We also provide a HTTP/REST service that runs under Windows 7. This service listens to the various Zeroconf advertisements and provides a synchronous means of controlling DisplayCast.
- Streamer: The streamer is the source component. It can either share the entire screen or a portion (using a configuration MASK region). It interacts with users using a task-bar interface (a windowed interface can be compiled using appropriate compile time flags).
- Player: The player is the real time receiver. The created windows can be dragger around using the GUI. It can also be remotely controlled.
- Archiver: This component captures a stream into a H.264 movie.
- Screen capture: On Mac OS X, we used the CGRegisterScreenRefreshCallback() call to receive asynchronous notifications regarding screen updates. On Windows 7, we used the DemoForge mirror driver to collect pixmap updates. This driver implements the Windows mirroring function. We poll the driver every 16 msec to collect stored updates. We then memory mapped the mirror driver's framebuffer copy to access the pixels that correspond to each pixmap update.
- Bitmap transformation for better Zlib compression: Zlib does not incorporate any inter-update redundancy. We incorporate them by first transforming each update pixmap. We separated pixmaps into a similarity byte-map and pixel data. We use 0x00 and 0xFF to represent similar and dissimilar pixels in the byte-map, respectively. The pixel data is a sparse array that stores the 24 bit RGB values of dissimilar pixels.
- Naming: We use Apple Bonjour for naming the various components. Each component chooses a 8 character GUID to identify itself. It also provides a user friendly (and configurable) name that is displayed to the user to identify each component. By default, we use Bonjour local name resolution (within the .local domain) using link-local multicast. DisplayCast can be recompiled to use wide-area DNS
- Location management: Like many intranet applications, DisplayCast could benefit from fine grain location information. For example, an user walking into a conference room might want to project their laptop to the projector (without explicitly choosing from the many Players available to her). Streamers currently use Bluetooth to locate nearby Players. All Players disclose their Bluetooth ID through Bonjour. The Streamers search for nearby Bluetooth devices. Once found, they match the observed Bluetooth ID with the Bonjour advertised Players to identify nearby Players. More accurate location management is an active area of research
More details are described in our ACM Multimedia 2012 paper. DisplayCast is available as an open source project. Further details on getting and using DisplayCast is also available.
Technical Contact: Surendar Chandra