← БлогНоутбук с удалённым рабочим столом: подсвечены только изменившиеся области экрана, данные уходят параллельными потоками

Собственный протокол экрана в Ремотик: только изменившиеся области, адаптивный FPS и экономия трафика

Разбираем, почему удалённый рабочий стол не обязан слать картинку целиком: dirty regions, частота кадров по активности и многопоточная передача в протоколе Ремотик.

Удалённый рабочий стол часто представляют так: каждую секунду по сети летит целый экран, как видеозвонок в высоком разрешении. Отсюда и страх: "на слабом интернете будет мыло", "месячный трафик съест за вечер", "открыл IDE и всё встало". В Ремотик другая модель. Собственный протокол передачи экрана шлёт не картинку целиком, а только то, что реально изменилось, подстраивает частоту кадров под активность и разносит тяжёлые обновления по нескольким сетевым потокам.

Почему "весь экран целиком" это плохая привычка

На типичном рабочем столе за секунду меняется мало. Курсор сдвинулся. Мигнул курсор в редакторе. Дописалась строка в терминале. Открылось меню. Фон, панели, соседние окна стоят на месте. Если каждый кадр кодировать и отправлять как полный кадр видео, вы платите трафиком и процессором за неизменённые пиксели.

Для удалённой помощи родителям, работы с документами или правки кода это особенно заметно: сцена почти статичная, а канал всё равно нагружают "как будто там фильм". Протокол Ремотик заточен под рабочий стол, а не под непрерывный видеопоток.

Dirty regions: обновляются только изменившиеся области

Экран делится на блоки. Хост сравнивает новый захват с предыдущим и помечает блоки, где пиксели реально отличаются. Соседние изменённые блоки склеиваются в прямоугольники, и в сеть уходят только эти области (dirty regions), закодированные как тайлы.

Если ничего не изменилось, новый видеокадр можно не слать вовсе. Если изменилась большая часть экрана, протокол переключается на полное обновление: так быстрее, чем собирать экран из сотен мелких кусков. Первый кадр сессии и периодический refresh тоже идут полным обновлением, чтобы картинка не "плыла" со временем.

Практический смысл простой. Печатаете в Word или листаете код: по сети идут узкие полоски вокруг текста и курсора. Перетащили окно на весь монитор: уйдёт более крупное обновление. Не надо вручную выбирать "качество" ради экономии, когда сцена и так спокойная.

Адаптивный FPS: частота кадров по активности, не мыло вместо чёткости

Второй рычаг: частота захвата. Когда канал успевает за картинкой, Ремотик держит более высокую частоту кадров. Если сеть не успевает и кадры начинают вытесняться в очереди отправки, частота шагает вниз по лестнице примерно так: 30 → 20 → 15 → 10 → 5 кадров в секунду. Когда отправка снова стабильна, частота постепенно поднимается обратно.

Важный нюанс: снижается именно частота обновлений, а не "качество кодирования ради экономии любой ценой". Цель: сохранить читаемый текст и чёткие края окон на рабочем столе, даже если канал узкий. Плавность может стать скромнее. Мыло вместо букв: не стратегия по умолчанию.

Если экран не меняется несколько секунд, захват уходит в режим покоя с очень низкой частотой опроса. Достаточно движения мыши, клавиши или буфера обмена на удалённой стороне: частота снова поднимается. Для IDE, таблиц и документации это как раз типичный ритм работы: долго смотрите, потом коротко действуете.

Многопоточность сети: тяжёлые обновления идут параллельно

Полное обновление экрана: самый тяжёлый пакет в сессии. В протоколе Ремотик такие refresh-кадры можно разнести по нескольким видео-потокам и собрать на стороне зрителя целиком, прежде чем показать. Инкрементальные dirty-пакеты при этом остаются упорядоченными: иначе кусок экрана мог бы застрять "старым", пока соседний уже обновился.

На быстрой сети вы это почти не замечаете. На среднем канале и при больших разрешениях разница ощущается как "первый кадр и крупные смены сцены приходят быстрее", без ощущения, что удалёнка ждёт один толстый файл.

Что это даёт на практике

  • Меньше лишнего трафика на спокойном рабочем столе: не гоняем фон и неподвижные окна каждый кадр.
  • Живее сессия на неидеальном интернете: протокол сначала режет частоту кадров, а не превращает текст в кашу.
  • Понятнее поведение в паузах: смотрите документ без движения: канал отдыхает. Вернулись к вводу: обновления снова активны.
  • Быстрее тяжёлые refresh за счёт параллельной передачи полного кадра по нескольким потокам.

Это не заменяет хороший канал и не делает магию из 3G в подвале. Но убирает типичную расточительность "видеострима рабочего стола", из-за которой удалёнка кажется тяжёлой ещё до того, как вы что-то сделали.

Для кого это особенно важно

  • Работа из дома и в поездках: ноутбук в кафе, планшет в дороге, домашний ПК с IDE и браузером.
  • ИТ-поддержка и фриланс: долгие сессии с документами, настройками и терминалом, где экран чаще стоит, чем "дышит" как видео.
  • Помощь родственникам: слабый домашний интернет у второй стороны переносится спокойнее, когда протокол не шлёт лишнее.

Кратко

  • Ремотик использует собственный протокол передачи экрана под рабочий стол.
  • В сеть уходят изменившиеся области, а не каждый раз весь монитор.
  • Частота кадров подстраивается под активность и состояние канала.
  • Полные обновления можно передавать параллельно по нескольким потокам.
  • Итог: меньше лишнего трафика и более предсказуемая удалёнка на реальном интернете.

Попробуйте сами: откройте сессию Ремотик на привычном рабочем столе и поработайте с текстом, браузером или IDE. Протокол как раз для таких сценариев, а не для "фильма с вашего монитора".