【问题标题】:How to send frame buffer update in VNC?如何在 VNC 中发送帧缓冲区更新?
【发布时间】:2014-06-19 06:14:04
【问题描述】:

我正在设计一个 VNC 服务器。根据标准 VNC/RFB 协议,我得到一个帧缓冲区请求,其中包含 x 坐标、y 坐标、宽度和高度。我的服务器必须发送“仅更改区域,即仅发送与客户端不同的矩形”。

我知道它已经在“How RealVNC works?”中得到了回答。但我的问题是 a)如何只发送更改的矩形? b) 我们如何知道必须在“这些”许多矩形中发送更新?

在“RFB Protocol : Send incremental framebuffer update”中也提出了同样的问题,但没有任何回应.. 请帮我解决这个问题。我在 C 工作。

提前致谢。

【问题讨论】:

  • 您的 VNC 服务器显示什么 - 用户的桌面?如果是这样,您正在为什么操作系统编写客户端?
  • @duskwuff:你可以说它正在显示用户的桌面。例如。如果手机连接到汽车信息娱乐系统,我的服务器将在移动端。所以基本上我需要发送我的手机屏幕。所以它应该能够显示视频或图像的屏幕截图。

标签: c vnc vnc-server


【解决方案1】:

我认为您对标准有点困惑。

RFB Standard

但是,如果由于某种原因客户端丢失了 它需要的特定区域,然后客户端发送一个 增量设置为零 (false) 的 FramebufferUpdateRequest。这个 请求服务器发送指定区域的全部内容 尽早。该区域不会使用 CopyRect 更新 编码

这意味着,如果您收到增量请求,则发送整个部分,因为客户端已经忘记了那里的内容。您可以以您认为合适的任何矩形配置发送此部分。

RFB Standard

如果客户端没有丢失它所在区域的任何内容 感兴趣,然后它发送一个带有增量的 FramebufferUpdateRequest 设置为非零(真)。如果以及何时对指定的网络进行更改 帧缓冲区的区域,服务器将发送帧缓冲区更新。

这意味着如果你收到一个非间接请求(增量标志设置为 true,我知道,它是愚蠢的),你会发送屏幕上发生的任何更改。

b) 我们如何知道必须在“这些”许多矩形中发送更新?

您可以使用任何您希望的矩形组合发送更新。尽管我目睹了客户因发送时髦订单的更新而崩溃。但是您可以发送 1 个矩形或 1000 个矩形,这取决于您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多