Что вы хотите сделать, это сделать то, что делают форматы сжатия изображений, но в произвольном порядке (отправляйте только изменения, а не все изображение снова и снова). Вот что я хотел бы сделать, в два этапа (этап 1: сделать это, доказать, что это работает, этап 2: оптимизировать)
Подтверждение концепции этапа
1) Захват изображения на экране в растровом формате
2) Разделить изображение на блоки смежных байтов. Вам нужно поиграть, чтобы определить оптимальный размер блока; он будет зависеть от скорости восходящей / нисходящей линии связи.
3) Получите короткий хеш (crc32, может быть, md5, поэкспериментируйте с этим) для каждого блока
4) Сожмите (не забудьте сделать это!) И перенесите каждый измененный блок (Если хеш изменился, блок изменился и его необходимо перенести). Соедините изображение на приемном конце, чтобы отобразить его.
5) Использовать UDP-пакеты для передачи данных.
Фаза оптимизации
Вот что вы можете сделать, чтобы оптимизировать скорость:
1) Сбор статистики и скорости передачи жесткого кода в зависимости от размера кадра и метода хеширования для оптимальной скорости передачи
2) Сделать саморегулирующийся механизм для # 1
3) Изображения лучше сжимаются в квадратных областях, а не в смежных байтных блоках, как я объяснил в # 2 первого этапа выше. Измените свой алгоритм так, чтобы вы получали визуальную квадратную область, а не последовательные блоки линий. Этот квадратный метод - то, как люди сжимают изображения и видео.
4) Поиграйтесь с алгоритмом сжатия. Это даст вам множество переменных для игры (загрузка ЦП в зависимости от скорости доступа в Интернет, выбор алгоритма сжатия и частота обновления экрана)
Это, в основном, сводная информация о том, как (приблизительно) работает потоковая передача сжатого видео (вы можете увидеть сходство с вашей задачей, если задумаетесь), так что это не непроверенная концепция.
НТН
РЕДАКТИРОВАТЬ: Еще одна вещь, с которой вы можете поэкспериментировать: после захвата растрового изображения на экране, уменьшите количество цветов в нем. Например, вы можете сохранить половину размера изображения, если перейдете с глубины цвета 32 бита на 16 бит.