首页 / 专利库 / 多媒体工具与应用 / 流式传输 / 适用于远程桌面应用程序的个体应用程序窗口的流式传输

适用于远程桌面应用程序的个体应用程序窗口的流式传输

阅读:187发布:2020-05-08

专利汇可以提供适用于远程桌面应用程序的个体应用程序窗口的流式传输专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种适用于远程桌面应用程序的个体应用程序窗口的 流式传输 。本公开涉及流式传输远程桌面的个体应用程序窗口和/或其他桌面元素。用于表示不相关的桌面区域的数据可以用可以在 视频流 中高度压缩的较低熵数据和/或用表示其他可视内容的数据代替。视频流还可以包括用于在本地桌面上呈现桌面元素的桌面元数据(例如,桌面可视物的 位置 等)。可以在本地桌面上的代理窗口中呈现应用程序窗口的桌面可视物。,下面是适用于远程桌面应用程序的个体应用程序窗口的流式传输专利的具体信息内容。

1.一种方法,包括:
确定远程桌面的要包括在至本地设备的本地桌面的视频流中的至少一个应用程序窗口;
捕获窗口数据,所述窗口数据包括:
对应于窗口可视物的图像数据;以及
所述至少一个应用程序窗口的窗口属性;用较低熵数据覆写所述图像数据的一部分;
将对应于所述窗口可视物的所述图像数据的剩余部分和所述图像数据的用较低熵数据覆写的所述部分编码为所述视频流;以及
将包括所述视频流和表示所述至少一个应用程序窗口的所述窗口属性的窗口元数据的流发送到所述本地桌面。
2.如权利要求1所述的方法,其中对应于窗口可视物的所述图像数据包括表示所述远程桌面的远程桌面外观,并且所述方法还包括:
将模板应用于所述远程桌面外观,以移除所述远程桌面外观的至少一些可视内容,其中所述图像数据的用较低熵数据覆写的所述部分对应于通过应用所述模板移除的所述远程桌面外观的所述可视内容。
3.如权利要求1所述的方法,还包括将所述至少一个应用程序窗口的所述窗口可视物分成虚拟,其中所述虚拟帧被编码并作为所述视频流的帧被发送。
4.如权利要求1所述的方法,其中所述窗口属性包括标识符和以下中的至少一个:应用程序窗口的标题、几何形状、样式或坐标。
5.如权利要求1所述的方法,其中确定要包括在所述流中的所述远程桌面的所述至少一个应用程序窗口包括:
接收与要包括在所述流中的应用程序窗口的列表相对应的进程列表;以及至少部分地基于每个所述应用程序窗口在所述远程桌面上可见,由所述进程列表确定从所述应用程序窗口的列表中对应用程序窗口的选择。
6.如权利要求1所述的方法,其中使用结构化的逐字节差异在所述流中发送所述窗口元数据,以对所述应用程序窗口的所述窗口属性进行增量编码。
7.如权利要求1所述的方法,还包括:
识别与所述远程桌面相关联的窗口创建事件或窗口销毁事件中的一个或更多个,并且至少部分地基于所述窗口创建事件或所述窗口销毁事件,更新要包括在所述流中的应用程序窗口的列表。
8.如权利要求1所述的方法,其中所述编码还针对所述窗口元数据,并且所述窗口元数据位于所述视频流的至少一个报头中。
9.如权利要求1所述的方法,其中所述视频流包括所述至少一个应用程序窗口的所述窗口可视物的每像素透明度信息。
10.如权利要求1所述的方法,其中所述编码包括将所述至少一个应用程序窗口的所述窗口可视物的阿尔法信息附加到所述视频流。
11.如权利要求1所述的方法,其中所述编码包括:
转码所述至少一个应用程序的所述窗口可视物的每像素透明度信息;以及将所述每像素透明度样本的组附加到所述视频流,作为所支持的颜色空间的单个颜色样本。
12.如权利要求11所述的方法,其中所述颜色空间是亮度-色度(YUV)颜色空间或红绿蓝(RGB)颜色空间。
13.如权利要求1所述的方法,还包括:
至少部分地基于所述窗口模式的改变,检测所述至少一个应用程序窗口的窗口模式的改变,以及切换捕获所述窗口可视物的捕获模式。
14.一种方法,包括:
接收至本地设备的本地桌面的远程桌面的一个或更多个应用程序窗口的编码流,所述编码流包括:
表示所述一个或更多个应用程序窗口的窗口属性的窗口元数据,
在所述编码流的视频流中编码的所述一个或更多个应用程序窗口的窗口可视物数据,以及
对应于所述远程桌面的一个或更多个未选区域的可视数据,其中将对应于所述一个或更多个未选区域的所述可视数据替换为较低熵数据,所述较低熵数据以比所述一个或更多个应用程序窗口的所述窗口可视物数据更高的压缩率在所述编码流中编码;从所述编码流中解码所述窗口可视物数据和所述窗口元数据;从所述编码流中过滤对应于所述远程桌面的所述一个或更多个未选区域的所述可视数据;以及
至少部分地基于对应于所述应用程序窗口的所述窗口属性,在所述本地桌面上呈现来自所述编码流的窗口可视物,所述窗口可视物对应于所述应用程序窗口的代理窗口中的所述一个或更多个应用程序窗口中的应用程序窗口。
15.如权利要求14所述的方法,其中对所述窗口可视物数据和所述窗口元数据的解码来自表示所述窗口可视物数据和所述窗口元数据的所述视频流中的至少一个视频帧
16.如权利要求14所述的方法,其中所述窗口属性在所述远程桌面的第一坐标系中表示,所述第一坐标系与所述本地桌面的第二坐标系不同,并且所述方法还包括将所述窗口属性中的至少一些从所述第一坐标系转换到所述第二坐标系,用于在所述代理窗口中呈现所述窗口可视物数据。
17.如权利要求14所述的方法,其中所述窗口属性包括标识符和以下中的至少一个:所述应用程序窗口的标题、几何形状、样式或坐标。
18.一种方法,包括:
确定远程桌面的要包括在至本地设备的本地桌面的流中的至少一个应用程序窗口;
确定要从所述流中排除的所述远程桌面的一部分;
从第一可视物外观移除所述远程桌面的所述部分,以生成第二可视物外观;
将包括所述至少一个应用程序窗口的窗口可视物而不包括所述远程桌面的所述部分的所述第二可视物外观编码到所述流中;以及
将包括所述第二可视物外观的所述流发送到所述本地桌面。
19.如权利要求18所述的方法,其中移除所述远程桌面的所述部分还包括:将模板应用于所述第一可视物外观,以移除所述远程桌面的所述部分,以生成所述第二可视物外观。
20.如权利要求18所述的方法,还包括将所述第二可视物外观分成虚拟帧的一个或更多个页面,其中将所述虚拟帧编码并作为所述流的所述一个或更多个帧进行发送。

说明书全文

适用于远程桌面应用程序的个体应用程序窗口的流式传输

[0001] 相关申请的交叉引用
[0002] 本申请要求于2018年10月26日提交的、申请号为62/751,366的美 国临时申请的权益,该申请的全部内容通过引用并入本文中。

背景技术

[0003] 用于远程计算的常规方法可以通过将远程计算设备的整个桌面流式 传输到用户的本地设备(例如,客户端)来向用户提供对在远程计算设备 (例如,服务器)上运行的软件访问。结果,本地设备的用户可能只能 选择在单个窗口内或作为全屏视图查看本地设备上的整个远程桌面的表示。 为了访问远程计算设备的软件,用户必须与流式传输到用户的本地设备上 的整个远程桌面交互。然而,用户可能对查看所选窗口和/或与其交互感兴 趣,或仅对查看远程计算设备的整个桌面的子集和/或与其交互感兴趣。在 这种情况下,产生整个远程桌面的这些常规方法不必要地消耗过多的带宽、 处理功率和能量以生成远程桌面并将其发送到本地设备。此外,在不应准 许用户完全访问整个远程桌面而是仅准许访问某组远程应用程序的情况下, 可能会出现安全问题。
[0004] 另外,常规系统可能不提供远程桌面与本地设备的本地桌面之间的 无缝整合。例如,在远程桌面被流式传输到窗口中的情况下,显示远程桌 面的窗口可以允许远程桌面和本地桌面之间的某种程度的交互(例如,拖 放功能),但是可以始终将本地桌面的应用程序窗口与远程桌面的应用程序 窗口分离。作为另一示例,当与远程桌面的任何应用程序交互时,整个远 程桌面窗口可以以本地桌面的Z顺序显示在每个应用程序窗口上方(以上) 或下方(以下)。此外,虽然一些系统可以流式传输单个应用程序窗口的客 户端区域,但非客户端区域(超出直接包含在客户端区域中的图形内容(例 如窗口框架),和在窗口框架上通过用户界面小部件提供的任何功能)可能 无法供客户端桌面使用。发明内容
[0005] 在其他方面,本公开涉及用于远程桌面应用程序的个体应用程序窗 口的流式传输。与将整个远程桌面流式传输到本地设备的本地桌面的常规 系统相比,所公开的方法允许将远程桌面的任意数量的应用程序窗口和/或 其他桌面元素(例如,弹出通知)流式传输到本地桌面,而无需在流中包 括整个远程桌面。为此,捕获远程桌面的每个相关窗口的窗口可视物和相 应的窗口属性,并将其编码成网络流的视频流。可以将用于表示不相关和/ 或未选择的窗口或其他桌面区域的数据最小化。此外,可以将包括窗口可 视物和表示窗口属性的窗口元数据的视频流发送到本地设备。
[0006] 本公开的其他方面提供了使用不提供阿尔法(alpha)信道的视频编 解码器来传输每像素透明度信息(或者称为“阿尔法信息”)。例如,可视 物(例如,窗口可视物)的阿尔法信息可以被转码成所支持的视频流的频 道,以生成表示阿尔法信息的支持的颜色空间的样本。
[0007] 本公开还可以进一步提供通过可以存储在一个或更多个视频流的任 意数量的视频中的虚拟帧传输可视物(例如,窗口可视物)。可以将可视 物分成虚拟帧的二维(2D)页面,其中每个2D页面是一个或更多个视频 流的视频帧大小的一部分。可以将虚拟帧编码到一个或更多个视频流的视 频帧,然后根据页表重建虚拟帧。
[0008] 附图的简要描述
[0009] 下面参考附图详细描述用于适用于远程桌面应用程序的个体应用程 序窗口的流式传输的本系统和方法,其中:
[0010] 图1是根据本公开的一些实施例的示例桌面流式传输系统的示意图;
[0011] 图2A是根据本公开的一些实施例的远程桌面的示例;
[0012] 图2B是根据本公开的一些实施例的本地桌面的示例;
[0013] 图3是根据本公开的一些实施例的、用于描述生成包含在网络流中 的可视物外观的示例的图示;
[0014] 图4A是根据本公开的一些实施例的、将阿尔法信息转换为RGB颜 色空间中的YUV420视频帧格式的图示;
[0015] 图4B是根据本公开的一些实施例的、采用每像素阿尔法信息布局图 像的图像区域并在桌面上显示图像的示例的图示;
[0016] 图5是根据本公开的一些实施例的、从应用程序窗口的窗口可视物 生成虚拟帧的帧的图示;
[0017] 图6是根据本公开的一些实施例的、示出用于远程桌面流式传输的 方法的流程图
[0018] 图7是根据本公开的一些实施例的、示出在本地桌面上呈现远程桌 面的桌面可视物的方法的流程图;
[0019] 图8是根据本公开的一些实施例的、示出用于将远程桌面的部分选 择性地发送到本地桌面的方法的流程图;
[0020] 图9是根据本公开的一些实施例的、示出用于在视频流的一个或更 多个帧中发送可视物的阿尔法信息的方法的流程图;
[0021] 图10是根据本公开的一些实施例的、示出用于通过视频流流式传输 虚拟帧的方法的流程图;
[0022] 图11是根据本公开的一些实施例的示例操作环境;和
[0023] 图12是适用于实现本公开的一些实施例的示例计算设备的框图

具体实施方式

[0024] 公开了涉及适合于远程桌面应用程序的个体应用程序窗口流式传输 的系统和方法。更具体地,公开的系统和方法涉及-代替将整个远程桌面流 式传输到本地桌面-将远程桌面的一个或更多个应用程序窗口和/或其他桌 面元素流式传输到本地桌面。
[0025] 与常规方法相反,所公开的方法允许将远程桌面的任何数量的应用 程序窗口或其他桌面元素流式传输到本地设备的桌面,而无需在流中包括 整个远程桌面。为此,可以捕获远程桌面的每个相关窗口的窗口可视物 (visuals)和相应的窗口属性并将其编码为流的视频流(例如,使用诸如 实时传输协议(RTP)或专有协议类型的标准)。可以将用于表示不相关和 /或未选择的窗口或其他桌面区域的数据最小化,例如通过用可以在视频流 中高度压缩的较低熵数据(例如,黑色像素数据)替换数据和/或用其他可 视内容替换那些区域。此外,可以将包括窗口可视物和表示窗口属性的窗 口元数据的视频流发送到本地设备。与常规系统相比,通过仅将一组特定 应用程序窗口和/或其他桌面元素流式传输到本地设备,以及利用视频流技 术,所公开的方法需要更少的带宽、处理和功率。另外,与诸如本文所述 的常规系统中存在的安全性问题相反,本公开的方法通过例如从流应用程 序窗口、桌面元素或本质上敏感的可视物中排除来提供安全性改进。
[0026] 可以从流接收和解码一个或更多个应用程序窗口的窗口可视物和窗 口属性,以在本地桌面上创建本地窗口可视物。使用所接收的窗口属性, 可以在每个相应的远程窗口的代理窗口中将解码的窗口可视物呈现(render) 并显示在本地桌面上。在一个或更多个实施例中,代理窗口可以包括延伸 超出客户端区域内的解码的窗口可视物。任何数量的应用程序窗口的解码 的窗口可视物和窗口属性可以通过单个网络流在单个视频流或多个视频流 中接收,同时允许与各个代理窗口交互,就好像它们对于本地桌面是本地 的一样。因此,与常规系统相比,通过根据窗口可视物和窗口属性在本地 桌面上呈现代理窗口,所公开的方法允许应用程序窗口无缝地整合到本地 桌面中。
[0027] 在一些示例中,用户或系统可以确定感兴趣的要被流式传输到本地 设备的本地桌面的远程桌面的至少一个应用程序窗口。可以从流中排除未 被识别或以其他方式确定为感兴趣的远程桌面的部分或将其最小化。例如, 可以使用来自第一(例如,捕获的)可视物外观的较低熵数据来过滤掉远 程桌面的未选择部分或将其转换为最小表示,以便生成第二(例如,要发 送的)可视物外观(visual surface),其仍然包括被确定为感兴趣的远程桌 面的部分的完全表示的窗口可视物。然后可以将第二可视物外观编码到流 并将其发送到本地设备。在一些示例中,可以通过将模板(stencil)应用于 第一(例如,捕获的)可视物外观以移除或覆写(overwrite)远程桌面的 一个或更多个部分中的至少一些,同时保留相关窗口的窗口可视物和其他 桌面元素,来移除远程桌面的该一个或更多个部分。移除和/或修改远程桌 面的一部分,使得其不在流中传输或使用较少的带宽和处理功率传输除了 节省带宽和处理之外,还可以通过远程计算设备对流进行编码和本地设备 对流进行解码两者来提供增加的安全性。
[0028] 本公开的其他方面可以使用不定义阿尔法信道的视频编解码器(例 如,H.264)来提供每像素透明度信息(或者称为“阿尔法信息”)的传送。 例如,在远程计算设备的编码阶段期间,可以将应用程序窗口的窗口可视 物的阿尔法信息转码到支持视频流的信道中,以生成表示阿尔法信息的所 支持的颜色空间的样本。另外,阿尔法样本的三元组(1×3或2×3的) 可以作为颜色空间中的单个样本附加到视频流。在一些非限制性示例中, 颜色空间可以是亮度-色度(Luma-Chrominance)(YUV)颜色空间或红绿 蓝(Red Green Blue)(RGB)颜色空间。通过将阿尔法信息转码到所支持 的颜色空间,可以在视频流中传输应用程序窗口的透明度信息,否则视频 流可能不支持透明度信息。
[0029] 另外所公开的方法可以提供视频流的报头(header)(例如,使用用 于使用RTP传输的流的RTP报头扩展),以用于将至少一个应用程序窗口 的窗口属性发送到本地设备。例如,窗口属性可以由包含在报头中的窗口 元数据表示。通过在报头中编码窗口属性,窗口属性和窗口可视物可以在 相同的视频流中传输-从而节省带宽和降低系统复杂性,而不需要额外的专 用流。
[0030] 在其他示例中,表示窗口属性的窗口元数据可以在流中进行增量编 码(delta-encoded),以便发送到本地设备。可以使用结构化的逐字节差异 (byte-wise diff)在流中发送窗口元数据,其中逐个成员地、逐个字节地处 理结构化元数据,以对应用程序窗口的窗口属性进行增量编码。在流中发 送增量信息(例如,窗口属性的变化)而不是所有当前窗口属性信息可以 允许显著降低的带宽利用率并且可以减少处理要求,因为需要发送和处理 更少的数据以传达相同的信息。
[0031] 为了将应用程序窗口的窗口可视物编码成视频流,所公开的方法可 以包括将至少一个应用程序窗口的窗口可视物分成虚拟帧的2D页面-其中 每个2D页面是视频流的帧大小的一部分。可以将虚拟帧编码为流的帧。在 一些示例中,虚拟帧可以与应用的模板结合使用。例如,模板可以用于生 成第二(例如,要发送的)可视物外观,然后可以将可视物外观分成虚拟 帧的2D页面。在其他示例中,可以使用或不使用模板,并且可以直接捕获 (例如,从远程操作系统)一组应用程序窗口和/或其他桌面元素,然后将 其分为虚拟帧的2D页面。流式传输“分页的”窗口可视物可以简化应用于 将多个窗口放置到单个传输外观中的逻辑以及它们随后从该外观的重建, 并且还可以避免使用复杂的二进制打包(bin-packing)算法。在一些示例 中,该方法可以用于发送2D页面的一个或更多个部分,而不是在每帧中发 送完整的窗口可视物,这可以允许平衡工作负载和带宽要求。此外,该方 法可用于减轻用于编码视频流的视频编码器的视频帧大小限制。
[0032] 现在参看图1,图1是根据本公开的一些实施例的示例桌面流式传输 系统100的示意图。应该理解的是,本文描述的这种布置和其他布置仅作 为示例进行阐述。除了所示的那些之外或代替所示的那些,可以使用其他 布置和元件(例如,机器、接口、功能顺序和功能分组等),并且为了清楚 起见,可以一起省略一些元件。此外,本文描述的许多元件是功能实体, 其可以实现为离散或分布式组件或者与其他组件一起实现,并且可以以任 何合适的组合和位置实现。本文描述的由一个或更多个实体执行的各种功 能可以由硬件固件和/或软件执行。例如,一些功能可以由执行存储在存 储器中的指令的处理器执行。
[0033] 桌面流式传输系统100可以包括例如远程系统116和本地系统118。 远程系统116可以包括例如通信管理器120A,流编码器124,流式传输确 定器126,虚拟帧生成器128,桌面捕获器130和桌面事件监视器132A。 本地系统118可以包括例如通信管理器120B,桌面呈现器136,桌面事件 监视器132B和流解码器140。
[0034] 作为概述,桌面流式传输系统100可用于将远程桌面102A的一个或 更多个部分流式传输到本地桌面102B。例如,远程系统116可以捕获远程 桌面102A的桌面可视物和相关联的桌面属性,以包括在网络流134中。桌 面可视物和桌面属性可以包括在可以与桌面的特定部分或元素相关联的桌 面数据中。桌面的部分的桌面可视物可以指代可视内容,而桌面属性可以 指代描述桌面的部分的数据(例如,尺寸、位置等)。在各种示例中,桌面 的部分可以是应用程序窗口-诸如应用程序窗口106A-在这种情况下,桌面 数据可以指窗口数据,桌面可视物可以指窗口可视物,以及桌面属性可以 指窗口属性。在一些实施例中,为了捕获桌面可视物,远程系统116捕获 远程桌面102A并将模板应用于所捕获的远程桌面102A,以移除桌面背景 108A中的至少一些(例如,通过用较低熵数据覆写相应的桌面可视物)和 /或其他无关信息,同时保留一个或更多个应用程序窗口的桌面可视物-例如 应用程序窗口106A。本地系统118可以使用来自网络流134的桌面可视物 和桌面属性来在本地桌面102B上呈现远程桌面102A的一个或更多个部分。 例如,对于应用程序窗口106A,本地系统118可以使用来自网络流134的 相应窗口可视物和窗口属性来在本地桌面102B上呈现代理窗口106B。代 理窗口106B可以整合到具有一个或更多个本地应用程序窗口的本地桌面 102B中-例如本地应用程序窗口114。桌面的未选择部分,例如应用程序窗 口104,将从发送的流中排除。
[0035] 远程系统116的通信管理器120A可以配置成管理由远程系统116例 如在桌面流式传输系统100的网络流134中提供的通信(例如,包括表示 至少一个应用程序窗口的窗口可视物和窗口属性的数据)。远程系统116的 通信管理器120A还可以配置成管理提供给远程系统116的通信(例如,包 括表示远程桌面102A的一个或更多个应用程序窗口的窗口事件的数据,其 也可以在网络流134中)。流式传输确定器126可以配置成确定远程桌面 102A的至少一个应用程序窗口和/或其他部分包括在网络流134中。桌面捕 获器130可以配置成捕获远程桌面102A的一个或更多个部分,诸如至少一 个应用程序窗口(例如,应用程序窗口106A)的窗口可视物和相应的窗口 属性。流编码器124可以配置成将表示远程桌面的部分的数据(例如,至 少一个应用程序窗口的窗口可视物和相应的窗口属性)编码到网络流134 (例如,网络流134的视频流)。在一些实施例中,虚拟帧生成器128可用 于将至少一个应用程序窗口的窗口可视物分成虚拟帧的二维(2D)页面, 以包括在网络流134中。桌面事件监视器132A可以配置成识别桌面事件, 诸如与远程桌面102A相关联的窗口创建事件或窗口销毁事件(例如,由对 本地桌面102B的用户输入所指示的)。桌面事件监视器132A还可以配置 成至少部分地基于所识别的桌面事件来更新应用程序窗口的列表以包括在 网络流134中。
[0036] 本地系统118的通信管理器120B可以配置成管理由本地系统118提 供的通信-例如在桌面流式传输系统100的网络流134中-和/或提供给本地 系统118的通信。流解码器140可以配置成解码来自网络流134的数据, 例如表示桌面可视物和桌面属性的数据。桌面呈现器136可以配置成使用 解码的数据在本地桌面102B上呈现包括在网络流134中的远程桌面102A 的一个或更多个部分。例如,对于每个应用程序窗口,桌面呈现器136可 以使用应用程序窗口的窗口属性来呈现(例如,生成)相应的代理窗口, 使得它们可以像在远程桌面102A上那样出现在本地桌面102B上。桌面事 件监视器132B可以配置成识别与远程桌面
102A相关联的事件,诸如窗口 创建事件或窗口销毁事件(例如,当用户输入选择关闭代理窗口的控制元 件时)。
[0037] 图1的组件通常可以使用图11中一个或更多个用户设备1106和/或 一个或更多个服务器设备1102的任何组合来实现。在一些示例中,远程系 统116可以在一个或更多个服务器设备1102上实现,并且本地系统118可 以在用户设备1106上实现。在其他示例中,本地系统118和远程系统116 都可以在单独的用户设备1106上实现。远程系统116和/或本地系统118 可以经由布置在分布式环境中的多个设备来提供,这些设备共同提供本文 描述的功能或者每个可以在单个设备上体现。因此,虽然用于描述桌面流 式传输系统100的一些示例可以指代特定设备和/或配置,但是可以预期, 这些示例可以更一般地适用于上述设备和配置的潜在组合。
[0038] 如本文所述,通信管理器120A和/或通信管理器120B可以配置成管 理由桌面流式传输系统100的远程系统116或本地系统118提供的和/或由 桌面流式传输系统100的远程系统116或本地系统118接收的通信(例如, 网络流134的通信)。通信管理器120A和/或通信管理器120B还可以配置 成管理其各自系统内的通信。在这样的示例中,可以通过图12的总线1202 在计算设备1200的组件之间传输一个或更多个通信。
[0039] 在接收通信和/或将其提供为网络通信的情况下,通信管理器120A 和/或120B可以包括可以使用一个或更多个无线天线和/或一个或更多个调 制解调器经由一个或更多个网络进行通信的网络接口。
[0040] 远程系统116的流式传输确定器126可以确定远程桌面102A的至少 一个应用程序窗口或其他部分包括在至本地桌面102B的网络流134中。该 确定可以基于用户输入和/或其他用户定义的设置和/或系统定义的信息,例 如配置文件。例如,用户可以经由远程系统116和/或本地系统118使用图 形用户界面(GUI)来提供输入,该输入选择与一个或更多个应用程序相 关联的哪些应用程序和/或应用程序窗口从远程桌面102A流式传输到本地 桌面102B。例如,用户可以选择应用程序以向流式传输确定器126指示在 网络流134中自动包括与该特定应用程序相关联的每个应用程序窗口。另 外或替代地,用户输入可以为流式传输确定器126单独地选择特定应用程 序窗口,以包括在网络流134中。在一些示例中,仅用户选择的那些应用 程序窗口可以流式传输到本地桌面102B和/或显示在本地桌面102B上。
[0041] 另外,关于远程桌面102A的哪些应用程序窗口和/或其他部分包括 在网络流134中的至少一些设置可以是系统定义的。例如,流式传输确定 器126可以确定哪些应用程序窗口和/或其他桌面元素与远程桌面102A相 关联。为此,流式传输确定器126可以查询(例如,使用一个或更多个系 统API调用)托管远程桌面102A的操作系统(例如,窗口管理器)的服 务或由该操作系统维护的元数据。取决于实施例,流式传输确定器126可 以是或可以不是主机操作系统的一部分。流式传输确定器126可以使用查 询的结果来确定要流式传输的一个或更多个应用程序窗口。例如,查询的 结果可以指示应用程序窗口是否在远程桌面102A上可见,并且流式传输确 定器126可以至少部分地基于可见的应用程序窗口来流式传输应用程序窗 口。作为示例,流式传输确定器126可以决定仅在至本地桌面102B的网络 流
134中包括可见应用程序窗口(和/或其窗口可视物)。
[0042] 远程系统116的桌面捕获器130可以配置成捕获远程桌面102A的桌 面可视物和相应的桌面属性。例如,桌面捕获器130可以捕获流式传输确 定器126确定包括在网络流134中的远程桌面102A的每个部分的桌面可视 物和相应的桌面属性。
[0043] 图2A是根据本公开的一些实施例的包括远程桌面102A的示例的图 示。可以由桌面捕获器130捕获的远程桌面102A的桌面可视物可以包括窗 口的可视物(例如,应用程序窗口106A和应用程序窗口216A的可视物), 图标(例如,图标202A),任务栏(例如,任务栏210A),命令按钮(例 如,命令按钮212),系统托盘,开始按钮,开始菜单,快捷方式,光标(例 如,光标208A),窗口预览(例如,预览窗口204A),桌面背景(例如, 桌面背景108A)和/或可以存在于远程桌面102A上的其他元素。应用程序 窗口的窗口可视物可以包括在应用程序窗口的客户端区域(例如应用程序 窗口106A的客户端区域206B)中显示为输出的文本或图形。另外,应用 程序窗口的窗口可视物可以包括应用程序窗口的一个或更多个系统区域或 框架区域的文本或图形,例如应用程序窗口106A的系统区域206A。系统 区域或框架区域的示例包括以下中的至少一个:标题栏,菜单栏,窗口菜 单,最小化按钮,最大化按钮,调整大小边框和/或滚动条。
[0044] 用于可视物窗口,图标,任务栏,命令按钮,系统托盘,开始按钮, 开始菜单,快捷方式,桌面背景和/或其他可视元素的相应桌面属性可包括 一个标识符和以下中的一个或更多个:标题,几何形状,样式,位置(例 如,坐标),窗口模式(例如,全屏、窗口化等),和/或与远程桌面的该部 分相关联的其他属性。在一些示例中,桌面属性可以指示桌面可视物的类 型,诸如桌面可视物是否对应于应用程序窗口、窗口预览等。
[0045] 桌面捕获器130可以从远程桌面操作系统、服务、桌面管理器软件、 文件、存储器、窗口管理器、应用程序和/或其他合适的源捕获桌面可视物 的相应桌面属性。例如,为网络流134捕获的一个或更多个应用程序窗口 的一个或更多个窗口属性可以对应于用于组成远程桌面102A上的一个或 更多个应用程序窗口的一个或更多个窗口属性。作为进一步的示例,可以 至少部分地基于(例如,在远程桌面102A的屏幕捕获上执行的)计算机视 觉和/或对象跟踪算法来确定一个或更多个桌面属性。
[0046] 在一些示例中,桌面捕获器130可以将至少一些桌面可视物捕获到 一个或更多个可视物外观中,并将一个或更多个可视物外观编码到网络流 134中。作为示例,可视物外观之一可以是表示远程桌面102A的远程桌面 外观,例如远程桌面102A的至少一部分的屏幕截图或屏幕捕获,和/或显 示远程桌面102A的远程设备的显示。作为进一步的示例,一个或更多个可 视物外观可以是桌面合成外观,其表示由操作系统和/或窗口管理器用来组 成远程桌面102A的桌面可视物。作为示例,桌面合成外观可以包括个体应 用程序窗口的至少一部分和/或其他可视元素。例如,应用程序窗口106A 的桌面合成外观可以包括客户端区域206B和系统区域206A。
[0047] 桌面捕获器130可以使用流式传输确定器126来确定从网络流134 中排除远程桌面102A的至少一部分。例如,桌面捕获器130可以使用流式 传输确定器126来确定从网络流134中排除至少一个应用程序窗口和/或远 程桌面102A的另一部分。在图2A的示例中,这可以包括远程桌面背景 108A和应用程序窗口214。此外,桌面捕获器130可以确定从可视物外观 中移除远程桌面102A的一个或更多个部分中的至少一些(例如,远程桌面 102A的表示)。在各种实施例中,桌面捕获器130移除的远程桌面102A的 部分不包括流式传输确定器
126确定或选择包括在网络流134中的远程桌 面102A的一个或更多个部分。结果,一个或更多个其他可视物外观可以包 括流式传输确定器126确定包括在网络流134中而没有远程桌面102A的至 少一些其他部分的远程桌面102A的部分的桌面可视物。流编码器124可以 编码网络流134中的一个或更多个其他可视物外观。
[0048] 在一些示例中,桌面捕获器130使用至少一个模板从一个或更多个 可视物外观移除远程桌面102A的一个或更多个部分中的至少一些。例如, 桌面捕获器130可以将模板应用于可视物外观(例如,远程桌面外观)以 移除(例如,覆写)至少一些可视内容,从而产生不包括被移除的可视内 容的可视物外观。模板可以在可视物外观上识别远程桌面102A的哪些部分 将被包括在网络流134中以及远程桌面的哪些部分将被排除在网络流134 之外。模板可以用于移除并且用其他图像数据替换非会话区域(不对应于 要包括在网络流134中的远程桌面102A的一部分的那些区域)的至少一些 图像数据(例如,像素数据)。桌面捕获器130可以例如通过遍历由流式传 输确定器126指定的所有流处理的所有可见窗口来构造模板。
[0049] 在一些示例中,表示远程桌面102A的图像的至少一些图像数据可以 用表示另一图像的至少一些图像数据代替。例如,表示桌面背景108A(图 1)的图像数据可以用表示桌面背景108B的图像数据代替。另外或替代地, 非会话区域的至少一些图像数据可以用较低熵图像数据(例如零或接近零 的熵数据)替换。零或接近零的熵数据的示例可以包括表示诸如黑色的公 共像素颜色的数据。通常,具有实心填充颜色的任何区域可包括低熵数据。 例如,桌面背景108A可以用表示黑色像素的图像数据代替,以及如图1 所示,桌面背景108B可以是本地桌面102B的本地桌面背景。减少对在本 地桌面102B上显示不感兴趣的一个或更多个可视物外观的一个或更多个 区域中的图像数据的熵可以允许流编码器124将一个或更多个可视物外观 压缩到更小的尺寸,从而减小将远程桌面102A流式传输到本地桌面102B 所需的带宽。例如,桌面呈现器136可以不呈现来自网络流134的图像数 据,该图像数据对应于本地桌面102B上的远程桌面102A的非会话区域。 桌面呈现器136可以改为呈现其他图像数据,或者可以不呈现那些非会话 区域中的任何图像数据;在这种情况下,当桌面呈现器136不是操作系统 的一部分时,本地桌面的操作系统可以呈现非会话区域。
[0050] 图3用于描述桌面捕获器130的示例,其使用模板和/或其他方法生 成包含在网络流134中的可视物外观。现在参考图3,根据本公开的一些实 施例,顶行是包括远程桌面外观300的示例的图示;底行是包括可视物外 观340的示例的图示,可视物外观340可以对应于图3的远程桌面外观300。 远程桌面外观302、远程桌面外观304、远程桌面外观306和远程桌面外观308可以分别对应于第一、第二、第三和第四远程桌面。桌面捕获器130 可以从远程桌面外观302、远程桌面外观304、远程桌面外观306和远程桌 面外观308生成可视物外观332、可视物外观334、可视物外观336和可视 物外观338,以包含在网络流134中。可视物外观332、可视物外观334、 可视物外观336和可视物外观338可以表示远程桌面102A的全屏外观的示 例和/或可以表示用于在本地桌面102B上显示的全屏外观的示例。
[0051] 远程桌面外观302包括用于应用程序窗口312、314和316的窗口可 视物。作为示例,应用程序窗口312、314和316可以对应于相同的应用程 序,其中应用程序窗口312包括主要工作区域,应用程序窗口314和316 包括用于选择用于与主要工作区域交互的工具的工具栏。在一些示例中, 流式传输确定器126选择应用程序窗口312、314和316中的每一个以包括 在网络流134中。当应用程序窗口312、314和316填充整个远程桌面102A 时,可视物外观332可以与远程桌面外观302相同或基本相似(例如,相 应位置中的应用程序窗口相同,但可选地可以没有一个或更多个系统桌面 元素,例如鼠标光标、任务栏等)。远程桌面外观304包括桌面区域310和 应用程序窗口318和320。应用程序窗口320可以对应于应用程序的窗口, 诸如电子邮件应用程序的收件箱,并且应用程序窗口318可以对应于不同 的应用程序,例如媒体播放器,或者它可以是与应用程序窗口320相对应 的应用程序的另一个应用程序窗口。桌面区域310可以包括桌面背景108A 中的至少一些的桌面可视物,以及可选地可以包括通过桌面背景108A(诸 如桌面图标、文本、系统菜单和/或系统任务栏)呈现的其他元素的桌面可 视物。
[0052] 在一些示例中,流式传输确定器126选择应用程序窗口318和320 中的每一个以包括在网络流134中。因此,桌面捕获器130可以将模板应 用于远程桌面外观304以生成可视物外观334,其中对应于桌面区域310 的图像数据被替换为较低熵图像数据(例如,表示黑色像素)和/或表示区 域330的其他图像数据(例如,表示不同图像)。远程桌面外观306包括全 屏模式的应用程序窗口322。因此,可视物外观336可以与远程桌面外观 306相同或基本相似。远程桌面外观308仅包括桌面区域310。因此,桌面 捕获器130可以将模板应用于远程桌面外观308以生成可视物外观338,其 中对应于桌面区域310的图像数据被替换为较低熵图像数据(例如,表示 黑色像素)和/或表示区域330的其他图像数据(例如,表示不同图像)。 在一些示例中,可以不使用模板,并且桌面捕获器130可以在不使用和/或 不捕获远程桌面外观308的情况下生成可视物外观338。这可以例如在流式 传输确定器126确定远程桌面102A不包括用于在本地桌面102B上显示的 任何桌面可视物时发生。
[0053] 在一些示例中,远程桌面外观302、304、306和308对应于同一远 程系统116的多个显示器。例如,可以呈现由远程系统116使用远程用户 设备展现的相应监视器上可见的远程桌面的相应部分的每个远程桌面外观。 远程桌面的每个部分的桌面可视物和桌面属性可以包括在网络流134中(例 如,在相同的视频流中)或者可以具有单独的流(例如,每个显示器具有 单独的视频流,该显示器具有每个流窗口可视物、窗口属性和定时信息, 以便从异步视频流中启用客户端侧窗口组合)。此外,作为示例,远程桌面 外观302、304、306和308可以是一个远程桌面外观,和/或可视物外观332、 334、336和338可以是一个可视物外观。另外,虽然可视物外观332、334、 336和338被描述为使用应用于远程桌面外观302、304、306和308的模板 生成,但是任何合适的方法可以用于各种实施例。例如,可以使用任何数 量的远程桌面外观和/或模板来生成包含在网络流134中的可视物外观。
[0054] 另外,可以使用任何数量的中间可视物外观来产生可视物外观。在 一些示例中,任何可视物外观332、334、336和338可以由桌面捕获器130 生成,而不使用远程桌面外观或其一部分。例如,桌面捕获器130可以通 过合成要包括在网络流134中的远程桌面102A的不同部分的图像数据来生 成可视物外观332、334、336和338(例如,桌面捕获器130可访问操作系 统用于合成远程桌面102A以进行显示的各个外观的位置)。
[0055] 流编码器124可以配置成将表示远程桌面的部分的数据(例如,至 少一个应用程序窗口的桌面可视物和相应的桌面属性)编码到网络流134。 为此,流编码器124将捕获的桌面可视物编码到网络流134。例如,流编码 器124可以将各种可视物外观332、334、336和338中的任何一个编码到 网络流134中。在一个或更多个实施例中,可以将可视物外观332编码成 单个视频帧。然而,在一些情况下,可以使用虚拟帧生成器128将可视物 外观332编码成虚拟帧,虚拟帧生成器128可以使用可视物外观332来生 成多个视频帧,如关于图5所描述的。作为另一示例,桌面捕获器130可 以使用虚拟帧生成器128将对应于可视物外观
332的桌面可视物捕获到虚 拟帧的视频帧中,而无需首先将图像数据捕获为单个可视物外观。
[0056] 流编码器124可以配置成将对应于桌面可视物的桌面属性作为表示 桌面可视物的桌面属性的桌面元数据编码到网络流134中。流编码器124 可以与相应的桌面可视物相关联地基于每帧编码桌面属性。例如,流编码 器124可以使用时间和/或空间信息将桌面可视物与相应的桌面属性相关联, 例如采用相关联的时间戳、坐标、帧和/或帧标识符。每个视频帧可以由时 间戳注释,该时间戳可以由本地系统118的桌面呈现器136使用,以从网 络流134的异步视频流更新桌面状态和桌面可视物(例如,用于多监视器 用例)。在一些示例中,流编码器124将窗口属性编码为视频流的网络通信 的报头数据。例如,桌面元数据可以包括在用于编码网络流134的传输协 议的报头扩展中。因此,桌面元数据可以与桌面可视数据一起传输,而不 需要单独的流或连接。
[0057] 可以使用桌面元素的桌面属性的增量编码在网络流134中发送桌面 元数据。为了减少网络带宽消耗,可以仅发送自上次分组更新以来已经改 变的元数据。为了防止损失,可以采用参考无效方案。同样,为了防止协 议中断,可以实现一个或更多个面向未来的机制(例如,序列化的、结构 化的逐字节差异等)。例如,流编码器124可以使用例如但不限于结构化的 逐字节差异来对桌面属性进行增量编码,这可以显著节省带宽并且采用版 本化方案用于前向/后向兼容性。
[0058] 本公开的实施例提供了用于基于每帧流式传输窗口元数据的方法, 其允许“通用”数据的前向/后向兼容的增量编码。在一些实施例中,流编 码器124可以实现这些方法。在一个或更多个实施例中,如果数据使用通 用C/C++数据类型定义,例如,则可将数据描述为“通用”,以避免额外的 依赖性和/或冗余数据类型表示。这里描述的解决方案可以是前向/后向兼容 的,使得客户端可以理解过时的或忽略的旧/新服务器的未来数据定义。可 以使用增量编码来减少相当低熵窗口元数据的带宽需求。
[0059] 减少通过网络传输的数据量可以通过基于差异/补丁(diff/patch)的 增量编码来解决。由于简单的“序列化,然后发送逐字节差异”方法的效 率可能无法很好地适用于涉及可变大小的条目/成员的结构化数据,实施例 可以利用C++模板将数据结构展平为逐条目/成员/字节差异,其沿模板函数 调用层次结构:通用模板函数定义,它调用泛型/自定义类型的委托实现; 使用逐字节差异/补丁的算术类型的专实现;基本容器(例如,字符串、 向量、地图)的专门(部分)实现;泛型/自定义类型的专用委托实现,它 们简单地枚举成员以对上述基本类型的实现进行差异/补丁。
[0060] 这些方法还可以支持多态性,并且可以通过将数据类型限制为所支 持的数据类型,或者通过添加专门的差异/补丁实现来扩展到任意结构化的 数据。除了所描述的特征之外,所描述的逐字节差异和结构差异实现都可 以采用适用于差异字符串大小和执行速度的附加优化。
[0061] 关于向前/向后兼容性,因为通过结构大小条目增强结构可以在合并 差异字符串时实现跳过未来/未知条目,所以条目弃用(deprecation)实际 上是免费的:通过简单地永远不改变默认构造的条目的值,此条目将始终 认为是差异字符串中的递增跳跃计数。
[0062] 本公开的其他方面提供了可以用于使用视频流的图像数据来传输可 视物(诸如桌面可视物)的透明度信息的方法,即使在用于对视频流进行 编码的视频编解码器没有明确地支持阿尔法信道的情况下。流编码器124 可以使用这些方法来编码网络流134的桌面可视物。例如,虽然系统桌面 通常是不透明的,但是各个窗口和/或其他桌面元素可以是至少部分透明的。 为了说明上述内容,应用程序窗口106A的系统区域206A和/或客户端区域 206B可以是半透明的,例如当应用程序窗口106A不是活动窗口时。作为 进一步的示例,桌面可视物的部分可以是完全透明的。这样的内容包括非 矩形形状的窗口,其通常使用每像素透明度来实现这种形状。常见用例包 括游戏发射器或不寻常和/或不对称形状的闪屏,以及恢复应用程序窗口的 圆矩形形状。
[0063] 这种透明度信息的传送可能需要远程应用程序流式传输解决方案来 流式传输每像素透明度信息(例如,使用阿尔法信道)。然而,诸如H.264 (AVC)的当代视频编解码器不支持阿尔法信道。所公开的方法可以提供 桌面元素的桌面可视物的阿尔法信息,以将其转码到视频流的颜色空间, 以存储表示颜色空间中的阿尔法信息的阿尔法样本。在各种示例中,颜色 空间可以是亮度-色度(Luma-Chrominance,YUV)颜色空间或红绿蓝(Red Green Blue,RGB)颜色空间。所公开的方法可以通过将适当转换的阿尔法 信息附加到YUV444/420视频帧(在RGB或YUV空间中)并且使基础视 频编解码器将阿尔法值或样本处理为常规RGB或YUV值,使用例如与阿 尔法不可知的YUV444/420视频流式传输管线来实现RGBA流式传输。然 而,在不脱离本公开的范围的情况下,可以采用任何合适的流式传输格式 和颜色空间。
[0064] 在各种实施例中,每个阿尔法样本可以定义特定像素的透明度信息。 阿尔法样本连同通常存储在那些颜色通道(例如,RGB通道或YUV通道) 中的颜色样本可以存储在定义视频流的颜色空间的一个或更多个颜色通道 中。在一些示例中,当呈现存储在视频流中的图像数据时,图像呈现器(例 如,本地系统118的桌面呈现器136)可以使用解码器(例如,本地系统 118的流解码器140),其能够区分颜色样本和阿尔法样本。此外,解码器 可能够确定哪些阿尔法样本与哪些颜色样本相关联,以便呈现对应的像素。 例如,这些关联可以隐含在阿尔法样本相对于颜色样本的位置中。
[0065] 在一些示例中,阿尔法样本组可以作为颜色空间的单个样本(例如, 单个像素颜色值)附加到视频流。在这样的示例中,对于颜色空间的一些 颜色样本,通常表示像素的颜色样本的颜色分量的每个值可以替代地表示 像素的阿尔法分量。因此,多个像素的阿尔法样本可以存储在通常用于存 储单个像素的颜色样本的空间中。可以使用任何合适的格式来将阿尔法样 本存储在颜色样本的通道中,其可以针对不同的颜色空间而变化。为了将 阿尔法信息转换为RGB颜色空间中的YUV444视频帧格式,流编码器124 可以将三元组α样本作为单个RGB样本附加:a0至r0;a1到g0;以及a2 到b0,如图4B的图像404中那样。现在参看图4A,图4A是将阿尔法信 息转换为RGB颜色空间中的YUV420视频帧格式的图示。流编码器124 可以通过将阿尔法视为YUV并且将2×3阿尔法400的报头添加到2×2 yuv2rgb(缩放(阿尔法))块416来解释色度子采样,其中第一个2×2阿 尔法值{a0,a1,a2,a3映射到2×2Y值{y0,y1,y2,y3}并且剩余的1 ×2阿尔法值{a4,a5}被复制到2×2U/V值{u0,v0},如图4A所示。
[0066] 为了将阿尔法信息转换为YUV颜色空间中的YUV444视频帧格式, 流编码器124可以根据YUV空间定义(BT.601/709,全值范围/减小的值范 围(full/studio swing))来缩放阿尔法,然后附加三元组的连续阿尔法样本 作为单个YUV样本:a0到y0;a1到u0;和a2到v0。为了将阿尔法信息 转换为YUV颜色空间中的YUV4420视频帧格式,流编码器124可以根据YUV空间定义缩放阿尔法,然后将两个三元组的阿尔法样本附加为4Y样 本+2UV样本:a0,a1,a2,a3到y0y1,y2y3(4个Y样本);a4至u0 (1个UV样本);和a5到v0(1个UV样本)。
[0067] 在对阿尔法信息进行转码中,流编码器124可以保持完整的阿尔法 分辨率,并且可以考虑不同的YUV空间定义(例如,BT.601/709,全值范 围/减小的值范围),RGB/YUV空间重叠,和/或YUV420色度子采样。此 外,YUV444格式的附加阿尔法信息的总尺寸可表示为:
[0068] 总尺寸=原始帧尺寸*(1+1/3)   方程(1)
[0069] 以及YUV420格式的附加阿尔法信息的总尺寸可表示为:
[0070] 报头尺寸=原始帧尺寸*(1+2/3)   方程(2)
[0071] 其中,方程(1)和(2)的分数部分可以指添加携带阿尔法信息的图 像区域的成本。
[0072] 在使用任何颜色空间时,流编码器124可通过复制帧边缘/边界值来 将帧的宽度和/或高度对准给定的块尺寸。在流解码器140的解码期间,仍 然可以使用“块尺寸%帧尺寸”来重建原始帧尺寸。如上所述,在将阿尔 法信息转换为YUV颜色空间或RGB颜色空间中的YUV444视频帧格式可 以是快速的,并且由于(BT.601/709,全值范围/减小的值范围)缩放而具 有最小的精度损失。此外,当底层视频管线不在任一端提供YUV访问时, 将阿尔法信息转换为RGB颜色空间中的YUV420视频帧格式可允许流式传 输阿尔法信息,或者YUV颜色空间操作无论如何是不切实际的。因此,使 用所公开的方法,尽管存在传统编解码器的限制,但是可以提供每像素透 明度信息的流式传输。
[0073] 图4B是根据本公开的一些实施例的图像404的具有每像素阿尔法信 息的图像区域404A和404B以及桌面402上的图像404的显示的示例布局 412的图示。作为示例,图像404使用每像素阿尔法信息显示在桌面背景 408之上的桌面402上,并且表示窗口406的可视内容。可以在本地桌面或 远程桌面上以类似的方式显示图像404。在桌面402是本地桌面(例如本地 桌面102B)的情况下,窗口406可以是远程桌面上的应用程序窗口的代理 窗口。
[0074] 当以视频格式编码以在本地桌面上显示时,图像404可以由图像数 据表示,其中将像素的阿尔法样本编码到用于存储其他像素的颜色样本的 颜色空间(在图示的例子中YUV444格式的RGB颜色空间)。例如,图4B 中示出了图像404的布局412,其中,图像区域404A可以包括图像404的 图像区域404B中的像素的阿尔法样本。图像404可以是例如应用程序的闪 屏,其中阿尔法样本410A指示用于颜色样本420A的完全透明的像素,以 及阿尔法样本410B指示颜色样本420B的完全非透明像素。在图像404使 用RGB颜色空间的示例中,图像区域404A中的每个像素的颜色样本可以 存储图像区域404B中的三个像素的阿尔法样本。因此,图像区域404A可 以是图像区域404B的尺寸的三分之一。阿尔法样本和颜色样本之间的关联 可以隐含在像素位置和阿尔法样本使用的RGB信道中,使得解码器可以使 用像素位置和阿尔法样本使用的RGB信道来计算颜色样本的像素位置。
[0075] 本公开的其他方面提供了可以用于使用一个或更多个视频流的图像 数据来传输可视(例如桌面可视物)的方法,其中将可视物分成虚拟帧的 2D页面,每个2D页面是一个或更多个视频流的帧大小的一部分。流编码 器124可以使用这些方法来编码网络流134的桌面可视物。在所公开的方 法中,虚拟帧可以类似于一个或更多个视频流的帧,除了虚拟帧的区域可 以分布在视频流的多个实际帧而不是单个帧上之外,桌面呈现器136可以 采用该虚拟帧来在给定时间在本地桌面102B上呈现远程桌面102A的一个 或更多个部分。
[0076] 流式传输的“分页”桌面可视物可以简化应用于将多个桌面元素放 置到单个传输的外观(例如,图3的可视物外观332)中以及它们随后由桌 面呈现器136从该外观重建的逻辑。此外,所公开的方法可以避免使用复 杂的装箱(bin-packing)算法。在一些示例中,所公开的方法可以允许由 流编码器124对虚拟帧的一个或更多个部分进行编码,而不是在每个帧中 对完整的窗口可视物进行编码,这可以允许平衡工作负载和带宽要求。此 外,所公开的方法可用于减轻用于编码网络流134的视频流的视频编解码 器的视频帧大小限制。
[0077] 现在参看图5,图5是根据本公开的一些实施例的从应用程序窗口的 窗口可视物生成虚拟帧的帧506的图示。图5的图像504可以对应于由流 式传输确定器126指定的要在网络流134中流式传输的应用程序窗口的窗 口可视物。例如,图像504可以对应于图4B的图像404。图5的图像502 可以对应于由流式传输确定器126指定的要在网络流134中流式传输的另 一个应用程序窗口的窗口可视物。可以由虚拟帧生成器128将任意数量的 桌面元素集合的任意数量的桌面可视物集合(例如对应于图像502和图像 504的那些)分配给虚拟帧。例如,桌面可视物集合可以被指定用于在给定 时间在本地桌面102B上同时显示。因此,对于图3的可视物外观332,虚 拟帧可以包括用于每个应用程序窗口312、314和316的窗口可视物。虚拟 帧生成器128可以从任何数量的可视物外观(例如可视物外观332)获得虚 拟帧的窗口可视物。
[0078] 虚拟帧生成器128可以将虚拟帧的每个桌面元素的桌面可视物分成 2D页面。例如,在图5中,在图像504上显示网格,其中每个单元对应于 2D页面,并且2D页面的可视内容形成图像504。类似地,在图像502上 显示网格,其中每个单元对应于2D页面,2D页面的可视内容形成图像502。 这可以类似于操作系统如何将虚拟存储器范围分成物理存储器的一维页面。 每个2D页面可以是视频帧的固定尺寸部分,并且可以理想地与下游编码器 块大小对准,以避免伪像并提高编码性能。
[0079] 用于将2D页面映射到虚拟帧的页表可以编码在网络流134的桌面元 数据(例如窗口元数据)中,并且可以由桌面呈现器136使用用于呈现虚 拟帧的适当部分。每个虚拟帧的页表的映射(例如,{窗口ID,窗口页面} 到{流/容器ID,帧/容器页面})可以表达为其他窗口元数据(包括窗口页 面容器大小和页面大小)的函数。由于每个视频流可能已经提供了每帧窗 口元数据(如本文所述),并且窗口页面容器大小可以由视频帧大小给出, 因此远程系统116和本地系统118可以容易地配置为使用相同的页面大小, 以使桌面呈现器136能够重建每帧页表而不必随每帧发送它们。
[0080] 作为具体的非限制性示例,图像502可以具有423×323的分辨率, 图像504可以具有849×1028的分辨率,2D页面大小可以具有180×180的 分辨率,以及视频流的帧可以具有1080×1080的分辨率(例如,可以将2D 页面大小均匀地整除成帧大小以最大化使用)。在以上示例中,虚拟帧还可 以具有1080×1080的分辨率,或者可以具有更大的分辨率,例如1920×1080, 或更小的分辨率(例如,其中帧支持多个虚拟帧)。
[0081] 虚拟帧生成器128可将每个视频帧视为虚拟帧容器(例如,窗口页 面容器),其存储2D网格布置中的任何数量的桌面元素的任何数量的2D 页面的可视内容。例如,图5描绘了帧506,其中将对应于图像504和图像502的至少一些2D页面的图像数据存储在帧506的2D网格的相应单元中。 虚拟帧的其他2D页面可以类似地存储在虚拟帧的其他帧的2D网格的相应 单元中。可以在运行时调整任何2D网格的大小以适应虚拟帧的页面计数要 求,传输信道的要求(例如但不限于流编码器124、网络带宽和/或流解码 器140的要求)。
[0082] 这些方法可以允许将阿尔法信息编码到一个或更多个视频流中,而 网络流134仍然支持高分辨率桌面流式传输,可以允许网络流134支持比 视频编解码器更高分辨率的桌面流式传输(例如,实际桌面区域可超过所 涉及的视频编解码器实现的限制)。而且,这些方法可以用于在网络流134 中包括在远程桌面102A上被遮挡或遮盖的桌面可视物的部分(例如,通过 与其他窗口的部分重叠)。例如,虽然在一些实施例中,远程桌面102A的 一个或更多个桌面元素的相对位置可以与本地桌面102B上的那些元件的 代理的相对位置镜像,但在其他情况下,它们可以独立定位。因此,桌面 可视物的那些部分可能不会在本地桌面102B上被遮挡。
[0083] 这些方法可以允许桌面呈现器136显示在远程桌面102A上被遮挡或 遮盖的部分桌面可视物(例如,通过与其他窗口的部分重叠)。另外或替代 地,在它们不被遮挡时,这些方法可以允许缓存本地桌面102B上的桌面可 视物的部分。另外或替代地,即使桌面可视物的部分如所示的被遮挡,这 些方法可以允许这样的特征如图2B用于代理窗口106B的预览窗口204B 一样以完整形式在本地桌面102B上显示。图2A的预览窗口204A和图2B 的预览窗口204B(其也可以称为缩略图窗口)显示应用程序窗口106A和/ 或代理窗口106B的较小表示。预览窗口204B可以例如独立于图2A的预 览窗口204A,即使在远程桌面102A不支持预览窗口或预览窗口的图像数 据不可用的情况下也允许预览窗口。作为另一示例,预览窗口204B可以是 预览窗口204A的代理窗口。
[0084] 在各种实施例中,网络流134可以包括多个并行视频流,以通过在 多个页面容器上分布每个虚拟帧的固定尺寸部分(例如,页面)来在网络 上发送每个虚拟帧。该方法可以允许系统减小视频帧尺寸或用于执行编码 的视频编解码器的其他限制,其中视频流可以顺序地或者并行地饱和(例 如,以平衡工作负载和带宽要求)。
[0085] 远程系统116的桌面事件监视器132A可以配置成识别与远程桌面102A相关联的事件,诸如与远程桌面102A上的应用程序和/或应用程序窗 口相关联的窗口创建事件或窗口销毁事件。例如,应用程序可以启动应用 程序窗口106A。桌面事件监视器132A可以至少部分地基于检测到的窗口 创建事件来通知流式传输确定器126,其可以包括网络流134中的应用程序 窗口106A。相反,可以销毁与应用程序相关联的应用程序窗口(例如,由 用户、系统或应用程序关闭)。桌面事件监视器132A可以至少部分地基于 检测到的窗口销毁事件来通知流式传输确定器126,流式传输确定器126 可以从网络流134中排除应用程序窗口106A。
[0086] 作为另一示例,桌面事件监视器132A可以配置成识别远程桌面102A 上的应用程序和/或应用程序窗口的窗口模式改变事件。例如,应用程序可 以将应用程序窗口106A切换到全屏模式,在这种情况下,流式传输确定器 126可以至少部分地基于检测到的窗口模式改变事件从网络流134中排除 一个或更多个其他桌面元素。作为另一示例,应用程序可以将应用程序窗 口106A切换到窗口化屏幕模式,在这种情况下,流式传输确定器126可以 至少部分地基于检测到的窗口模式改变事件将一个或更多个其他桌面元素 添加到网络流134。桌面事件监视器132A可以至少部分地使用帧提供器来 实现,该帧提供器使用现有的屏幕监视器逻辑来跟踪正在运行的应用程序 的屏幕状态(例如,全屏模式、窗口模式),其中逻辑可以根据需要在窗口 和全屏捕获之间自动切换。在一些示例中,桌面事件监视器
132A可以使用 由操作系统提供的窗口生命周期事件监视器,例如但不限于此。在其他示 例中,可以通过轮询当前窗口生命周期状态来实现桌面事件监视器132A。 流式传输确定器
126可以维护感兴趣的进程列表。在每个窗口创建/销毁事 件上,窗口生命周期事件监视器(或桌面事件监视器132A的其他事件跟踪 模块)可用于更新活动窗口列表,并且流式传输确定器126可生成要包括 在网络流134中或从网络流134排除的窗口列表。
[0087] 在一些示例中,远程系统116的桌面事件监视器132A可以配置成识 别或检测窗口创建事件、窗口销毁事件、窗口模式改变事件和/或与应用程 序和/或远程桌面102A上的应用程序窗口相关联的其他事件,其由到本地 桌面102B的用户输入,由本地系统118上运行的应用程序和/或操作系统 发起。桌面事件监视器132A还可以配置成识别或检测由到本地桌面102B 的用户输入发起的鼠标或光标事件(例如,鼠标点击、光标移动等)。为此, 桌面事件监视器132A可以与本地系统118的桌面事件监视器132B一起工 作。例如,桌面事件监视器132B可以检测或识别可以在网络流134中(例 如,作为可以采用增量编码的窗口属性)发送到桌面事件监视器132A的事 件。桌面事件监视器132B可以检测到的事件的其他示例包括获得/失去焦 点事件、移动/调整大小命令以及最小化/最大化/恢复命令。
[0088] 桌面事件监视器132B可以识别所发送的一个或更多个事件,并且桌 面事件监视器132A可以在远程桌面102A处实现一个或更多个事件(例如, 通过模拟对远程桌面102A的用户输入并发送一个或更多个更多命令到操 作系统或应用程序等)。作为示例,到图2B的代理窗口106B的命令按钮 220的用户输入可以导致桌面事件监视器132B检测到图2A的应用程序窗 口106A的窗口销毁事件。桌面事件监视器132B可以将事件提供给通信管 理器120B,通信管理器120B可以将事件发送到远程系统116。桌面事件 监视器132A可以检测发送的事件并使应用程序窗口在远程系统116上关闭。 作为另一示例,桌面事件监视器132A可以使用来自桌面事件监视器132B 的鼠标点击事件来在远程系统116处生成对应事件,诸如与应用程序和/或 应用程序窗口相关联的事件(例如,用于启动或关闭应用程序窗口等)。
[0089] 在任何示例中,流式传输确定器126可以响应于桌面事件监视器 132A通知所识别的事件而更新包括在网络流134中以发送到本地桌面 102B的应用程序窗口和/或其他桌面元素的列表。
[0090] 在本地系统118处,通信管理器120B可以接收网络流134。网络流 134可以包括表示桌面可视物的数据和用于任何数量的桌面元素的相应桌 面属性(例如,以桌面元数据的形式)。然后,流解码器140可以对表示桌 面可视物的数据和相应桌面属性进行解码。表示桌面可视物的数据可以包 括阿尔法信息,例如图5的阿尔法样本510A中的至少一些(例如,来自帧 506或来自图3的可视物外观332或其他可视物外观)。在网络流134中包 括阿尔法样本的情况下,桌面呈现器136可以将阿尔法样本与颜色样本相 关联,以便呈现具有适当透明度的像素。
[0091] 桌面呈现器136可以使用至少一些解码的桌面可视物及其对应的解 码的桌面属性,在本地桌面102B上将远程桌面102A的桌面元素的代理桌 面元素呈现给本地桌面102B。例如,如图2B中所示,应用程序窗口106A 的至少一些窗口可视物可以至少部分地基于窗口属性(例如,位置、大小 等)在代理窗口106B中呈现。在一些示例中,应用程序窗口106A可以位 于远程桌面102A上的一个坐标位置处,但是在本地桌面102B上在不同坐 标位置处呈现。例如,代理窗口106B可以与应用程序窗口106A不同地定 位。另外或替代地,本地桌面
102B可以使用与远程桌面102A不同的坐标 系。在这些情况下,窗口属性的位置可以由桌面呈现器136转换到本地桌 面102B的坐标系,或者可以在包括在网络流134中之前由桌面捕获器130 执行转换。在一些示例中,桌面呈现器136可以将与视频帧相关联的桌面 元素的坐标(例如,在桌面元数据中)应用于解码的视频帧,以便从帧中 裁剪掉所有桌面元素,然后重建远程桌面102A布局或包括应用程序窗口布 局的拓扑,以复制远程系统116的布局。
[0092] 作为呈现代理桌面元素的另一示例,图2A的应用程序窗口216A的 至少一些窗口可视物可以在图2B的代理窗口216B中呈现。当呈现代理桌 面元素时,桌面呈现器136可以保留远程桌面102A上的相应应用程序窗口 的相对Z顺序。例如,代理窗口216B可以显示在图2B中的本地桌面102B 上的代理窗口106B之上,因为应用程序窗口216A显示在图2A中的远程 桌面102A上的应用程序窗口106A之上。例如,桌面呈现器136使用的应 用程序窗口和/或其他桌面元素的相对Z顺序可以由可以包括在窗口元数据 中的窗口属性捕获。
[0093] 呈现的代理桌面元素可以与本地桌面元素一起存在于本地桌面102B 上,并且可以无缝地整合到本地桌面102B中,使得它们可以表现得像本地 桌面元素一样。例如,如图2B所示,本地桌面102B可以包括代理窗口106B 以及本地设备本地的本地应用程序窗口
222。此外,当本地桌面102B在与 远程桌面102A不同的操作系统上时,代理窗口106B和本地应用程序窗口 114可以包括一个或更多个不同的系统区域或帧区域(例如,Windows格式 的代理窗口可以存在于采用其他Linux格式的应用程序窗口的Linux操作 系统上)。作为另一示例,桌面呈现器136可使用本地桌面可视物渲染一个 或更多个代理桌面元素的一个或更多个系统区域或框架区域。用户可以与 本地桌面102B上的代理窗口106B和本地应用程序窗口114两者交互,就 好像两者都是本地桌面102B本地的一样。例如,桌面呈现器136可以跟踪 相对于本地应用程序窗口和/或桌面元素为代理窗口和/或其他代理桌面元 素的Z顺序,并相应地显示桌面可视物(例如,考虑重叠、Z顺序的变化 等)。可以提供其他本地元素,诸如任务栏210B,或者任务栏210B可以是 任务栏210A的代理桌面元素。
[0094] 本地桌面102B可以包括本地系统118本地的光标208B,或者可以 模仿本地系统118的光标208A。许多应用程序定义它们自己的特定鼠标光 标。例如,虽然单向箭头在标准生产应用(例如网页浏览和文字处理软 件)的正常操作期间是标准光标,但是光标208A可以由不同应用程序中或 不同操作环境下的不同图形形状表示。作为示例,当缩放功能有效时,光 标208A可以具有放大镜的形状。类似地,光标208A可以在比正常加载或 重处理更长的时段期间具有沙漏的形状。游戏应用程序还可以使用不同的 形状来表示光标208A(例如,剑或十字线的图标)。常规的远程桌面流式 传输方法可能无法有效地模仿适当的光标形状。
[0095] 在一些实施例中,光标208A可以用作桌面元素,允许甚至非标准图 形形状显示作为本地桌面102B上的光标。桌面捕获器130可以捕获远程系 统116上的当前光标208A的句柄(handle)(或其他标识符)(例如,如相 应的应用程序所定义的)。然后可以在远程系统116处的已知光标的数据集 中引用句柄,以确定发送到本地系统118的对应标识符。本地系统118的 桌面呈现器136可以在已知光标自身的数据集中引用该标识符,并将本地 光标
208B设置为适当的已知光标。当在远程系统116处的已知光标集合中 找不到应用程序光标时,桌面捕获器130可以捕获新光标(例如,作为位 图),高速缓存在远程系统116和本地系统118处,然后附加到已知光标集 以供将来引用/使用。远程系统116可以智能地仅发送捕获的新光标的位图; 因为旧的/已知的可能已经被保存到本地系统118的高速缓存中。
[0096] 现在参看图6,图6是根据本公开的一些实施例的、示出用于远程桌 面流式传输的方法600的流程图。在框B602中,方法600包括确定要流式 传输的远程桌面的至少一个应用程序窗口。例如,远程系统116的流式传 输确定器126可以确定要包括在至本地设备的本地桌面102B的网络流134 中的远程桌面102A的至少一个应用程序窗口,例如应用程序窗口106A。
[0097] 在框B604中,方法600包括捕获至少一个应用程序窗口的窗口可视 物和窗口属性。例如,远程系统116的桌面捕获器130可以捕获至少一个 应用程序窗口的窗口可视物和相应的窗口属性。
[0098] 在框B606中,方法600包括将窗口可视物和窗口属性编码为流。例 如,远程系统116的流编码器124可以将至少一个应用程序窗口的窗口可 视物和窗口属性编码为网络流
134的至少一个视频流。
[0099] 在框B608中,方法600包括将至少一些流发送到本地桌面。例如, 远程系统116的通信管理器120A可以将包括至少一个视频流和表示至少一 个应用程序窗口的窗口属性的窗口元数据的网络流134发送到本地桌面 102B。
[0100] 现在参看图7,图7是根据本公开的一些实施例的、示出用于在本地 桌面上呈现远程桌面的桌面可视物的方法700的流程图。
[0101] 在框B702中,方法700包括接收编码的流。例如,本地系统118的 通信管理器120B可以将远程桌面102A的一个或更多个应用程序窗口的网 络流134接收到本地设备的本地桌面102B,例如应用程序窗口106A。网 络流134可以包括表示一个或更多个应用程序窗口的窗口属性的窗口元数 据以及在网络流134的至少一个视频流中编码的一个或更多个应用程序窗 口的窗口可视物。
[0102] 在框B704中,方法700包括从流中解码与至少一个应用程序窗口相 关联的窗口可视物和窗口元数据。例如,本地系统118的流解码器140可 以从网络流134解码窗口可视物和窗口元数据。
[0103] 在框B706中,方法700包括使用窗口元数据在本地桌面上呈现窗口 可视物以构建一个或更多个代理窗口。例如,本地系统118的桌面呈现器 136可以至少部分地基于应用程序窗口的解码的窗口属性,在本地桌面 102B上呈现对应于应用程序窗口的代理窗口(例如,应用程序窗口106A 的代理窗口106B)中的一个或更多个应用程序窗口中的应用程序窗口的解 码的窗口可视物。
[0104] 现在参看图8,图8是根据本公开的一些实施例的、示出用于将远程 桌面的部分选择性地发送到本地桌面的方法800的流程图。在框B802中, 方法800包括确定要包括在流中的远程桌面的至少一个应用程序窗口。例 如,远程系统116的流式传输确定器126可以确定要包括在至本地设备的 本地桌面102B的网络流134中的远程桌面102A的至少一个应用程序窗口, 例如应用程序窗口106A。
[0105] 在框B804中,方法800包括确定要从流中排除的远程桌面的一部分。 例如,桌面捕获器130可以使用远程系统116的流式传输确定器126来确 定要从网络流134中排除的远程桌面102A的至少桌面区域310(图3)。
[0106] 在框B806中,方法800包括从第一(例如,捕获的)可视物外观移 除远程桌面的一部分,以生成第二(例如,待传输的)可视物外观。例如, 桌面捕获器130可以从远程桌面外观304移除远程桌面102A的桌面区域 310,以生成具有区域330的可视物外观334来代替桌面区域310。这可以 涉及或可以不涉及模板,并且可以涉及或可以不涉及减少桌面区域310的 熵以生成区域330。此外,当使用远程桌面外观304作为示例时,可以从可 用于将桌面可视物编码到网络流134的其他可视物外观中移除远程桌面 102A的一个或更多个部分。
[0107] 在框B808中,方法800包括将第二可视物外观编码到流。例如,远 程系统116的流编码器124可以向网络流134编码包括至少一个应用程序 窗口的窗口可视物的可视物外观334,而不包括远程桌面102A的桌面区域 310。
[0108] 在框B810中,方法800包括将流发送到本地桌面。例如,远程系统 116的通信管理器120A可以将网络流134发送到本地桌面102B。
[0109] 图9是根据本公开的一些实施例的、示出用于在视频流的一个或更 多个帧中发送可视物的阿尔法信息的方法900的流程图。在框B902中,方 法900包括确定要包括在流中的可视物。例如,远程系统116的流式传输 确定器126可以确定在网络流134中包括与图5中的图像504相对应的应 用程序窗口的窗口可视物。
[0110] 在框B904中,方法900包括将可视物的阿尔法信息转码到视频流的 颜色空间,以生成“阿尔法”样本。例如,远程系统116的流编码器124 可以将可视物的阿尔法信息转码到RGB或YUV颜色空间,以生成图5的 阿尔法样本510A。
[0111] 在框B906中,方法900包括将阿尔法样本存储在流的至少一个视频 帧的图像数据中。例如,远程系统116的流编码器124可以将阿尔法样本 存储在帧506的图像数据中。
[0112] 在框B908中,方法900包括将至少一个视频帧编码到流。该视频帧 可以包括转码的阿尔法信息。例如,远程系统116的流编码器124可以将 帧506编码到网络流134。
[0113] 在框B910中,方法900包括将流发送到用户设备。例如,远程系统116的通信管理器120A可以将网络流134发送到托管本地桌面102B的本 地设备。虽然所描述的示例适用于远程桌面流式传输,但是方法900可以 更一般地用于流式传输和显示任何合适应用程序的可视物。
[0114] 图10是根据本公开的一些实施例的、示出用于通过视频流流式传输 虚拟帧的方法1000的流程图。在方框B1002中,方法1000包括确定要包 括在流中的可视物。例如,远程系统116的流式传输确定器126可以确定 要在网络流134中包括与图5中的图像502和图像504相对应的应用程序 窗口的窗口可视物。
[0115] 在框B1004中,方法1000包括将可视物分成虚拟帧的页面,其中每 个页面是流的一个或更多个视频流的至少一个视频帧中的每一个的一部分 尺寸。如图5所指示的,例如,远程系统116的流编码器124可以将对应 于图像502和图像504的可视物分成虚拟帧的页面。每个页面可以是网络 流134的视频流的帧506的一部分尺寸。每个页面可以针对当前活动的视 频编码器优化尺寸。
[0116] 在框B1006中,方法1000包括将至少一些页面存储在流的视频帧中。 例如,远程系统116的流编码器124可以将页面存储在网络流134的帧506 中。在各种示例中,页面的子集可以存储在一个视频帧中,而页面的其他 子集可以存储在网络流134的其他视频帧中。此外,流编码器124可以根 据页表将页面存储在视频帧中。网络流134可以包括元数据(例如,流/容 器ID、帧/容器页面ID等),本地系统118可以根据页表使用该元数据来确 定所接收的虚拟帧的每个页面映射到代理窗口的位置。
[0117] 在框B1008中,方法1000包括将视频帧编码到流。例如,远程系统 116的流编码器124可以将帧506编码到网络流134。
[0118] 在框B1010中,方法1000包括将流发送到用户设备。例如,远程系 统116的通信管理器120A可以将网络流134发送到托管本地桌面102B的 本地设备。虽然所描述的示例适用于远程桌面流式传输,但是方法1000可 以更一般地用于流式传输和显示任何合适应用程序的可视物。
[0119] 根据本公开的一些实施例,桌面流式传输系统100可以在图11的示 例操作环境1100中实现。在未示出的其他组件中,操作环境1100可以包 括一个或更多个服务器设备
1102,一个或更多个网络1104,一个或更多个 用户设备1106和一个或更多个数据存储
1108。应当理解,图11所示的操 作环境1100是一个合适的操作环境的示例。图11中所示的每个组件都可 以通过任何类型的计算设备来实现,例如结合图12描述的计算设备1200 中的一个或更多个。这些组件可以经由网络1104彼此通信,网络1104可 以是任何类型。网络
1104可以包括多个网络或多个网络中的一个网络,但 是以简单的形式示出,以免模糊本公开的各方面。网络1104可以包括任何 数量的不同的网络拓扑。
[0120] 应当理解,在本公开的范围内,可以在操作环境1100内采用任何数 量的用户设备1106、服务器设备1102和数据存储1108。每个可以配置为 单个设备或在分布式环境中协作的多个设备。
[0121] 一个或更多个用户设备1106可以包括本文关于图12描述的示例计 算设备1200的组件、特征和功能中的至少一些。作为示例而非限制,用户 设备1106可以体现为个人计算机(PC),膝上型计算机,移动设备,智能 电话,平板计算机,智能手表可穿戴计算机,个人数字助理(PDA), MP3播放器,全球定位系统(GPS)或设备,视频播放器,手持通信设备, 游戏设备或系统,娱乐系统,车载计算机系统嵌入式系统控制器,遥控 器,装置,消费者电子设备,工作站,这些描绘设备的任何组合,或任何 其他合适的设备。
[0122] 一个或更多个用户设备1106可以包括一个或更多个处理器,以及一 个或更多个计算机可读介质。计算机可读介质可包括可由一个或更多个处 理器执行的计算机可读指令。当由一个或更多个处理器执行时,指令可以 使一个或更多个处理器执行本文描述的方法的任何组合和/或部分,和/或实 现图1的桌面流式传输系统100的功能的任何部分。
[0123] 一个或更多个服务器设备1102还可以包括一个或更多个处理器,以 及一个或更多个计算机可读介质。计算机可读介质包括可由一个或更多个 处理器执行的计算机可读指令。当由一个或更多个处理器执行时,指令可 以使一个或更多个处理器执行本文描述的方法的任何组合和/或部分,和/ 或实现图1的桌面流式传输系统100的功能的任何部分。
[0124] 一个或更多个数据存储1108可以包括一个或更多个计算机可读介质。 计算机可读介质可包括可由一个或更多个处理器执行的计算机可读指令。 当由一个或更多个处理器执行时,指令可以使一个或更多个处理器执行本 文描述的方法的任何组合和/或部分,和/或实现图1的桌面流式传输系统100的功能的任何部分。将一个或更多个数据存储1108(或计算机数据存 储)描绘为单个组件,但是可以体现为一个或更多个数据存储(例如,数 据库)以及可以至少部分地在中。
[0125] 尽管描绘为在一个或更多个服务器设备1102和一个或更多个用户设 备1106外部,但是一个或更多个数据存储1108可以至少部分地体现在一 个或更多个服务器设备1102和/或一个或更多个用户设备1106的任何组合 上(例如,作为存储器1204(图12))。例如,一些信息可以存储在一个或 更多个用户设备1106上,并且其他和/或复制信息可以存储在外部(例如, 在一个或更多个服务器设备1102上)。因此,应当理解,一个或更多个数 据存储1108中的信息可以以任何合适的方式分布在一个或更多个数据存储 器上以便存储(可以在外部托管)。例如,一个或更多个数据存储1108可 以包括一个或更多个服务器设备
1102的一个或更多个计算机可读介质中的 至少一些和/或一个或更多个用户设备1106的一个或更多个计算机可读介 质中的至少一些。
[0126] 现在参看图12,图12是适合用于实现本公开的一些实施例的示例计 算设备1200的框图。计算设备1200可以包括直接或间接耦合以下设备的 总线1202:存储器1204,一个或更多个中央处理单元(CPU)1206,一个 或更多个图形处理单元(GPU)1208,通信接口1210,输入/输出(I/O) 端口1212,输入/输出组件1214,电源1216,以及一个或更多个呈现组件 1218(例如,显示器)。
[0127] 尽管图12的各种块示出为通过总线1202与线路连接,这并不意图 是限制性的并且仅为了清楚起见。例如,在一些实施例中,诸如显示设备 的呈现组件1218可以被认为是I/O组件1214(例如,如果显示器是触摸屏)。 作为另一示例,CPU 1206和/或GPU 1208可以包括存储器(例如,存储器 1204可以表示除了GPU 1208,CPU 1206和/或其他组件的存储器之外的存 储设备)。换句话说,图12的计算设备仅仅是说明性的。如在图12的计算 设备的范围内所预期的那样,“工作站”,“服务器”,“膝上型电脑”,“桌面 型电脑”,“平板电脑”,“客户端设备”,“移动设备”,“手持设备”,“游戏 机”,“电子控制单元(ECU)”,“虚拟现实系统”和/或其他设备或系统类 型等类别之间没有区别。
[0128] 总线1202可以表示一个或更多个总线,例如地址总线数据总线, 控制总线或其组合。总线1202可以包括一种或更多种总线类型,例如工业 标准架构(ISA)总线,扩展工业标准架构(EISA)总线,视频电子标准 协会(VESA)总线,外围组件互连(PCI)总线,外围组件互连快速(PCIe) 总线和/或其他类型的总线。
[0129] 存储器1204可以包括各种计算机可读介质中的任何一种。计算机可 读介质可以是可由计算设备1200访问的任何可用介质。计算机可读介质可 包括易失性和非易失性的介质,以及可移除和不可移除的介质。作为示例 而非限制,计算机可读介质可包括计算机存储介质和通信介质。
[0130] 计算机存储介质可以包括以用于存储信息(诸如计算机可读指令, 数据结构,程序模块和/或其他数据类型)的任何方法或技术实现的易失性 和非易失性的介质和/或可移除和不可移除的介质。例如,存储器1204可 以存储计算机可读指令(例如,其表示一个或更多个程序和/或一个或更多 个程序元素,例如操作系统)。计算机存储介质可以包括但不限于RAM, ROM,EEPROM,闪存或其他存储器技术,CD-ROM,数字通用盘(DVD) 或其他光盘存储器,磁带盒,磁带,磁盘存储器或其他磁存储设备,或可 以用于存储期望的信息并且可以由计算设备1200访问的任何其他介质。如 本文所使用的,计算机存储介质本身不包括信号
[0131] 通信介质可以包含计算机可读指令,数据结构,程序模块和/或在诸 如载波或其他传输机制之类的调制数据信号中的其他数据类型,并且包括 任何信息传递介质。术语“调制数据信号”可以指以对信号中的信息进行 编码的方式设置或改变其一个或更多个特征的信号。作为示例而非限制, 通信介质可以包括有线介质,诸如有线网络或直接有线连接,以及无线介 质,诸如声学,RF,红外和其他无线介质。上述任何组合也应包括在计算 机可读介质的范围内。
[0132] 一个或更多个CPU 1206可以配置成执行计算机可读指令以控制计 算设备1200的一个或更多个组件执行本文描述的方法和/或过程中的一个 或更多个。每个CPU 1206可以包括能够同时处理众多软件线程的一个或更 多个核(例如,一个,两个,四个,八个,二十八个,七十二个等)。一个 或更多个CPU 1206可以包括任何类型的处理器,并且可以包括不同类型的 处理器,这取决于所实现的计算设备1200的类型(例如,用于移动设备的 具有较少核的处理器和具有用于服务器的更多核的处理器)。例如,根据计 算设备1200的类型,处理器可以是使用精简指令集计算(RISC)实现的 ARM处理器或使用复杂指令集计算(CISC)实现的x86处理器。除了一个 或更多个微处理器或辅助协处理器(例如数学协处理器)之外,计算设备 1200还可以包括一个或更多个CPU 1206。
[0133] 计算设备1200可以使用一个或更多个GPU 1208来渲染图形(例如, 3D图形)。一个或更多个GPU 1208可以包括数百或数千个核,其能够同时 处理数百或数千个软件线程。一个或更多个GPU 1208可以响应于呈现命令 (例如,经由主机接口从CPU 1206接收的呈现命令)生成输出图像的像素 数据。一个或更多个GPU 1208可以包括用于存储像素数据的图形存储器, 例如显示存储器。显示存储器可以作为存储器1204的一部分被包括。一个 或更多个GPU 1208可以包括并行操作的两个或更多个GPU(例如,经由 链路)。当组合在一起时,每个GPU 1208可以生成用于输出图像的不同部 分或用于不同输出图像的像素数据(例如,用于第一图像的第一GPU和用 于第二图像的第二GPU)。每个GPU可以包括其自己的存储器,或者可以 与其他GPU共享存储器。
[0134] 在计算设备1200不包括一个或更多个GPU 1208的示例中,一个或 更多个CPU 1206可用于呈现图形。
[0135] 通信接口1210可以包括一个或更多个接收器、发射器和/或收发器, 其使得计算设备1200能够经由电子通信网络(包括有线和/或无线通信) 与其他计算设备通信。通信接口1210可以包括用于实现通过多个不同网络 中的任意网络(例如无线网络(例如,Wi-Fi、Z-Wave、蓝牙、蓝牙LE、 ZigBee等),有线网络(例如,通过以太网通信),低功率广域网(例如, LoRaWAN、SigFox等)和/或因特网)进行通信的组件和功能。
[0136] I/O端口1212可以使计算设备1200能够逻辑地耦合到包括I/O组件 1214、一个或更多个呈现组件1218和/或其他组件的其他设备,其中一些 组件可以被内置在(例如,集成在)计算设备1200中。说明性I/O组件1214 包括麦克,鼠标,键盘,操纵杆,游戏手柄,游戏控制器,卫星天线, 扫描仪打印机,无线设备等。I/O组件1214可以提供处理由用户生成的 空中手势、语音或其他生理输入的自然用户界面(NUI)。在某些情况下, 可以将输入发送到适当的网络元件以进行进一步处理。NUI可以实现语音 识别,手写笔识别,面部识别,生物识别,屏幕上和屏幕附近的手势识别, 空中手势,头和眼睛跟踪以及与计算设备1200的显示器相关联的触摸识别 (如下面更详细描述的)的任何组合。设备1200可以包括深度相机,诸如 立体相机系统,红外相机系统,RGB相机系统,触摸屏技术,以及这些的 组合,用于手势检测和识别。另外,计算设备1200可以包括能够检测运动 的加速度计或陀螺仪(例如,作为惯性测量单元(IMU)的一部分)。在一 些示例中,加速度计或陀螺仪的输出可以由计算设备1200使用以呈现沉浸 式增强现实或虚拟现实。
[0137] 电源1216可以包括硬连线电源,电池电源或其组合。电源1216可 以向计算设备1200提供电力以使计算设备1200的组件能够操作。
[0138] 一个或更多个呈现组件1218可以包括显示器(例如,监视器、触摸 屏、电视屏幕、平视显示器(HUD)、其他显示器类型或其组合),扬声器, 和/或其他呈现组件。一个或更多个呈现组件1218可以从其他组件(例如, GPU 1208、CPU 1206等)接收数据,并输出数据(例如,作为图像、视频、 声音等)。
[0139] 可以在计算机代码或机器可用指令的一般上下文中描述本公开,包 括由计算机或其他机器(诸如个人数据助理或其他手持设备)执行的计算 机可执行指令,诸如程序模块。通常,包括例程、程序、对象、组件、数 据结构等的程序模块指代执行特定任务或实现特定抽象数据类型的代码。 本公开可以在各种系统配置(包括手持设备、消费者电子产品、通用计算 机、更多专业计算设备等)中实践。本公开还可以在分布式计算环境中实 践,其中任务由通过通信网络链接的远程-处理设备执行。
[0140] 如本文所使用的,关于两个或更多个元素的“和/或”的叙述应该被 解释为仅表示一个元素或元素的组合。例如,“元素A、元素B和/或元素C” 可以仅包括元素A,仅包括元素B,仅包括元素C,包括元素A和元素B, 包括元素A和元素C,包括元素B和元素C,或包括元素A、B和C。此 外,“元素A或元素B中的至少一个”可以包括元素A中的至少一个,元 素B中的至少一个,或元素A中的至少一个和元素B中的至少一个。此外, “元素A和元素B中的至少一个”可以包括元素A中的至少一个,元素B 中的至少一个,或元素A中的至少一个和元素B中的至少一个。
[0141] 本文中具体描述了本公开的主题以满足法定要求。然而,描述本身 并不旨在限制本公开的范围。相反,结合其他现有或未来技术,发明人已 经预期所要求保护的主题还可以以其他方式体现,以包括与本文档中描述 的步骤类似的不同步骤或步骤组合。此外,尽管这里可以使用术语“步骤” 和/或“框”来表示所采用的方法的不同元素,但是这些术语不应被解释为 暗示本文公开的各个步骤之中或之间的任何特定顺序,除非和除了当明确 描述了各个步骤的顺序时。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈