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

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

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

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

Почему не всегда нужно отправлять весь экран

На типичном рабочем столе за секунду меняется мало. Курсор сдвинулся. Мигнул курсор в редакторе. Дописалась строка в терминале. Открылось меню. Фон, панели, соседние окна стоят на месте. Независимая передача каждого полного изображения заставила бы повторно обрабатывать и отправлять неизменившиеся пиксели. Современные видеокодеки тоже умеют учитывать различия между кадрами; в протоколе Ремотик изменившиеся области дополнительно выделяются до кодирования.

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

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

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

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

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

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

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

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

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

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

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

Параллельная передача может ускорить доставку полного кадра, если канал располагает свободной пропускной способностью. Несколько потоков не увеличивают скорость самого интернет-подключения, поэтому результат зависит от сети и размера обновления.

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

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

Эти приёмы сокращают трафик и нагрузку при работе с документами и программами. Скорость и стабильность соединения по-прежнему зависят от качества интернет-канала.

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

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

Кратко

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

Попробуйте сами: откройте сессию Ремотик на привычном рабочем столе и поработайте с текстом, браузером или IDE. Оцените читаемость текста и задержку при вводе в своей сети.