Потоковая передача рабочего стола по разным платформам для скорости - PullRequest
1 голос
/ 14 февраля 2012

Мне нужно было создать небольшое программное обеспечение для удаленного рабочего стола в 'C', которое компилируется на разных платформах (linux, freebsd, windows ...). Я некоторое время изучал различные форматы изображений, но все еще не мог прийти.с хорошей идеей использовать их, прямо сейчас, вот что я делаю:

1. Convert All Formats into Windows Bitmap (XImage,...etc)
2. Do a byte-to-byte comparion and replace the identical bytes with zeros
3. Preform a RLE (Run Length Encoding) on the Resulted data.
4. Transmit the Packet to the Server
5. Inverse the Operation on the Server by Reconstructing the Image through the previous image (Comparing Last Image with the New one Discarding Zero Bytes after RLE)

, но это имеет тенденцию быть очень медленным, так как формат растрового изображения уже имеет очень большие файлы, потому что он не содержит сжатияи на платформах, таких как Mac OS X, размер растрового изображения слишком велик из-за очень высокого разрешения.

Есть ли более быстрый и лучший способ для потоковой передачи на рабочем столе?

1 Ответ

2 голосов
/ 14 февраля 2012

Существуют вещи, которые вы можете принять во внимание на экранах компьютеров, в основном то, что в любой момент времени можно изменять только небольшие части экрана.

Вы можете посмотреть эти три подхода:

  1. Разбейте экран на прямоугольники, поскольку каждое обновление экрана передает только те, которые изменились вместе с их местоположением.
  2. Используйте сжатый формат изображения, такой как png или jpeg, или сожмите растровые изображения, используя zlib вместо RLE.
  3. Уменьшите глубину цвета ваших изображений при их захватеуменьшение количества изображений до 4-битного или 8-битного цвета значительно сократит объем отправляемых данных и объем данных, которые необходимо сравнивать для изменений.

В зависимости от того, как вы хотите написать сервер, выможет быть в состоянии получить подсказки от ОС относительно того, какие биты экрана были изменены, чтобы уменьшить объем обработки, которую вы должны сделать.

Наконец, (если это не домашняя работа), посмотрите на такие вещи, как VNC , которые уже делают это довольно хорошо, есть даже версии java или c #.

...