使用双缓冲来进行屏幕共享

申请号 CN201110125188.9 申请日 2011-05-03 公开(公告)号 CN102238232A 公开(公告)日 2011-11-09
申请人 微软公司; 发明人 N·克哈恩; M·林; T·T·欧门; J·辛格;
摘要 本 发明 涉及远程桌面共享。远程桌面共享允许用户通过网络 访问 远程计算机上的应用程序和数据。中间计算机可以与主计算机以及一个或多个客户机计算机通信以便于远程桌面共享。主机可向中间计算机发送已编码关键 帧 和已编码更新。中间计算机可解码主机屏幕数据,并且对已解码图像应用后续更新,以使得中间计算机在第一缓冲区中具有几乎实况的主机屏幕图像。中间计算机上的第二缓冲区可存储用于已经加入会话的每一个客户机计算机的屏幕 编码器 的实例以及该客户机计算机具有的最新主机图像。编码器将几乎实况的屏幕图像与所存储的客户机计算机主机图像进行比较,以创建供传递至客户机计算机的已编码的差别屏幕图像更新。
权利要求

1.一种系统(100b),包括:
中间计算机(102b);
所述中间计算机(102b)包括处理器(142)和存储器(144);以及
所述中间计算机(102b)上的模(104b),所述模块(104b)被配置成使所述处理器(142):
响应于从主计算机(110b)接收请求所述中间计算机(102b)上的屏幕共享会话(106b)的通信,在所述中间计算机(102b)上建立所述屏幕共享会话(106b);
从提供包括已编码关键的已编码屏幕图像的所述主计算机接收通信;
解码所述已编码关键帧并将已解码关键帧存储在所述中间计算机(102b)上的第一缓冲区(140b)中;
从提供包括屏幕图像更新的已编码屏幕图像的所述主计算机(110b)接收通信;
解码所述已编码屏幕图像更新并且对所述第一缓冲区(140b)中的所存储的关键帧应用已解码的屏幕图像更新,以创建几乎实况的主机屏幕图像(121b);
从多个客户机计算机(112b、113b等)中的至少一个客户机计算机接收通信,所述通信包括所述至少一个客户机计算机(112b或113b等)的加入所述中间计算机(102b)上的所述屏幕共享会话(106b)的请求;
在所述中间计算机(102b)上在第二缓冲区(142b)中为所述多个客户机计算机(112b、
113b等)中的向所述中间计算机(102b)发送会话加入请求的每一个客户机计算机(112b或113b等)创建编码器的实例,所述第二缓冲区(142b)还包括所述多个客户机计算机(112b、113b等)中的发送所述会话加入请求的每一个客户机计算机(112b或113b等)的主机屏幕图像(130b、131b等)的最新版本;
响应于接收到来自所述至少一个客户机计算机(112b、113b等)的更新请求,向所述至少一个客户机计算机(112b或113b等)发送已编码的差别屏幕图像更新,所述已编码的差别屏幕图像更新包括所述至少一个客户机计算机(112b或113b等)的所述主机屏幕图像的所述最新版本与所述第一缓冲区(140b)中的所述几乎实况的主机屏幕图像之间的差别。
2.如权利要求1所述的系统,其特征在于,所述中间计算机是web服务器而不是代理服务器,并且其中所述主计算机和所述中间计算机之间以及所述中间计算机和所述至少一个计算机之间的通信是经由HTTP命令来发送的。
3.如权利要求1所述的系统,其特征在于,所述中间计算机创建用于存储来自所述主计算机的已编码的屏幕图像更新的FIFO队列,并且将从所述主计算机接收到的所述已编码的屏幕图像更新存储在所述FIFO队列中。
4.如权利要求3所述的系统,其特征在于,第一组客户机计算机的已编码的屏幕图像更新被存储在所述FIFO队列中,并且其中第二组客户机计算机的已编码的屏幕图像更新通过以下操作来生成:将所述几乎实况的主机屏幕图像与所述第二组客户机计算机中的客户机计算机的主机屏幕图像的最新版本进行比较以便为所述客户机计算机生成已编码的差别屏幕图像更新。
5.如权利要求1所述的系统,其特征在于,与加入所述屏幕共享会话的客户机计算机的数量成比例的存储器量用于所述中间计算机上的所述第二缓冲区。
6.一种方法(200),包括:
响应于从请求所述中间计算机上的屏幕共享会话的主计算机接收通信(202),在所述中间计算机上建立所述屏幕共享会话;
从提供包括已编码关键帧的已编码屏幕图像的所述主计算机接收通信(208);
解码所述已编码关键帧并将已解码关键帧存储在所述中间计算机上的第一缓冲区中(210);
从提供包括差别屏幕图像更新的已编码屏幕图像的所述主计算机接收通信(208);
解码所述差别屏幕图像更新并且对所述第一缓冲区中的所存储的关键帧应用已解码的差别屏幕图像更新,以在所述第一缓冲区中创建几乎实况的主机屏幕图像(210);
从多个客户机计算机中的至少一个客户机计算机接收请求加入所述中间计算机上的所述屏幕共享会话的通信(212);
在所述中间计算机上创建第二缓冲区(214);
在所述中间计算机上的第二缓冲区中为所述多个客户机计算机中的发送会话加入请求的每一个客户机计算机创建编码器的实例,并且其中在所述第二缓冲区中为所述多个客户机计算机中的发送所述会话加入请求的每一个客户机计算机存储主机屏幕图像的一个版本的副本;
响应于接收到来自所述至少一个客户机计算机的更新请求(216),向所述至少一个客户机计算机发送已编码的差别屏幕图像更新,所述差别屏幕图像更新包括所述至少一个客户机计算机的主机屏幕图像的一个版本的副本与存储在所述第一缓冲区中的所述几乎实况的主机屏幕图像之间的差别。
7.如权利要求6所述的方法,其特征在于,还包括
其中在所述中间计算机上,对所述第一缓冲区使用恒定的存储器量,并且其中对所述第二缓冲区使用与连接到所述屏幕共享会话的客户机计算机的数量成比例的存储器量。
8.如权利要求6所述的方法,其特征在于,还包括:
在所述中间计算机上创建FIFO队列并且将从所述主计算机接收到的已编码的屏幕图像更新存储在所述FIFO队列中。
9.如权利要求6所述的方法,其特征在于,还包括:
由受监视的条件触发,在将从所述主计算机接收到的已编码的屏幕图像更新存储在所述FIFO中与将所述几乎实况的主机屏幕图像存储在所述第一缓冲区中之间切换。
10.如权利要求8所述的方法,其特征在于,还包括:
将第一组客户机计算机的已编码的屏幕图像更新存储在所述FIFO队列中,并且其中第二组客户机计算机的已编码的屏幕图像更新通过以下操作来生成:将所述第一缓冲区中的所述几乎实况的主机屏幕图像与所述第二组客户机计算机中的每一个客户机计算机的主机屏幕图像的所述版本的所存储的副本进行比较以便为第二组客户机计算机生成已编码的差别屏幕图像更新。
11.一种包括计算机可执行指令的计算机可读存储介质,所述指令在被执行时使至少一个处理器:
响应于从请求所述中间计算机上的屏幕共享会话的主计算机接收通信(202),在所述中间计算机上建立所述屏幕共享会话(204);
从提供包括已编码关键帧的已编码屏幕图像的所述主计算机接收通信(208);
解码所述已编码屏幕图像并将已解码关键帧存储在所述中间计算机上的第一缓冲区中(210);
从提供包括屏幕图像更新的已编码屏幕图像的所述主计算机接收通信(208);
解码已编码的屏幕图像更新并且对所述第一缓冲区中的所存储的关键帧应用已解码的屏幕图像更新,以创建存储在所述第一缓冲区中的几乎实况的主机屏幕图像(210);
从多个客户机计算机中的至少一个客户机计算机接收通信,所述至少一个计算机请求加入所述中间计算机上的所述屏幕共享会话(212);
在所述中间计算机上在第二缓冲区中为所述至少一个计算机创建编码器的实例,所述第二缓冲区还为所述至少一个客户机计算机存储主机屏幕图像的一个版本(214);
响应于接收到来自所述至少一个客户机计算机的更新请求,向所述至少一个客户机计算机发送已编码的差别屏幕图像更新,所述差别屏幕图像更新包括所述主机屏幕图像的所存储的版本与所述第一缓冲区中的所述几乎实况的主机屏幕图像之间的差别(216)。
12.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令:
在所述中间计算机上创建FIFO队列,并且将从所述主计算机接收到的已编码的屏幕图像更新存储在所述FIFO队列中。
13.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令:
在所述中间计算机上对所述第一缓冲区使用恒定的存储器量,并且对所述第二缓冲区使用与加入所述屏幕共享会话的客户机计算机的数量成比例的存储器量。
14.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令:
将第一组客户机计算机的已编码的屏幕图像更新存储在所述FIFO队列中,并且通过将所述第一缓冲区中的所述几乎实况的主机屏幕图像与第二组客户机计算机的主机屏幕图像的所存储的版本进行比较来为所述第二组客户机计算机生成已编码的屏幕图像更新。
15.如权利要求11所述的计算机可读介质,其特征在于,还包括被执行时使得所述至少一个处理器执行以下步骤的计算机可执行指令:
监视指定条件,并且响应于所述监视,在将从所述主计算机接收到的已编码的屏幕图像更新存储在所述FIFO中与将所述几乎实况的主机屏幕图像存储在所述第一缓冲区中之间切换。

说明书全文

使用双缓冲来进行屏幕共享

技术领域

[0001] 本发明一般涉及用于远程桌面共享的方法和系统,尤其涉及用于使用双缓冲来进行屏幕共享的方法和系统。

背景技术

[0002] 远程桌面共享允许用户通过网络访问远程计算机上的应用程序和数据。例如,Remote Desktop是其中一个计算机通过查看第二计算机的桌面会话并且充当键盘鼠标输入的主人来“控制”该第二计算机的模型。类似地,远程会议软件使用户能够实时经由诸如因特网等网络与其他计算机用户、客户、客户机或同事开会。如因特网之类的网络是不可预测的。网络上的拥挤的通信可导致上传和下载速度变化。不同的网络连接带宽以及连接到网络的计算机的处理速度也可导致数据传输延迟。数据传输延迟可导致客户机看见过期的主机信息。

发明内容

[0003] 在屏幕共享中,主计算机可以连接到中间计算机,并且请求该中间计算机在该中间计算机上创建用于与一个或多个客户机计算机的屏幕共享应用程序的会话。主计算机可以向中间计算机发送当前屏幕图像。中间计算机可将该屏幕图像存储在第一缓冲区中。一个或多个客户机计算机可以加入中间计算机上的会话。可以在中间计算机上在第二缓冲区中为每一个屏幕共享客户机计算机创建屏幕编码器的新实例。第二缓冲区还可包括客户机计算机接收到的主机屏幕图像的最新版本。屏幕编码器使用主计算机的几乎实况的屏幕图像和第二缓冲区中的内容来创建已编码的差别更新图像数据流以被传递至客户机计算机。
[0004] 因为编码在中间计算机上完成使得更新不被存储在中间计算机上,所以可以在中间计算机上分配恒定的存储器量。因为客户机计算机屏幕使用主机的几乎实况的屏幕图像来更新,所以可以减少客户机计算机所需的带宽量。可以使用双缓冲或者双缓冲和维护FIFO(先进先出)队列的组合来通过使用中间计算机实现屏幕共享。
[0005] 提供本发明内容是为了以精简的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。附图说明
[0006] 在附图中:
[0007] 图1a示出了根据此处所公开的主题的各方面的实现桌面屏幕共享的系统100的示例;
[0008] 图1b示出了根据此处所公开的主题的各方面的使用FIFO队列来实现桌面屏幕共享的系统100a的示例;
[0009] 图1c示出了根据此处所公开的主题的各方面的使用双缓冲来实现桌面屏幕共享的系统100b的示例;
[0010] 图1d示出了根据此处所公开的主题的各方面的使用FIFO队列和双缓冲来实现桌面屏幕共享的系统100c的示例;
[0011] 图2是根据此处所公开的主题的各方面的用于使用双缓冲来进行桌面屏幕共享的方法300的示例的流程图;以及
[0012] 图3是示出其中可实现此处所公开的主题的各方面的计算环境的示例的框图

具体实施方式

[0013] 概览
[0014] 在包括支持和维护应用程序、网络会议等在内的屏幕共享应用程序中,用户必须与支持工程师或同事和/或其他用户共享他的计算机屏幕。屏幕共享可涉及在用户计算机(主计算机)上运行的主计算机程序,以及在支持工程师的计算机或其他用户的计算机(客户机计算机)上运行的客户机计算机程序。主计算机和客户机计算机连接到网络,诸如LAN、WAN或因特网。这些计算机通常由一个或多个防火墙来保护。防火墙通过阻塞到受保护计算机的入站连接来保护计算机免遭来自诸如因特网之类的外部网络的攻击。防火墙允许访问例如从受保护计算机到因特网的出站连接。
[0015] 如果主计算机受到防火墙保护,则客户机计算机连接到主计算机的尝试将被防火墙阻止,因为该连接是入站连接。为了克服该限制并且绕过网络安全措施,在客户机计算机和主计算机之间建立连接可以使用第三计算机作为客户机计算机和主计算机之间的中介来间接地实现。
[0016] 在一种方法中,主计算机首先发送其整个屏幕图像的快照。该快照被称为关键。在发送初始快照后,差别屏幕编码器随后只发送已编码的屏幕图像的已改变部分。只发送已编码形式的屏幕图像的已改变部分通常减少传送动画屏幕所需的存储器和带宽。一种这样的编码器是微软研究院的Titanium编码器,但存在本领域内已知的许多编码器。因此,屏幕的已改变部分由编码器编码并被周期性地发送到中间计算机。中间计算机可将已编码的屏幕图像更新存储在存储器中的FIFO(先进先出)队列中直到客户机计算机请求更新。
客户机计算机以服务器从主计算机接收到更新的次序来接收这些更新并且在客户机计算机上重放这些更新。
[0017] 虽然该过程有时能够工作良好,但当网络缓慢、存在计算机硬件限制或出于其他原因时,从主计算机到客户机计算机的已编码信息流可能减缓。例如,当客户机计算机慢于主计算机时,中间计算机上的队列可能变大,从而耗尽或消耗中间计算机的存储器。一种可能的解决方案是减缓来自主计算机的更新的发送或者请求主计算机发送关键帧以使得中间帧能够被丢弃。因为关键帧包括整个屏幕的内容,所以关键帧通常更大并因此通过网络传送关键帧更为资源昂贵。因此,发送关键帧也可减缓客户机计算机。
[0018] 如果误算轮询间隔或者客户机计算机的速度波动,则减缓主计算机上的更新间隔可能不如预期那样工作。同样,如果存在具有不同网络速度和不同硬件的多个客户机,则所有客户机计算机都将被具有最慢速度的客户机计算机减缓。
[0019] 根据此处所公开的主题的各方面,描述了一种双缓冲方法,其中在中间计算机上为会话重新创建主计算机的屏幕图像。当已编码数据(例如,关键帧数据和屏幕图像更新数据)被传递至中间计算机时,该中间计算机可将该数据解码成其原始格式,并且可将从主计算机接收到的初始关键帧存储在存储器中的缓冲区中,并且可对所存储的主机屏幕图像应用屏幕图像更新。结果,服务器始终具有主计算机的“几乎实况”的屏幕图像。
[0020] 当客户机计算机加入屏幕共享会话时,中间计算机可以为该客户机计算机创建屏幕编码器的实例。屏幕编码器和客户机计算机具有的屏幕图像的最新版本可被存储在中间计算机上的第二缓冲区中。可以在中间计算机上为加入会话的每一个客户机计算机创建屏幕编码器的实例,并且可以为每一个客户机计算机在第二缓冲区中存储主机屏幕图像的最新版本的副本。当客户机计算机请求更新时,编码器将第一缓冲区中的主机计算机的几乎实况的屏幕图像与为客户机计算机存储在第二缓冲区中的的主机屏幕图像的最新版本进行比较,以创建已编码的屏幕图像更新来发送到客户机计算机。
[0021] 由此,每一个客户机计算机都能够独立地与中间计算机一起工作,如它想要得那样频繁或不频繁地并以其自己的速度向中间计算机请求屏幕更新,而不阻碍任一其他客户机计算机。此外,当客户机计算机连接到会话时,客户机计算机接收主计算机的几乎实时的图像而不是初始关键帧,以及必须通过网络传送、解码的所有更新和在客户机计算机上重放的更新。其他方法中的存储屏幕图像更新的FIFO队列是不必要的。中间计算机上的由每一个客户机计算机消耗的存储器量是固定或恒定的。该存储器量不随FIFO队列的大小而增大或缩小。上述方法在网络速度波动和/或存在具有不同网络带宽和硬件处理速度能的多个客户机计算机的时候工作良好。在中间计算机上显示主计算机屏幕图像时的延迟被减少至由网络等待时间引起的延迟。
[0022] 虽然上述方法在客户机计算机慢于主计算机时通常是有利的,但例如当客户机计算机快于主计算机或者主计算机和客户机计算机的速度匹配时,该方法能够消耗中间计算机的更多资源是可能的。在这种情况下,可以应用使用FIFO队列和双缓冲方法两者的混合方法,或者动态算法可以驱动各种方法之间的切换,如下文中更全面地描述的。
[0023] 使用双缓冲的桌面屏幕共享
[0024] 图1a示出了根据此处所公开的主题的各方面的用于桌面屏幕共享的系统100的示例。系统100的全部或部分可驻留在诸如以下参照图3描述的计算机之类的一个或多个计算机上。系统100或其部分可以被提供为独立系统或插件或附件。
[0025] 系统100在其上执行的计算机可以是主计算机110和诸如客户机计算机1112、客户机计算机2113等一个或多个客户机计算机之间的中间计算机102。中间计算机102可以是web服务器计算机或代理服务器或网关。如果中间计算机102是web服务器,则中间计算机102缺少软件并且缺少绕过存在于代理服务器或网关上的防火墙或共享IP限制的硬件。中间计算机102可担当中介,以使得能够通过允许第一计算机(其上运行客户机程序的计算机)查看第二计算机(其上运行主机程序的主计算机)的桌面会话并且允许第一计算机担当第二计算机的输入设备输入(例如,键盘输入、鼠标输入、指示笔输入等)的主人来“控制”第二计算机。中间计算机102可以是用于在主计算机110和诸如客户机计算机1112、客户机计算机2113等多个客户机计算机之间共享的web会议或应用程序的中间计算机。
[0026] 中间计算机102可包括以下各项中的一个或多个:处理器(诸如处理器142)、存储器144、以及用于桌面屏幕共享的一个或多个模104。本领域公知的其他组件也可被包括其中但不在这里示出。可以理解,用于桌面屏幕共享的一个或多个模块104可被加载到存储器144中以使得诸如处理器142等一个或多个处理器执行归于用于桌面屏幕共享的一个或多个模块的动作。系统100可以包括以下各项中的一个或多个:屏幕共享会话106和高速缓存108。
[0027] 根据此处所公开的主题的各方面,主计算机110可连接到中间计算机102并且请求中间计算机102创建诸如屏幕共享会话106等新会话。如果中间计算机102是web服务器,则主计算机110可连接到该web服务器并且使用HTTPGET或POST命令来请求该web服务器使用安全(HTTPS)和非安全(HTTP)通信来创建诸如屏幕共享会话106等新会话。web服务器可以从主机计算机110接收该通信,并且作为响应可建立所请求的会话(例如,屏幕共享会话106),并且可经由HTTP GET或POST命令来将会话的会话专用标识符返回给主计算机110。
[0028] 由于web服务器可具有多个不同的用户的会话,因此会话专用标识符可提供为该特定主机(以及可加入会话的任何客户机计算机)标识会话的机制。主计算机110可使用编解码器,诸如但不限于:诸如 Titanium编解码器等屏幕编解码器、诸如Direct Stream Digital、自由无损音频编解码器等音频编解码器、诸如BiM、连续媒体标记语言等文本编解码器、诸如Alpary或Blackbird等视频编解码器、或者任何有损或无损编解码器,无论是现在已知的还是将来开发的。根据此处所公开的主题的各方面,可使用编解码器来向中间计算机102发送已编码屏幕图像和已编码的屏幕图像更新。
[0029] 编解码器是能够编码和/或解码数字数据流或信号或其他数据流或信号的设备或计算机程序。编解码器编码数据流或信号以便传输、存储或加密,或者解码数据流或信号以便回放或编辑。编解码器可用于视频会议和流媒体应用程序。例如,摄像机的模数转换器(ADC)可将模拟照相机模拟信号转换成数字信号。数字信号然后可通过视频压缩器来传递以便进行数字传输或存储。接收设备可通过视频解压器来运行信号并且然后通过数模转换器(DAC)来进行模拟显示。
[0030] 根据此处所公开的主题的各方面,主计算机110可使用编解码器来通过使用HTTP GET或POST命令向web服务器发布初始已编码屏幕图像和/或已编码的差别屏幕图像更新。图像的发布能够以规则(恒定)的间隔或以变化的间隔进行。每一个屏幕图像更新都能够加上时间戳以便在客户机计算机1112上按时间顺序重放。web服务器可将屏幕图像和屏幕图像更新作为先进先出(FIFO)列表高速缓存在存储器中(例如,高速缓存108中)。web服务器可指示主计算机110改变其屏幕图像更新间隔或屏幕分辨率
[0031] 诸如客户机计算机1112、客户机计算机2113等一个或多个客户机计算机可连接到web服务器并使用HTTP GET或POST命令来请求加入由会话专用标识符标识的屏幕共享会话106。客户机计算机,即客户机计算机1112、客户机计算机2113等可以指定屏幕共享会话106的会话专用标识符,或者本领域内已知的会话管理软件可管理主计算机110和客户机计算机之间的会话发起。客户机计算机,即客户机计算机1112、客户机计算机2113等使用HTTPGET或POST命令来向web服务器请求由会话专用标识符ID标识的屏幕共享会话106的最新或当前屏幕图像。客户机计算机(例如,客户机计算机1112)还可使用HTTP GET或POST命令来向web服务器发送在客户机计算机1112处始发的任何用户设备输入事件。
[0032] web服务器可跟踪从该web服务器传送至客户机计算机的屏幕图像和屏幕图像更新,并且可以使用一个或多个HTTP GET或POST命令向客户机计算机仅发送已更新的屏幕图像。发送到客户机计算机1112的屏幕图像数据可任选地发自FIFO列表高速缓存108中的存储。web服务器可将所有已更新的屏幕图像数据作为一个分组发送或者可以在多个分组中发送已更新的屏幕图像数据。屏幕可作为JSON对象或以任何其他方式发送。客户机计算机1112可处理从web服务器接收到的屏幕更新。所述过程可以继续直到屏幕共享会话106被关闭。所述过程可用于允许客户机计算机1112控制主计算机110并且允许客户机计算机1112担当主计算机110的键盘和鼠标输入的主人。屏幕共享会话106可由主计算机110或客户机计算机1112或web服务器102关闭。所述过程可用于允许一组计算机(例如,客户机计算机1112、客户机计算机2113等)在诸如与主计算机110的网络会议等屏幕共享或应用程序共享会话中协作。
[0033] 发布屏幕更新的间隔可由web服务器根据FIFO列表中等待使用HTTPGET或POST命令来发送到客户机计算机的屏幕更新分组的数量来改变。例如,慢于主计算机的客户机计算机可导致高速缓存108中的FIFO列表变得比所需要的大。作为响应,web服务器可告知主计算机110减缓其更新间隔(例如,增加更新之间的时间间隔)。类似地,如果高速缓存108中的FIFO列表在更新大小或数量方面变得非常小,则web服务器可告知主计算机110提高更新间隔的速度(即,减小更新间隔以使得在给定时间段内作出更多更新)。确定更新间隔的公式可以是其中间隔长度直接与FIFO列表中的待决项的大小或数量成比例的线性等式。
[0034] 或者,中间计算机102可以是代理服务器或网关,并且更新可被如参考图1b描述地应用于客户机计算机。
[0035] 图1b示出了根据此处所公开的主题的各方面的用于桌面屏幕共享的系统100a的示例。系统100a的全部或部分可驻留在诸如以下参照图3描述的计算机之类的一个或多个计算机上。系统100a或其部分可以被提供为独立系统或插件或附件。
[0036] 系统100在其上执行的计算机可以是主计算机110a和诸如客户机计算机1112a、客户机计算机2113a等一个或多个客户机计算机之间的中间计算机,诸如中间计算机102a。中间计算机102a可以是如以上参考图1a描述的web服务器计算机或代理服务器或网关。
[0037] 中间计算机102a可包括以下各项中的一个或多个:处理器(诸如处理器142)、诸如存储器144等存储器、以及用于使用FIFO队列来进行远程桌面屏幕共享的一个或多个模块104a。本领域公知的其他组件也可被包括其中但不在这里示出。可以理解,用于使用FIFO队列来进行远程桌面屏幕共享的一个或多个模块104a可被加载到存储器144中,以使得诸如处理器142等一个或多个处理器执行归于用于使用FIFO队列来进行远程桌面屏幕共享的一个或多个模块104a的动作。系统100a还可以包括以下各项中的一个或多个:屏幕共享会话106a和诸如FIFO高速缓存108a等高速缓存。主计算机110a可包括用于编码被发送到中间计算机102a的数据的编码器114a。客户机计算机可包括诸如客户机计算机1112a上的解码器1116和客户机计算机2113a上的解码器2117等用于解码从中间计算机
102a接收到的已编码数据的解码器。
[0038] 根据此处所公开的主题的各方面,主计算机110a可连接到中间计算机102a并且请求中间计算机102a创建诸如屏幕共享会话106a等新屏幕共享会话。作为响应,中间计算机102a可创建屏幕共享会话106a并且可创建高速缓存,诸如FIFO高速缓存108a。主计算机110a可首先向中间计算机102a发送被称为关键帧的主机的整个屏幕的快照。
[0039] 中间计算机102a可将该关键帧存储在FIFO高速缓存108a中,例如,在图1b中由FIFO高速缓存108a中的关键帧120a示出。该关键帧还可被保留在主计算机110a的编码器114a的存储器中。屏幕的已改变部分可由编码器114a编码并可以周期性地被发送到中间计算机102a。中间计算机102a可将已编码的差别屏幕图像更新存储在存储器中的FIFO高速缓存108a中,直到被一个或多个客户机计算机请求。存储在FIFO高速缓存108a中的已编码的差别屏幕图像更新在图1b中由更新1121a、更新2122a、更新3123a等到更新N124a示出。尽管只在图1b中示出了一个会话,即屏幕共享会话106a,但可以理解,中间计算机102a可以为多组计算机(未示出)建立多个会话(未示出),将会话专用标识符分配给与不同的计算机组相关联的不同会话。
[0040] 诸如客户机计算机1112a、客户机计算机2113a等多个计算机可请求加入与主计算机110a相关联的会话(例如,屏幕共享会话106a)。作为响应,中间计算机102a可向每一个客户机计算机发送初始关键帧(关键帧120a),之后以中间计算机102a从主计算机110a接收到更新的次序来发送这些更新。由此,在任何时刻,已经加入屏幕共享会话106a的每一个客户机计算机都可能已经接收到、解码了并应用了不同数量的更新,在图1b中由具有指向更新N124a的指针131a的客户机1112a以及具有指向更新1121a的指针132a的客户机计算机2113a示出。指针可由中间计算机102a或附连到会话的客户机计算机来维护。
[0041] 图1c示出了根据此处所公开的主题的各方面的使用双缓冲来实现桌面屏幕共享的系统100b的示例。系统100b的全部或部分可驻留在诸如以下参照图3描述的计算机之类的一个或多个计算机上。系统100b或其部分可以被提供为独立系统或插件或附件。
[0042] 系统100b在其上执行的计算机可以是主计算机110b和诸如客户机计算机1112b、客户机计算机2113b等一个或多个客户机计算机之间的中间计算机102b。中间计算机102b可以是如以上参考图1a描述的web服务器计算机或代理服务器或网关。
[0043] 中间计算机102b可包括以下各项中的一个或多个:处理器(诸如处理器142)、存储器144、用于使用双缓冲来进行桌面屏幕共享的一个或多个模块104b。本领域公知的其他组件也可被包括其中但不在这里示出。可以理解,用于使用双缓冲来进行桌面屏幕共享的一个或多个模块104b可被加载到存储器144中,以使得诸如处理器142等一个或多个处理器执行归于用于使用双缓冲来进行桌面屏幕共享的一个或多个模块104b的动作。系统100b还可以包括以下各项中的一个或多个:屏幕共享会话106b以及由缓冲区1140b和缓冲区2142b表示的第一和第二缓冲区。主计算机110b可包括用于编码被发送到中间计算机102b的数据的编码器114b。客户机计算机可包括诸如客户机计算机1112b上的解码器
1116b和客户机计算机2113b上的解码器2117b等用于解码从中间计算机102b接收到的已编码数据的解码器。
[0044] 根据此处所公开的主题的各方面,描述了一种双缓冲方法,其中在中间计算机102b上为屏幕共享会话106b重新创建主计算机的屏幕图像。当中间计算机102b接收到已编码的屏幕图像更新数据时,中间计算机102b解码该更新并将其应用于存储器中的主机屏幕图像。结果,中间计算机102b始终具有非常接近于主计算机的实况屏幕图像的图像,如下文中更全面地描述的。
[0045] 根据此处所公开的主题的各方面,主计算机110b可连接到中间计算机102b并且请求中间计算机102b创建诸如屏幕共享会话106b等新会话。作为响应,中间计算机102b可创建屏幕共享会话106b并且创建用于存储重新创建的当前图像(例如,主计算机110b的图像0121b)的第一缓冲区(例如,缓冲区1140b)。缓冲区1140b还可包括诸如解码器0119b等用于解码从主计算机110b接收到的已编码信息的解码器。例如,主计算机110b可将表示关键帧的已编码数据传递至中间计算机102b。中间计算机102b可使用解码器
0119b来将已编码数据解码成其原始位图格式并存储该图像,例如图像0121b。当中间计算机102b接收到表示对存储器中的主机屏幕图像的更新的已编码数据时,可由解码器0119b来解码该更新并将其应用于存储器中的缓冲区140b中的主机屏幕图像(图像0121b)。结果,中间计算机102b具有主计算机的几乎实况的屏幕图像。
[0046] 可以在中间计算机102b的存储器144中创建第二缓冲区,例如缓冲区2142b。可以在中间计算机102b上的缓冲区2142b中为已经加入屏幕共享会话106b的每一个客户机计算机创建屏幕编码器的实例。例如,可以在中间计算机102b上的缓冲区2142b中为客户机计算机1112b创建编码器1144b,并且可以在中间计算机102b上的缓冲区2142b中为客户机计算机2113b创建编码器2145b等,并且对于加入屏幕共享会话106b的每一个客户机计算机以此类推。编码器(例如,编码器1144b、编码器2145b等)可使用主机屏幕的几乎实况的屏幕图像、图像121b以及客户机计算机具有的主机屏幕图像的最新版本的副本来创建已编码数据流以被传递至客户机计算机。例如,当客户机计算机1112b连接到中间计算机102b并且请求更新时,编码器1144b可通过将图像1130b与图像0121b进行比较来为客户机计算机1112b创建已编码的差别屏幕更新,并且将该已编码的差别屏幕图像发送到客户机计算机1112b。图像1130b然后被设为图像0121b。类似地,当客户机计算机2113b连接到中间计算机102b并且请求更新时,编码器2145b可通过将图像2131b与图像0121b进行比较来为客户机计算机2113b创建已编码的差别屏幕更新,并且将该已编码的差别屏幕图像发送到客户机计算机2113b。图像2131b然后被设为图像0121b。
[0047] 连接到会话的每一个客户机计算机由此能够以其自己的速度独立地与中间计算机102b以其一起工作。结果,当客户机计算机连接到会话时,该客户机计算机接收主计算机的几乎实时的图像;每一个客户机都能够如它想要得那样频繁或不频繁地向服务器请求屏幕更新。中间计算机上的存储图像更新的FIFO队列是不必要的。由中间计算机上的第一缓冲区使用的存储器的量是固定或恒定的。中间计算机上的由每一个客户机计算机消耗的存储器量是固定或恒定的,中间计算机上的由所有客户机计算机消耗的总存储器量与加入屏幕共享会话的客户机计算机的数量成比例。上述方法在网络速度波动以及存在具有不同网络带宽和硬件速度的多个客户机的时候工作良好。在客户机屏幕上显示主机屏幕的延迟可能被减少至由网络等待时间引起的延迟量。
[0048] 图1d示出了根据此处所公开的主题的各方面的用于使用如参考图1b描述的FIFO队列108b和如参考图1c描述的双缓冲来进行桌面屏幕共享的系统100c的示例。中间计算机102c可利用动态算法来在使用FIFO队列108b和使用缓冲区1140b和缓冲区2142b的双缓冲方法之间切换。例如,由某一指定因素或因素的组合触发,所有客户机计算机都可以从使用双缓冲切换至使用FIFO队列,或者相反。另选地或另外地,一组客户机计算机可被分配至FIFO方法,而另一组客户机计算机可被分配至双缓冲方法。例如,超出处理能力阈值的客户机计算机(例如,客户机计算机2113b)可被设为使用FIFO队列108b,而所有其他客户机计算机(例如,客户机计算机1112b)可被设为使用双缓冲方法。可以监视总体系统的性能并且基于中间计算机102c的存储器使用量、cpu使用量等根据动态算法技术来调整该性能。
[0049] 图2是根据此处所公开的主题的各方面的用于使用上述双缓冲方法或双缓冲和FIFO队列的组合来共享桌面屏幕的方法200的示例。图2或其各部分可描述如参考以上图1a-d描述的系统。如本领域技术人员将会理解的,下述动作能够以不同于图2所描绘的顺序发生。图2中描绘的一些动作可以是可任选的或者可以被省略。在202,中间计算机可以从请求屏幕共享会话的主计算机接收通信。在204,中间计算机可以为主计算机建立屏幕共享会话。中间计算机可以生成为主计算机建立的会话的会话专用标识符,并且可将该会话专用标识符发送到主计算机。
[0050] 在206,中间计算机可建立用于存储解码器以及用于存储中间计算机具有的主计算机的最新屏幕图像的副本的第一缓冲区。在208,中间计算机可以从主计算机接收已编码屏幕图像,诸如初始关键帧、后续关键帧或已编码的差别屏幕图像更新。在210,如果中间计算机接收到的已编码屏幕信息表示关键帧,则该中间计算机可解码该关键帧并将已解码屏幕图像存储在第一缓冲区中。如果已编码屏幕信息表示差别屏幕图像更新,则中间计算机可解码该差别屏幕图像更新并将其应用于第一缓冲区中的所存储的已解码屏幕图像。
[0051] 在212,可由中间计算机从一个或多个客户机计算机接收加入会话的请求。在214,中间计算机可以为加入会话的每一个客户机计算机创建编码器的实例。中间计算机可建立为加入会话的每一个客户机计算机存储解码器和屏幕图像的第二缓冲区。在216,响应于接收到来自客户机计算机的对更新的请求,中间计算机可将该客户机计算机的存储在第二缓冲区中的最新屏幕图像与第一缓冲区中的屏幕共享会话的屏幕图像进行比较,并且可以向客户机计算机发送已编码的差别屏幕图像更新。
[0052] 可任选地,在218,由某一个或多个因素或条件触发,可由中间计算机创建用于存储已编码的差别屏幕图像更新的FIFO队列。在220,可以指定一组客户机计算机使用FIFO队列来执行屏幕共享,而另一组客户机计算机可被设为使用双缓冲来执行屏幕共享,如上文中更全面地描述的。或者,在222,由某一个或多个受监视的条件触发,可将对于所有客户机计算机的屏幕共享模式切换为FIFO模式,并且在224,由某一个或多个受监视的条件触发,可将对于所有客户机计算机的屏幕共享模式切换回双缓冲模式。该过程可以继续直到屏幕共享会话被关闭。
[0053] 合适计算环境的示例
[0054] 为了提供有关本文所公开的主题的各个方面的上下文,图3以及以下讨论旨在提供其中可以实现各实施例的合适计算环境510的简要概括描述。尽管本文所公开的主题是在诸如程序模块等由一个或多个计算机或其它计算设备执行的计算机可执行指令的通用上下文中描述的,但本领域技术人员将认识到,本文所公开的主题的各部分还能够结合其它程序模块和/或硬件和软件的组合来实现。通常,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理人为产物、数据结构等。通常,程序模块的功能可以按需在各个实施例中进行组合或分布。计算环境510只是合适的操作环境的一个示例,并且不旨在对此处所公开的主题的使用范围或功能提出任何限制。
[0055] 参照图3,描述了计算机512形式的用于线性栈上高效恢复协同例程的计算设备。计算机512可包括处理单元514、系统存储器516和系统总线518。处理单元514可以是各种处理器中的任何一种。还可以使用双微处理器及其他多处理器体系结构作为处理单元
514。系统存储器516可包括易失性存储器520和非易失性存储器522。非易失性存储器
522可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可包括可充当外部高速缓冲存储器随机存取存储器(RAM)。系统总线518将包括系统存储器516的系统物理人为产物耦合到处理单元514。系统总线518可以是几种类型的总线结构中的任何一种,包括存储器总线、存储控制器、外围总线、外部总线或局部总线,并且可以使用各种可用总线体系结构中的任一种。
[0056] 计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移动和不可移动介质。计算机存储介质可以通过用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机512访问的任何其他瞬态或非瞬态介质。
[0057] 将理解,图3描述了可充当用户与计算机资源之间的媒介的软件。该软件可以包括可存储在盘存储524上的操作系统528,该操作系统可控制并分配计算机系统512的资源。盘存储524可以是通过诸如接口526的不可移动存储器接口连接到系统总线518的硬盘驱动器。系统应用程序530利用由操作系统528通过存储在系统存储器516中或者存储在盘存储524上的程序模块532和程序数据534对资源的管理。应该明白,计算机可用各种操作系统或操作系统的组合来实现。
[0058] 用户可通过输入设备536向计算机512输入命令或信息。输入设备536包括但不限于定点设备,诸如鼠标、跟踪球、指示笔、触摸垫、键盘、话筒等。这些及其他输入设备通过系统总线518经由接口端口538连接到处理单元514。接口端口538可表示串行端口、并行端口、通用串行总线(USB)等。输出设备540可与输入设备使用相同类型的端口。提供输出适配器542以举例说明存在像监视器、扬声器、以及打印机的需要特定适配器的一些输出设备540。输出适配器542包括但不限于,在输出设备540和系统总线518之间提供连接的视频卡和声卡。其他设备和/或设备系统,诸如远程计算机544,可提供输入和输出两种能力。
[0059] 计算机512可以使用到诸如远程计算机544之类的一个或多个远程计算机的逻辑连接来在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相对于计算机512所描述的元件,但在图4中仅示出了存储器存储设备546。远程计算机544可经由通信连接550逻辑地连接。网络接口548涵盖诸如局域网(LAN)和广域网(WAN)这样的通信网络,但也可包括其他网络。通信连接550是指用来将网络接口548连接到总线518的硬件/软件。连接550可以在计算机512内部或外部并且包括诸如调制解调器(电话、电缆、DSL和无线)和ISDN适配器、以太网卡等内部和外部技术。
[0060] 应该理解,所示网络连接仅是示例,并且可以使用在计算机之间建立通信链路的其它手段。本领域的普通技术人员可以理解,计算机512或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,本文所公开的主题涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。本文所公开的主题的各方面可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本文所公开的主题的各方面也可应用于具有编程语言功能、解释和执行能力的独立计算设备。
[0061] 此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本文所公开的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本文所公开的主题的各方面的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用域专用编程模型各方面的创建和/或实现的一个或多个程序可用高级过程编程语言或面向对象的编程语言来实现以与计算机系统通信。然而,若有需要,程序也可以以以汇编或机器语言来实现。在任一情况下,语言都可以是编译的或解释的语言,并与硬件实现相结合。
[0062] 虽然已结合附图描述了本文所公开的主题,但是应理解,可作出修改以按不同方式执行相同功能。
QQ群二维码
意见反馈