同步具有远程设备输入的流应用环境的方法、系统和装置
文献发布时间:2023-06-19 12:24:27
分案说明
本申请属于申请日为2017年9月21日的中国发明专利申请No.201780071409.4的分案申请。
技术领域
本公开涉及同步具有远程设备输入的流应用环境的方法、系统和装置。
背景技术
一些应用服务提供将软件应用(更简单地“应用”或“app”)交互“流传输”到远程设备(例如,诸如智能电话、平板电脑、车辆计算系统、可穿戴设备(例如,智能手表)等等的移动设备)的能力。这样的应用的流传输可以允许用户操作应用而无需在远程设备上本地实际下载和安装应用,这在具有有限处理和/或存储器资源的远程设备中可能是有用的,或者为了试用应用的目的。在一些实例中,可以通过在由一个或多个服务器(例如,共同形成的所谓的“云”)操作的虚拟机上安装应用来完成应用流传输,由此一个或多个输入/输出(“I/O”)流可以在虚拟机和远程设备之间建立以向虚拟机提供在远程设备处接收到的输入数据的各种模态,并且同样地向远程设备提供由来自于虚拟机的应用生成的输出数据的各种模态。
在一些实例中,应用服务在能够支持一个或多个虚拟流应用以供一个或多个远程设备使用的流应用环境中实现。此外,在一些实例中,虚拟流应用生成的内容可以以被捕获、编码并流传输到远程设备以进行视频回放的渲染帧缓冲器的形式输出。然后,在远程设备上,诸如手势或触摸事件和其他输入的用户控制信息可以被捕获、编码并被上传到流应用环境并注入虚拟流应用以相应地渲染其内容。
然而,即使超出在远程设备上的本地应用所渲染的同步挑战,将用户控制信息和其他输入的注入与远程设备上的应用内容的渲染同步也能够是有问题的。例如,在诸如移动设备的计算设备包括能够被用户的手指操纵的触摸屏的情况下,确保通过渲染的内容跟踪诸如手指滑动或滚动手势的用户输入即使对于本地已安装的应用也能够是挑战性的。
作为示例,使用多个事件来处理针对触摸屏的许多手势。在许多实例中,诸如手指滑动的手势通常由当用户第一次将手指放在触摸屏上时发出信号的“触摸开始(touchdown)”事件、当用户抬起手指离开触摸屏时发出信号的“触摸结束(touch up)”事件、以及在触摸触摸屏时跟踪手指移动的多个“触摸移动”事件来表示。在许多计算设备中,可以以与触摸屏计算设备的帧刷新速率匹配的速率(即在触摸屏上更新以帧形式渲染的内容的速率)在该设备上生成事件。此外,在许多计算设备中,帧可以以大约60Hz或更高的频率进行更新,并且因此,简单的手指滑动可以导致产生数十或数百个单独但相关的事件。此外,已经发现,当某些类型的用户输入事件未与在此期间生成输入事件的所渲染的内容帧适当地同步时,可能导致不良的用户体验。但是作为一个示例,通过在触摸屏上拖动用户的手指来缓慢滚动内容能够导致当与移动相关联的事件被映射到错误帧时的不稳定。
然而,在计算设备通过诸如因特网的分组交换网络在流应用环境中与虚拟流应用交互的情况下,前述同步挑战要大得多。由于因特网和其他分组交换网络的实际限制,包含用户输入和/或渲染内容的分组可能被完全延迟或丢失,并且可能无序地到达。此外,在许多移动和/或车辆应用中可能出现网络连接受损的情况下,分组丢失或延迟的风险更大。虽然诸如传输控制协议(TCP)的协议允许在丢失分组的情况下进行分组重传,但是等待接收所有分组以便于确保接收和处理所有输入数据和渲染内容可能会引入不可接受的延迟并减损用户体验。
发明内容
本文公开的一些实施方式可以包括在包括一个或多个处理器的流应用环境中执行的方法,其可以包括将虚拟流应用与通过分组交换网络耦合到流应用环境的远程设备对接,包括从分组交换网络接收在远程设备处生成的输入并且将响应于接收到的输入由虚拟流应用生成的输出显示表示通过分组交换网络流传输到远程设备,从远程设备接收帧刷新事件,每个帧刷新事件与远程设备上的帧相关联,从远程设备接收输入事件,每个输入事件与在远程设备上的帧期间生成的输入相关联,生成用于与和接收到的帧刷新事件相关联的帧相对应的虚拟流应用的虚拟帧,以及控制将接收到的输入事件注入到虚拟流应用中以将接收到的输入事件排列在与和接收到的输入事件相关联的帧相对应的虚拟帧内。
在一些实施方式中,分组交换网络包括因特网,并且远程设备包括移动电话、平板计算机、可穿戴计算机或车辆计算机。此外,在一些实施方式中,来自远程设备的帧刷新事件基于远程设备的帧刷新率来生成,并且生成虚拟帧包括控制虚拟帧刷新率以跟踪远程设备的帧刷新率。
此外,在一些实施方式中,生成用于虚拟流应用的虚拟帧包括响应于从远程设备接收到的第一帧刷新事件生成第一虚拟帧刷新事件。另外,在一些实施方式中,生成第一虚拟帧刷新事件包括控制在向虚拟流应用发出第一虚拟帧刷新事件和从远程设备接收第一帧刷新事件之间的延迟。此外,在一些实施方式中,控制延迟包括根据V(t)=A(t′)+(t-t′)+D来调度第一虚拟帧刷新事件的发出,其中t是在从远程设备接收到的第一帧刷新事件内包括的时间戳,t'是相对最小的单向网络延迟,V(t)是发出第一虚拟帧刷新事件的流应用环境中的发出时间,A(t')是从远程设备接收第一帧刷新事件的流应用环境中的接收时间,并且D是最大回放延迟。
在一些实施方式中,控制延迟包括基于在分组交换网络中观察到的网络抖动来改变延迟。另外,在一些实施方式中,生成用于虚拟流应用的虚拟帧包括响应于发出第一虚拟帧刷新事件并且基于从远程设备接收到的先前帧刷新事件的外推来调度下一个虚拟帧刷新事件的发出使得不管来自远程设备的下一帧刷新事件的延迟或丢失如何也发出下一个虚拟帧刷新事件。此外,在一些实施方式,生成用于虚拟流应用的虚拟帧包括响应于发出第一虚拟帧刷新事件并且基于第一帧刷新事件和从远程设备接收到的稍后的帧刷新事件之间的内插来调度下一个虚拟帧刷新事件的发出,使得不管来自远程设备的下一个帧刷新事件的延迟或丢失如何也发出下一个虚拟帧刷新事件。
在一些实施方式中,流应用环境进一步包括视频流组件,该视频流组件被配置成流传输由虚拟流应用生成的输出显示表示,并且该方法进一步包括以相对于第一虚拟帧刷新事件的受控延迟调度第一流组件帧刷新事件到视频流组件的发出。此外,在一些实施方式中,控制接收到的输入事件到虚拟流应用中的注入包括:对接收到的输入事件进行排队,包括针对每个接收到的输入事件排队相关联的时间戳,以及在与远程设备上的第一帧相对应的第一虚拟帧期间,忽略是重复的任何排队输入事件,注入按时的任何排队输入事件,丢弃迟到的任何排队输入事件,并且继续排队早到的任何排队输入事件。另外,在一些实施方式中,每个输入事件与指向远程设备的触摸屏的用户输入相关联。
一些实施方式还可以包括在包括一个或多个处理器和显示器的设备中执行的方法,该方法可以包括从通过分组交换网络耦合到设备的流应用环境接收输出显示表示,输出显示表示由驻留在流应用环境中的虚拟流应用生成;在显示器上渲染接收到的输出显示表示的多个帧;响应于在渲染多个帧期间生成的输入,通过分组交换网络向流应用环境发出输入事件以用于通信,每个输入事件与多个帧中的在其间生成相关联的输入的帧相关联,以及通过分组交换网络向流应用环境发出多个帧中的每个帧的帧刷新事件以用于通信以使流应用环境能够控制输入事件的注入以将输入事件排列在与和输入事件相关联的帧相对应的虚拟流应用的虚拟帧内。
一些实施方式也包括系统,该系统包括一个或者多个处理器和可操作地与一个或多个处理器耦合的存储器,其中存储器存储指令,所述指令响应于所述被一个或多个处理器执行而使得一个或多个处理器执行上述任何方法。一些实施方式还可以包括包括指令的至少一个非暂时性计算机可读介质,所述指令响应于所述指令被一个或多个处理器执行而使得一个或多个处理器执行任何上述方法。
应当理解,本文更详细描述的前述概念和附加概念的所有组合都被认为是本文公开的主题的一部分。例如,出现在本公开结尾处的所要求保护的主题的所有组合被认为是本文公开的主题的一部分。
附图说明
图1图示根据各种实施方式的可以实践所公开的技术的示例环境。
图2是图示用于在图1的示例环境中处理输入事件的示例操作序列的流程图。
图3是图示用于在图1的示例环境中处理帧刷新事件的示例操作序列的流程图。
图4是图示用于在图1的示例环境中调度流应用环境帧刷新事件的示例操作序列的流程图。
图5是图示用于在图1的示例环境中接收帧刷新事件的示例操作序列的流程图。
图6是图示用于在图1的示例环境中回放的输入的示例操作序列的流程图。
图7是图示用于将输入事件处理为图2中所图示的示例操作序列的另一示例操作序列的流程图。
图8是图示用于将帧刷新事件处理为图3中所图示的示例操作序列的另一示例操作序列的流程图。
图9是图示用于在图1的示例环境中注入手势事件的示例操作序列的流程图。
图10图示适合于在图1的示例环境中实现一个或多个设备的计算机的示例架构。
具体实施方式
应用流允许用户在一些实例中在诸如移动电话的计算设备上运行应用,而不必在计算设备本身上下载和安装应用。在一些实例中,例如,流应用环境,例如,可以在云计算系统中的一个或多个服务器上实现,该云计算系统可以通过诸如因特网的网络由计算设备访问。应用可以作为流应用环境内的虚拟流应用运行,例如,通过在虚拟机中运行应用或者在一些实例中作为有效模拟物理计算设备和/或这些设备的操作系统的虚拟计算设备。另外,流应用环境可以包括将虚拟流应用与计算设备对接的功能,包括接收在计算设备处生成以控制虚拟流应用的输入的能力以及流传输由虚拟流应用生成的渲染的内容的输出显示表示的能力。
例如,图1图示能够托管一个或多个虚拟流应用(VSA)12并且通过一个或多个网络16将其与一个或多个远程设备14对接的示例流应用环境(SAE)10。如上所述,流应用环境10可以实现为例如云计算系统的服务,并且因此使用云计算系统的一个或多个硬件服务器来实现。尽管下文中的讨论主要集中于移动设备,诸如移动电话、平板电脑、车辆计算机、可穿戴计算机等,但是远离他们耦合但不同于流应用环境10的观点的设备14可以使用实际上能够访问云计算系统的任何类型的计算设备来实现。如上所述,设备14和流应用环境10之间的通信可以通过一个或多个网络16(其在一些实施方式中包括诸如局域网(LAN)、广域网(WAN)、因特网等的至少一个分组交换网络)进行,使得设备14和应用流环境10之间的通信利用分组以在它们之间传送数据。
在一些实施方式中,与作为移动设备的远程设备一致,图1图示示例远程设备14,其包括能够接收来自用户的触摸输入的触摸面板18以及能够向用户输出视频或图形内容的显示器20,该触摸面板18和显示器20在一些实施方式中可以被组合成单个触敏屏幕或触摸屏。设备14通常取决于设备的应用还可以包括附加传感器和用户输入组件22和/或附加输出组件24。可以在不同实施方式中使用的各种传感器和组件包括加速度计、GPS传感器、陀螺仪、硬按钮、键盘、指示设备、麦克风、成像设备、扬声器、指示器和触觉反馈设备等。
将理解对图1中所图示的环境的其他变化和修改,并且因此,本发明不限于本文公开的特定环境。
以下讨论的实施方式部分地解决在流应用环境中输入与渲染的可视内容的同步。出于简化讨论的目的,下文描述的实施方式将特别集中于用户手势与渲染的可视内容的同步,并且尤其是针对触摸屏的用户输入。然而,将会理解,本文公开的原理可以应用于其他类型的输入,包括诸如用户操纵鼠标、轨迹球或其他指示设备的其他用户输入、由成像设备或手持设备或可穿戴运动传感器捕获的用户手势、以及诸如传感器输入的附加输入。因此,本发明也不限于通过本文的示例公开的特定输入。
与触摸屏设备的共同用户交互是滚动和/或缩放显示的内容的单个或多个手指手势。在物理触摸屏设备上,触摸屏硬件可以触发触摸事件的连续流,其描述用户的手指在触摸屏上移动时的位置。这些事件通常由设备处理和解释以对设备上显示的内容进行相应的修改。因此,在专用于可滚动内容的显示器的区域中向上或向下滑动手指可以导致内容的相应滚动以跟随手指的运动。当内容的移动精确地跟随手指的运动时发生无缝的用户体验,并且已经发现通过物理设备上的相同时钟驱动触摸事件的速率(频率)和渲染的帧速率获得可接受的结果。因此,在标称时钟频率为60Hz的情况下,跨越1/60秒的短间隔的手指移动通常被映射到以60fps渲染的连续帧。然而,当丢失1/60秒移动到渲染帧之间的一对一对准时能够发生不可期待的结果,使得如果将两个1/60秒移动映射到单个帧同时在下一个帧看不到任何移动,则能够发生不平稳的滚动。
另一方面,利用应用流,触摸事件和帧渲染之间的交互类似地工作,除了在生成输入和显示渲染内容的设备以及处理该输入以生成在设备中显示的渲染内容的虚拟流应用之间存在多个组件和网络之外。
在其中(1)网络没有分组丢失且没有延迟抖动即网络往返时间(RTT)是恒定的并且(2)在虚拟流应用中的渲染帧速率、在流应用环境中的编码帧率以及远程设备中的帧刷新率是相同的例如所有都精确在60Hz的理想情况下,经由应用流的滚动将与在物理设备上的本地应用中滚动一样平滑,不具有由网络RTT引入的额外延迟和附加组件中的处理时间。然而,实际上一些触摸事件能够在网络中丢失,并且由于网络抖动,每个触摸事件能够花费不同数量的时间以从远程设备行进到流应用环境,并且甚至能够无序地到达。此外,一些远程设备并不总是使用相同的、一致的帧刷新率(例如,从60Hz稍微变化,并且在一些实例中,当进入省电模式时降低到较低的帧刷新率),并且流应用环境中的组件可以包括导致被用于虚拟流应用的帧刷新率的变化的延迟。因此,通常存在增加的风险,即,多个触摸事件能够被映射到单个帧中,同时没有事件可以被映射到相邻帧中,导致不平稳的移动。
因此,在一些实施方式中,可以在远程设备14和流应用环境10内实现多个模块或组件,以利用应用流帮助输入与渲染的内容的同步。特别地,在一些实施方式中,远程设备14的操作系统26可以包括控制流传输器组件28和视频播放器组件30,其分别与在流应用环境10中实现的控制播放器组件32和视频流组件或视频流传输器34通信。
控制流传输器组件28用于将输入事件和帧刷新(FR)事件流传输到控制播放器组件32,其前者被流传输到控制播放器组件32中的输入处置器组件36,并且其后者被流传输到控制播放器组件32中的帧刷新(FR)处置器组件38。输入事件是由远程设备14生成以控制虚拟流应用12的事件,并且可以包括例如手势事件,诸如触摸事件,尽管将会理解,响应于其他输入(例如,其他用户输入和/或传感器数据)在远程设备14中生成的事件也可以以输入事件的形式被供应给虚拟流应用12。FR事件是响应于远程设备14中的帧刷新而生成的事件,例如,类似于在一些物理计算设备中与这些设备上的渲染帧相关联地生成的垂直同步事件。
如下将变得更加明显的,输入处置器组件36将由控制播放器组件32接收到的输入事件注入或“回放”到虚拟流应用12中。FR处置器组件38响应于控制播放器组件32接收的FR事件在流应用环境10内生成刷新事件,包括提供给虚拟流应用12和输入处置器组件36以使输入事件与其在远程设备上的相应帧同步的虚拟帧刷新(VFR)事件,以及被提供给视频流组件34以同步虚拟流应用12输出的渲染内容的编码和流传输的流组件帧刷新(SCFR)事件。在一些实施方式中,渲染内容以存储在由虚拟流应用12填充的帧缓冲器中的虚拟帧形式提供给视频流组件34,并且因此,由FR处置器组件38生成的VFR事件以由远程设备14生成的FR事件与远程设备14中的渲染帧相关联的方式类似的方式与虚拟流应用12的虚拟帧相关联。
视频流组件34可以通过对虚拟帧进行编码并将编码的虚拟帧传送到远程设备14的视频播放器组件30来处理虚拟帧,远程设备14的视频播放器组件30对编码的虚拟帧进行解码并在远程设备14的显示器20上显示渲染内容。在一些实施方式中,渲染内容可以被认为是输出显示表示,即,能够用于生成远程设备上的渲染内容的视觉描绘的数据。还将会理解,输出显示表示可以使用各种格式进行编码、未编码、加密、未加密或以其他方式定义,因此本发明不限于任何特定格式的数据,只要数据可以用于在显示器上生成渲染内容的视觉描绘。在一些实施方式中,例如,输出显示表示可以实现为编码数字视频流。
在一些实施方式中,控制流传输器组件28可以实现监听器和/或回调例程以处理操作系统26中的系统事件。例如,可以响应于响应于由操作系统26检测到的各种类型的触摸事件而生成的事件来生成一些输入事件。同样地,在一些实施方式中,可以响应于渲染用于在远程设备14上显示的新帧的帧渲染例程的调用来生成FR事件。可以例如以在一些实施方式中可以是大约60Hz的远程设备的垂直同步速率周期性地生成FR事件,并且FR事件和输入事件都可以包括表示相应系统事件发生时的远程设备系统时间的相关联的时间戳。此外,在一些实施方式中,如果有,通过落入当前帧或垂直同步间隔内的时间戳,即,在当前FR事件时间戳与前一个FR事件时间戳之间,每个帧渲染被配置成反映由输入事件触发的内容更新。在一些实施方式中,还可以在通过网络16进行通信之前对输入和FR事件进行序列化和/或加密。
例如,图2和图3分别图示可以在远程设备14的控制流传输器组件28中实现以分别生成用于传送到流应用环境10的输入和帧刷新(FR)事件的操作序列。如图2中所示,操作序列50可用于处理在远程设备14内生成的输入事件,例如,手势或触摸事件。在块52中,生成输入事件消息,包括远程设备系统时间戳、以及任何相关的事件参数,例如,触摸坐标、相关输入事件的标识符(例如,用于与特定手势相关联的触摸移动或触摸向上事件,开始该手势的初始触摸向下事件的时间戳)等。然后块54将生成的事件消息发送到流应用环境10,并且操作序列50完成。类似地,如图3中的操作序列60所图示,对于帧刷新事件,可以在块62中生成通常包括远程设备系统时间戳的FR事件消息,并且然后在块64中将其发送到流应用环境10中。将会理解,在两种情况下,消息的特定格式以及事件数据被编码成分组的方式可以部分地基于用于在远程设备14和流应用环境10之间进行通信的协议而在不同的实施方式中变化。
如上所述,在一些实施方式中,流应用环境10被配置成将来自远程设备14的输入与由虚拟流应用12生成的渲染内容同步。具体地,在一些实施方式中,流应用环境10可以从远程设备14接收与远程设备14上的特定帧相关联的帧刷新事件,从远程设备14接收与在远程设备14上的帧期间生成的输入相关联的输入事件,生成与和接收到的帧刷新事件相关联的帧相对应的用于虚拟流应用12的虚拟帧,并且然后控制将所接收的输入事件注入到虚拟流应用12中,以将所接收的输入事件排列在与和所接收的输入事件相关联的帧相对应的虚拟帧内。
在一些实施方式中,例如,控制播放器组件32的帧刷新(FR)处置器组件38可以基于由远程设备14的控制流传输器组件28传送的FR事件有效地跟踪远程设备14的帧刷新率并且使用所跟踪的帧刷新率驱动输入事件到虚拟流应用12的注入,并且在一些实例中,驱动来自于视频流组件34的内容的流传输。在一些实施方式中,例如,FR处置器组件38可以以基本上跟踪远程设备的帧刷新率的虚拟帧刷新速率生成VFR事件。此外,在一些实施方式中,控制播放器组件32的输入处置器组件36可以实现作为抖动缓冲器有效地操作的队列,以将输入事件的注入同步到虚拟流应用12中。
为了跟踪帧刷新率,在一些实施方式中,FR处置器组件38可以以下面的方式调度VFR事件。出于此解释的目的,A(t)可以用于表示当流应用环境10接收到具有时间戳t的FR事件时的流应用环境系统时间。然后可以针对使用下面的等式(1)表示为V(t)的流应用环境系统时间调度与接收到的FR事件相对应的VFR事件的发出:
V(t)=A(t′)+(t-t′)+D (1)
其中D表示最大回放延迟(例如,在某些实施方式中设置为诸如20ms的值)并且t'是被选择使得对于迄今为止从远程设备接收到的所有FR事件A(t′)-t′不大于任何其他A(t)-t的参考时间戳。换句话说,可以认为t'对应于以最短的传输时间从远程设备行进到流应用环境10的FR事件,使得A(t′)-t′实际上是相对最小的单向网络延迟,这是相对的,因为A(t')使用的流应用环境系统时钟和t'使用的远程设备系统时钟没有被同步,并且通常不需要同步。在一些实施方式中,t'的选择可以被调整,特别是在流会话的开始处,但是通常将稳定到最终的最小值。利用上面定义的等式(1),可以在V(t')=A(t')+D(在来自远程设备的相应FR事件到达之后具有D的附加回放延迟)处发送具有时间戳t'的流应用环境VFR事件。另外,对于所有其他VFR事件,回放延迟通常永远不会大于D。此外,在一些实施方式中,D可以例如基于观察到的网络抖动而随时自动调整。
另外,在一些实施方式中,可以结合跟踪远程设备FR事件使用外推和/或内插。在图示的实施方式中,例如,每个VFR事件发送与先前的VFR事件的实际发送或者发出结合而被最初地调度。例如,就在V(t
然而,如果具有时间戳t
t
类似地,具有时间戳t
t
通过使用外推和/或内插,可以以与来自远程设备14的FR事件速率基本匹配的速率周期性地发出VFR事件,并且通常甚至当一些FR事件被显著地延迟或丢失时。一旦更多FR事件到达环境中,就可以有效地重新校准VFR事件调度。
如上所述,FR处置器组件38还可以驱动视频流组件34。然而,在一些实施方式中,不是直接向视频流组件发出VFR事件,而是可以通过调度相应VFR事件的延迟版本(在此称为流组件帧刷新(SCFR)事件)来应用受控延迟。在一些实施方式中,例如,可以调度SCFR事件以发出大约10ms以适应虚拟流应用渲染虚拟帧所花费的时间,使得当视频流组件34从虚拟流应用帧缓冲器捕获虚拟帧时,相应的应用内容被完全渲染。然而,还将会理解,如果虚拟流应用被配置成在完成渲染时将虚拟帧推送到视频流组件34,则不能使用单独的SCFR事件。
例如,图4图示在一些实施方式中可由FR处置器组件38执行的用于在流应用环境10中调度帧刷新事件的示例操作序列70。操作序列可以例如响应于与当前FR事件相对应的调度的VFR事件的发出而被调用。块72首先确定是否已经接收到下一个FR事件,并且如果是,则将控制转到块74以使用所接收的下一个FR事件的时间戳例如使用上面的等式(1)来调度下一个VFR事件。然而,如果没有接收到下一个FR事件,则块72将控制转到块76以确定是否已经接收到后来的FR事件。如果不是,则控制转到块78,以使用外推例如通过使用上面的等式(2)从先前的两个FR事件时间戳外推来调度下一个VFR事件。另一方面,如果已经接收到后来的FR事件,则块76将控制转到块80以使用内插例如使用上面的等式(3)来调度下一个VFR事件。
一旦通过块74、78或80调度下一个VFR事件,控制转到块82以调度对应于VFR事件的SCFR事件,例如,通过向VFR事件的发出时间添加受控或固定的延迟。
接下来,块84基于观察到的网络抖动可选地调整一个或多个延迟(例如,上面的等式(1)中使用的D)。调整可以基于跟踪系统响应和网络相关延迟,并且可以在一些实例中基于启发法,并且在其他实例中基于各种机器学习技术。将会理解,增加D还会延迟输入事件回放时间表,并因此减少有效丢弃的迟到的输入事件的数量;但是,这样做的成本是更高的端到端延迟。
图5接下来图示用于处理FR处置器组件38中的所接收的FR事件的操作序列90。虽然主要操作序列90在适当的时间排队用于调度相应VFR事件的接收到的FR事件,如上所述,在一些实例中FR事件可能丢失或延迟,并且外推和/或内插可用于预测丢失或延迟的FR事件的时间戳。因此,在一些实施方式中可能期望在延迟的FR事件最终到达时更新或确认预测的时间戳。具体地,如块92中所图示的,可能期望确定是否已经调度对应于所接收的FR事件的VFR事件。如果不是,则控制转到块94以对FR事件进行排队以稍后调度相应的VFR事件。然而,如果是,则块92反而将控制转到块96以基于所接收的FR事件的时间戳更新调度的VFR事件(并且,如果被调度,则对应的SCFR事件)。
现在转到图6,该附图图示可由控制播放器组件32的输入处置器组件36执行的操作序列100以与远程设备的帧同步的方式回放到虚拟流应用12的输入。在一些实施方式中,输入处置器组件36可以连续地接收从控制流传输器组件28发送的输入事件,并将接收到的输入事件放置在优先级队列上,其中具有较小(较早)时间戳的输入事件具有比具有较大(较晚)时间戳的另一输入事件更高的优先级。然后可以基于回放时间表稍后检索排队的输入事件,并将其作为对应的虚拟输入事件注入或回放到虚拟流应用12中。可以通过响应于FR处置器组件38生成的VFR事件调用操作序列100来同步输入事件注入或回放。块102启动FOR循环以处理优先级队列上的每个输入事件。然后,对于每个输入事件,基于与输入事件相关联的时间戳相对于与触发操作序列100的VFR事件相关联的时间戳来处理该输入事件。
首先,如块104中所图示,在一些实施方式中,可能期望发送重复输入事件以解决网络中的潜在分组丢失,并且因此,如果输入事件在块104中被确定为重复事件,控制可以传递到块106以从优先级队列中弹出或移除重复事件,但是否则忽略该事件。例如,可以基于匹配已经注入的另一输入事件的时间戳,或者基于指示与输入事件相关联的输入已经被注入到虚拟流应用中的其他识别特征来检测重复事件。
如果输入事件不是重复事件,则操作序列100确定输入事件是迟到事件、早到事件或者按时事件。出于本讨论的目的,通过t表示排队的输入事件的时间戳,通过t
例如,块108确定输入事件是否是迟到事件,例如,其中t≤t
块112确定输入事件是否是按时事件,例如,其中t
返回到块112,如果输入事件不是按时事件,则输入事件是早到事件,例如,其中t>t
在一些实施方式中,每当所有输入事件已经由在块102中发起的FOR循环处理,或者每当处理早到事件时,完成当前虚拟帧间隔的输入事件的回放。在其他实施方式中,并且如下面将更详细讨论的,远程设备14中的控制流传输器28可以被配置成重新发送拖曳事件,因此在这样的实施方式中,块102和116可以反而将控制转到块118以确定是否缓存的迟到事件具有比最后注入的输入事件晚的时间戳,并且如果是,则将控制转到块120以注入高速缓存的事件。下面结合事件填充更详细地讨论该功能的进一步讨论。
如上所述,在一些实例中,特别是对于通过诸如因特网的分组交换网络无线耦合到流应用环境的移动设备,分组延迟和丢失能够对应用流性能产生不利影响,特别是从将输入事件注入虚拟流应用的角度来看。在一些实例中,能够使用自动处理分组重传、拥塞控制和重新排序的诸如传输控制协议(TCP)的协议来解决分组丢失,尽管TCP分组的使用尤其能够在有耗网络中导致不可接受的长延迟。使用更快但不太可靠的协议,诸如用户数据报协议(UDP),能够避免与TCP重传和拥塞控制相关联的一些延迟;但是,丢失和无序分组能够导致应用控制不一致。
另一方面,在本文公开的各种实施方式中,可以单独地或共同地利用多种技术来解决分组丢失和延迟。在一些实施方式中,例如,可以通过多次发送输入事件来增加对输入流的冗余来增加针对分组丢失的弹性,可能在解决突发分组丢失的重复之间具有短的延迟。另外,在一些实施例中,可以在流应用环境内合成校正事件以考虑丢失和/或延迟的分组。
例如,在一些实施方式中,可以增加远程设备14的控制流传输器组件28以将每个输入分组重新发送N次,其中N可以基于分组丢失弹性和带宽消耗之间的折衷来确定。另外,在一些实例中,为了更好地处理其中在短突发中发送的连续分组倾向于一起丢失的突发分组丢失,重复的输入事件可以在先前传输之后以例如大约10ms的延迟被发送。例如,图7图示用于处理控制流传输器组件28中的输入事件的操作序列130,例如,作为图2的操作序列50的替代。在块132中,生成输入事件消息,包括远程设备系统时间戳,以及任何相关的事件参数,例如,触摸坐标、相关输入事件的标识符(例如,用于与特定手势相关联的触摸移动或触摸向上事件、开始手势的初始触摸向下事件的时间戳)等等。然后,块134将生成的事件消息发送到流应用环境10N次,并且可选地包括每次传输之间的延迟。然后完成操作序列130。
将会理解,即使事件重复,输入事件仍然能够与重复的输入事件一起丢失。在许多实例中,丢失事件的影响可能是暂时的,并且可能被后续输入事件快速覆盖。然而,对于某些事件,在此称为拖曳事件,情况可能不一定如此。这样,在一些实施方式中,可能期望另外增加控制流传输器组件38以合并事件填充。出于本公开的目的,拖曳事件可以被认为是在没有其他输入事件的静默期之前的序列中的最后输入事件。拖曳事件的常见示例是触摸屏上的滑动手势中的触摸向上事件。如果触摸向上事件与其所有重复事件一起丢失,则流应用环境将不能确定用户是否已经抬起他/她的手指或者手指是否仍然停留在屏幕上而没有进一步移动。因此,此未知状态不再是瞬态的,并且能够持续直到用户在长时间暂停之后开始下一个触摸手势为止。
因此,在一些实施方式中,还可能期待结合远程设备上的每个帧来检查该帧内是否接收到任何新的输入事件,并且如果没有,则重新发送最后的输入事件以确保静默期以FR速率被重复填充最后拖曳事件,并且拖曳事件最终将到达流应用环境以解决未知状态。在一些实施方式中,例如,可以结合控制流传输器组件28中的帧刷新事件的处理来实现这样的功能,例如,用作图3的操作序列60、图8的操作序列140的替代。在操作序列140中,在生成FR事件消息之前,块142可以确定在最后帧间隔期间是否已经发出任何输入事件。如果是,则控制转到块144以生成包括远程设备系统时间戳的FR事件消息,并且然后转到块146以将该消息发送到流应用环境10。另一方面,如果确定在最后帧间隔期间没有发出输入事件,则块142可以将控制转到块148以在将控制转到块144之前将最后输入事件作为拖曳事件重新发送。因此,在没有生成输入事件的帧期间,仍然发送拖曳事件,从而确保拖曳事件最终将由流应用环境接收。
接下来,从控制播放器组件32的角度来看,事件合成可以用于合成校正事件,并且在一些实例中,伴随事件解决丢失或延迟的输入事件。事件合成可以基于例如从按时注入的其他事件中得出的推论。在一些实施方式中,例如,如果适用,则从注入或回放事件合成校正事件,并且然后,对于每个合成校正事件和原始回放事件,如果适用,也可以合成伴随事件。
为了简单起见,以下关于校正事件的讨论将集中于诸如触摸屏手势的手势,并且尤其是关于在单个手指触摸屏上操纵的单触手势。将会理解,这种类型的典型手势将以手势开始事件开始并且以手势停止事件结束,并且在手势开始和停止事件之间发生一个或多个手势移动事件。在触摸屏手势的情况下,例如,用户首先将手指放在触摸屏上的触摸向下事件可以对应于手势开始事件,而其中用户将手指抬离触摸屏的触摸向上事件可以对应于手势停止事件,并且触摸移动事件可以对应于手势移动事件。然而,虽然在下文中描述单点触摸手势,但是将本文公开的技术扩展到其他手势,包括多指触摸手势、鼠标、轨迹球或其他指示设备手势、图像捕获手势以及具有定义的开始和停止事件的其他手势,会是简单的。因此,本发明不限于与这里描述的特定触摸事件一起使用。
为了促进事件的合成,控制播放器组件32可以被配置成跟踪注入到虚拟流应用中的包括合成事件的与手势相关的输入事件的状态,并且特别地可以维持手势的状态在正在开始或完成。在一些实施方式中,手势状态还可以对应于指针的状态,例如,其中开始的手势状态对应于指针向下状态,并且完成的手势状态对应于指针向上状态。在一些实施方式中还可以期待保留与最后注入或重放输入事件相关联的坐标,以及由t
现在参考图9,该附图图示可由控制播放器组件32的输入处置器组件36执行以将手势事件注入到虚拟流应用中的操作序列150。例如,操作序列150可以对应于图6的块116和120中引用的注入操作。在操作序列150的块152-162中,可以单独地或共同地以不同的实施方式实现若干不同的场景被图示用于合成事件。
例如,块152测试要注入的事件是否是手势开始(例如,触摸向下)事件并且手势状态开始,这有效地对应于先前手势停止(例如,触摸向上)事件的丢失。如果是,则控制转到块154以生成对应于丢失的手势停止事件的适当的校正事件。例如,在一些实施方式中,可以通过重复手势事件但是将动作从开始(向下)改变为停止(向上),将事件的坐标替换为最后注入的输入事件的坐标,并且用最后注入的手势开始事件的时间戳t
块156测试要注入的事件是否为手势停止或者移动事件,但是当前状态仍然完成(向上),这有效地对应于先前手势开始(例如,触摸向下)事件的丢失。如果是,则控制转到块158以生成对应于丢失的手势开始事件的适当的校正事件。例如,在一些实施方式中,可以通过重复手势停止或移动事件但是用开始替换停止或移动动作来生成校正事件。
块160测试要注入的事件是否为手势停止或者移动事件,当前状态是否开始(向下),但是在要注入的事件中相关联的手势开始(例如,触摸向下)事件的时间戳与t
在合成校正事件之后,或者如果不需要这样的校正事件,则控制接下来转到块164以注入手势事件。另外,在一些实施方式中,还可能期待此时注入一个或多个伴随事件。特别地,已经观察到在具有触摸屏的物理计算设备上,在每个触摸向下事件之后总是紧跟着触摸移动事件,并且在每个触摸向上事件之前总是紧跟着触摸移动事件。因此,在一些实施方式中,可能期待在块164中通过始终在具有伴随手势移动事件的任何手势停止事件(包括校正手势停止事件)之前并且在具有伴随手势移动事件的任何手势开始事件(包括校正手势开始事件)之后来合成此行为。例如,通过重复相关联的手势开始或停止事件并且简单地将动作从开始或停止改变为移动,可以生成伴随事件。
现在再次返回到图6,如上所述,在一些实例中可能期待缓存在当前虚拟帧间隔中丢弃的最后迟到输入事件(块110)。在弹出优先级队列中的所有迟到输入事件和按时输入事件并保留所有早到输入事件(块102-116)之后,可以将高速缓存的最后迟到输入事件与当前虚拟帧间隔中的最后注入的输入事件进行比较。虽然高速缓存的事件是迟到事件,但在某些实施方式中仍然可能是有用的,因为其可能是结合图8在上面描述的周期性重新发送的拖曳事件。因此,可以回放高速缓存的事件作为当前虚拟帧间隔中的最后事件,只要其时间戳大于注入或回放到虚拟流应用中的最后输入事件的时间戳。在块118中图示对此条件的测试,并且在块120中图示对高速缓存事件的注入。将会理解,时间戳的比较保留由虚拟流应用感知到的输入事件中的排序。
本文描述的技术可以在各种实施方式中在多个不同的计算机、计算机系统或计算设备中实现。例如,图10是可用于在应用流传输环境中实现远程设备和/或各种计算机系统的示例计算机200的块图。计算机200通常包括至少一个处理器204,其经由总线子系统202与多个外围设备通信。这些外围设备可以包括存储子系统212,包括例如存储器子系统214和文件存储子系统220、用户接口输出设备208、用户接口输入设备210和网络接口子系统206。输入和输出设备允许用户与计算机200交互,并且网络接口子系统206提供到外部网络的接口并且耦合到其他计算机中的相应接口设备。
用户接口输入设备210可以包括键盘;诸如鼠标、轨迹球、触摸板或图形输入板的指示设备;扫描仪;合并到显示器中的触摸屏;诸如语音识别系统的音频输入设备;麦克风和/或其他类型的输入设备。通常,术语“输入设备”的使用旨在包括所有可能类型的设备和将信息输入到计算机200中或到通信网络上的方式。
用户接口输出设备208可以包括显示子系统、打印机、传真机或诸如音频输出设备的非可视显示器。显示子系统可以包括阴极射线管(CRT)、诸如液晶显示器(LCD)的平板装置、投影装置或用于创建可视图像的一些其他机制。显示子系统还可以诸如经由音频输出设备提供非可视显示器。通常,术语“输出设备”的使用旨在包括所有可能类型的设备以及将信息从计算机系统510输出到用户或另一个机器或计算机系统的方式。
存储子系统212存储编程和数据构造,其提供本文描述的一些或所有模块的功能。例如,存储子系统212可以包括用于执行前述操作序列的所选方面和/或实现图1中所图示的各种设备和环境的一个或多个组件的逻辑。
这些软件模块通常由处理器204单独执行或与其他处理器组合执行。存储子系统中使用的存储器214能够包括多个存储器,包括用于在程序执行期间存储指令和数据的主随机存取存储器(RAM)218和其中存储固定指令的只读存储器(ROM)216。文件存储子系统220能够为程序和数据文件提供持久存储,并且可以包括硬盘驱动器、软盘驱动器以及相关联的可移动介质、CD-ROM驱动器、光盘驱动器或可移动介质盒。实现某些实施方式的功能的模块可以由文件存储子系统220存储在存储子系统212中,或者存储在处理器204可访问的其他机器中。
总线子系统202提供用于允许计算机200的各种组件和子系统按预期彼此通信的机制。虽然总线子系统202示意性地示为单个总线,但总线子系统的替代实施方式可以使用多个总线。
计算机200能够是各种类型,包括工作站、服务器、计算集群、刀片服务器、服务器群、或任何其他数据处理系统或计算设备。由于计算机和网络的不断变化的性质,图10中描绘的计算机200的描述仅旨在作为用于说明一些实施方式的目的的特定示例。计算机200的许多其他配置可能具有比图10中描绘的计算机系统更多或更少的组件。
此外,特别在计算机200被用于实现诸如移动电话、平板计算机、车辆计算机、可穿戴计算机等远程设备的情况下,还可以包括附加传感器222。可以使用诸如加速计、全球定位传感器、陀螺仪传感器、健康传感器等传感器。
虽然本文已经描述和说明若干实施方式,但是可以利用用于执行功能和/或获得结果和/或本文描述的一个或多个优点的各种其他手段和/或结构,并且这些变化和/或修改中的每一个被认为是在本文描述的实施方式的范围内。更一般地,本文描述的所有参数、尺寸、材料和配置旨在是示例性的,并且实际参数、尺寸、材料和/或配置将取决于使用教导的特定应用或应用。本领域的技术人员将认识到或者能够使用不超过常规的实验确定本文所述具体实施方式的许多等同物。因此,要理解,前述实施方式仅作为示例呈现,并且在所附权利要求及其等同物的范围内,可以以不同于具体描述和要求保护的方式实施实施方式。本公开的实施方式涉及本文描述的每个单独的特征、系统、物品、材料、套件和/或方法。此外,如果这些特征、系统、物品、材料、套件和/或方法不相互矛盾,则两个或更多个这样的特征、系统、物品、材料、套件和/或方法的任何组合被包括在本公开的范围内。
- 同步具有远程设备输入的流应用环境的方法、系统和装置
- 同步具有远程设备输入的流应用环境的方法、系统和装置