2013-09-30 2 views
1

Я работаю над проектированием VNC-сервера. В соответствии со стандартным протоколом VNC/RFB я получаю запрос буфера кадра, содержащий координаты x, координату y, ширину и высоту. Мой сервер должен отправлять «измененные регионы только то, что отправляет только те прямоугольники, которые отличаются от клиента».Как отправить обновление буфера кадров в VNC?

Я знаю, на это уже был дан ответ "How RealVNC works?". Но мой вопрос: a) Как отправить только прямоугольники, которые были изменены? б) Откуда мы знаем, что обновление должно быть отправлено в «эти» много прямоугольников?

И этот же вопрос был задан в «RFB Protocol : Send incremental framebuffer update», но ответа нет. Пожалуйста, помогите мне в решении этого вопроса. Я работаю в C.

Заранее спасибо.

+0

Что у вас есть дисплей вашего VNC-сервера - рабочий стол пользователя? Если да, то на какую ОС вы пишете клиент? – duskwuff

+0

@duskwuff: U может сказать, что он отображает рабочий стол пользователя. Напр. если мобильный телефон подключен к информационно-развлекательной системе автомобиля, мой сервер будет на мобильной стороне. поэтому в основном мне нужно отправить свой мобильный экран. Таким образом, он должен иметь возможность отображать видео или снимок экрана. –

ответ

0

Я думаю, вы немного смущены о стандарте.

RFB Standard

Однако, если по какой-либо причине клиент потерял содержимое определенной территории, которую он нуждается, то клиент посылает FramebufferUpdateRequest с набором дополнительных к нулю (ложь). Этот просит, чтобы сервер как можно скорее отправил все содержимое заданной области . Область не будет обновляться с помощью CopyRect кодирования

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

RFB Standard

Если клиент не потерял содержимое области, в которой он заинтересован, то он посылает FramebufferUpdateRequest с инкрементным набором ненулевого (истинной). Если и когда есть изменения в области фреймбуфера, сервер отправит файл FramebufferUpdate.

Это означает, что если вы получите невключенный запрос (инкрементный флаг, установленный в true, я знаю, его немой), вы отправляете любые изменения, которые произошли на экране.

b) Как мы узнаем, что обновление должно быть отправлено в «эти» много прямоугольников?

Вы можете отправить их в любом сочетании прямоугольников, которое вы хотите. Несмотря на то, что я стал свидетелем того, что клиенты перестали отправлять обновления в фанк-порядке. Но вы можете отправить 1 прямоугольник или 1000 прямоугольников, это зависит от вас.

Смежные вопросы