Как добавить дополнительные кадры данных в VNC-коммуникацию? - PullRequest
1 голос
/ 12 июля 2011

Кто-нибудь знает, как добавить дополнительный кадр данных вместе с видеокадрами в VNC-коммуникации.И клиент, и сервер будут обрабатываться мной.А также, как выполнить кодирование и декодирование этого дополнительного фрейма данных с обеих сторон.

Любая помощь будет принята.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Используйте 'водяные знаки. Вы можете установить каждый X-й кадр, чтобы иметь данные. Каждый пиксель будет использоваться для хранения небольшого количества данных. Запишите каждый пиксель в каждом X-1-м кадре, и для каждого X-го кадра проигнорируйте любые фактические изменения в видеопотоке сервера, но если вы хотите, чтобы бит был 1, сделайте этот пиксель темнее, а если вы хотите, чтобы он был 0, сохраните пиксель такой же. С помощью этого метода на дисплее с разрешением 1024 на 768 пикселей вы можете хранить 786 КБ данных каждые X кадров. Обязательно не сжимайте поток для кадров, в которых будут храниться данные, через.

Если вам не нужны 786 КБ, делайте это только для верхней половины экрана, вы сэкономите часть пропускной способности и получите половину 786 КБ для использования в качестве данных.

Вы должны быть в состоянии реализовать большинство, если не все, хорошее шифрование. Вы можете сделать много запутывания тоже. Может быть, каждый третий бит случайен и бесполезен. Возможно, если 1-й бит равен 1, переверните все. И т. Д.

0 голосов
/ 12 июля 2011

Лучшая ссылка, которую я нашел по протоколу RFB (VNC): http://tigervnc.org/cgi-bin/rfbproto

У вас есть пара общих указаний.

Если вы не возражаете против расширения протокола, то вы можете просто добавить новые типы сообщений в ваш протокол (так как вы контролируете оба конца). См. clientcuttext и servercuttext как примеры существующих сообщений для отправки произвольного количества данных в любом направлении. Недостатком является то, что если ваш клиент или сервер подключен к другому клиенту или серверу, это приведет к фатальной ошибке.

Другой вариант - расширить существующее сообщение обратно совместимым способом. Например, вы можете отправить сообщение клиент-сервер, отправив события мыши, находящиеся вне области просмотра (и затем отправив окончательное событие мыши, вернувшееся обратно в реальное местоположение). Вы можете отправлять сообщения сервера клиенту, отправляя обновления буфера кадра, которые находятся вне области просмотра. Это не будет отображаться обычными клиентами.

...