3D游戏流传输场景中的航位推测和延时改进
文献发布时间:2023-06-19 09:24:30
背景技术
本公开涉及流传输视频游戏,并且更具体地涉及减轻流传输视频游戏中的延时。
流传输视频游戏可以被定义为如下视频游戏:其中客户端设备经由网络向运行游戏的服务器提供控制命令,服务器对控制命令进行动作以生成视频流,视频流经由网络被发送到客户端设备以在客户端设备的屏幕上显示。流传输视频游戏可能不同于更常规的视频游戏,在常规视频游戏中,即使服务器执行某个处理,客户端设备也会绘出呈现给用户的视频图像。例如,在多玩家游戏中,服务器可以计算玩家之间的交互,但是服务器通常将场景信息发送到客户端设备以绘出视频图像。与在客户端设备上运行游戏相比,流传输视频游戏可以提供集中化游戏处理并且允许更薄、更不复杂的客户端设备和更不复杂的客户端软件的优势。例如,流传输视频游戏可以适用于可能缺少专用图形处理卡的移动设备。
流传输视频游戏可能会遇到用于流传输视频的通信网络的延时和延时变化(抖动)的问题。也就是说,由于网络延时,客户端设备可能在预期时间没有接收到视频分组。由于抖动,接收视频分组的实际时间可能难以预测。特别地,尽管无线网络提供足够的带宽来流传输视频,但是与具有类似带宽的有线网络相比,无线网络可能会经历更大的延时和抖动。
与传统的流传输视频(例如,电影)不同,缓冲可能不适用于流传输视频游戏,因为视频基于用户输入,因此要在将来的帧中呈现的视频图像是事先不可用的。另外,与其中客户端设备运行并行游戏引擎的常规多玩家游戏不同,用于流媒体游戏的客户端设备可能不具有当前游戏状态的信息。因此,当没有接收到用于显示的新的视频图像时,客户端设备可能会冻结。
因此,在本领域中需要改进用于计算机设备上的视频游戏流传输的图形处理。
发明内容
以下给出了本公开的一个或多个实现的简化概述,以提供对这样的实现的基本理解。该概述不是所有预期实现的广泛概述,并且既不旨在标识所有实现的关键或重要元素,也不旨在界定任何或所有实现的范围。其唯一目的是以简化的形式呈现本公开的一个或多个实现的一些概念,作为稍后呈现的更详细描述的序言。
一个示例实现涉及一种用于玩流传输视频游戏的计算机设备。该计算机设备可以包括:存储数据和指令的存储器;与存储器通信的中央处理单元;与通信网络被通信地耦合的网络接口;客户端应用;以及显示控制组件。该计算机设备可以可操作以经由网络接口向流传输服务器传输视频游戏控制。该计算机设备可以可操作以经由网络接口从流传输服务器接收视频流,视频流对响应于视频游戏控制而被生成的视频图像编码。该计算机设备可以可操作以确定要在帧中显示的视频流的视频图像在帧的显示之前的指定时间尚未被完全接收到。该计算机设备可以可操作以至少基于视频图像的历史和针对视频流的运动矢量来确定图像变换。该计算机设备可以可操作以将图像变换应用于与一个或多个先前帧对应的一个或多个图像的至少一部分,以生成替代视频图像。该计算机设备可以可操作以响应于要在帧中显示的视频图像在指定时间未被完全接收到的确定,在帧中显示包括已变换的图像的至少一部分的替代视频图像。
另一示例实现涉及一种用于在计算机设备上玩流传输视频游戏的方法。该方法可以包括向流传输服务器传输视频游戏控制命令。该方法可以包括从流传输服务器接收视频流,视频流对响应于视频游戏控制而被生成的视频图像编码。该方法可以包括确定要在帧中显示的视频流的视频图像在帧的显示之前的指定时间尚未被完全接收到。该方法可以包括至少基于视频图像的历史和针对视频流的运动矢量来确定图像变换。该方法可以包括将图像变换应用于与一个或多个先前帧对应的一个或多个图像的至少一部分,以生成替代视频图像。该方法可以包括响应于要在帧中显示的视频图像在指定时间未被完全接收到的确定,在帧中显示包括已变换的先前显示的图像的至少一部分的替代视频图像。
另一示例实现涉及一种计算机可读介质,该计算机可读介质包括由一个或多个处理器可执行以用于在计算设备上玩流传输视频游戏的代码。该计算机可读介质可以包括用于向流传输服务器传输视频游戏控制的代码。该计算机可读介质可以包括用于从流传输服务器接收视频流的代码,视频流对响应于视频游戏控制而被生成的视频图像编码。该计算机可读介质可以包括用于确定要在帧中显示的视频流的视频图像在帧的显示之前的指定时间尚未被完全接收到的代码。该计算机可读介质可以包括用于至少基于与先前帧对应的视频流的图像和针对先前帧、基于相机变换矩阵而被选择的运动矢量来确定图像重新投影的代码。该计算机可读介质可以包括用于将图像重新投影应用于与一个或多个先前帧对应的视频流的一个或多个图像的至少一部分,以生成替代视频图像的代码。该计算机可读介质可以包括用于响应于要在帧中显示的视频图像在指定时间未被完全接收到的确定而在帧中显示包括重新投影的图像的至少一部分的替代视频图像的代码。
与本公开的实现有关的另外的优点和新颖特征将在以下的描述中部分地阐述,并且在对以下内容进行检查或通过实践学习之后对于本领域技术人员将部分地变得更加明显。
附图说明
在附图中:
图1是根据本公开的实现的用于玩流传输视频游戏的示例系统的示意性框图;
图2是示出根据本公开的实现的用于玩流传输视频游戏的过程和通信的图;
图3是根据本公开的实现的包括替代视频帧的流传输视频游戏的视频流的示例;
图4是根据本公开的实现的用于播放流传输视频游戏的方法的流程图;以及
图5是根据本公开的实现的示例计算机设备的示意性框图。
具体实施方式
本公开提供了用于流传输视频游戏的系统和方法。如本文中使用的,术语“流传输视频游戏”是指一种其中流传输服务器执行视频游戏,生成图像并且将对图像编码的视频流发送到流客户端设备的布置。流传输服务器可以通过对流客户端设备执行绘出过程来生成图像。但是,流传输服务器实际上可能不会在屏幕或监视器(monitor)上显示所生成的图像。相反,流传输服务器可以将图像编码为视频流。视频流可以编码与视频帧对应的图像。帧可以是用于显示图像的连续时间段。编码可以包括图像和/或指示与每个帧对应的图像的改变信息(例如,运动矢量)。对于网络通信,可以将已编码视频流分为多个视频分组,每个视频分组包括视频流的一部分。视频分组可能在传输中丢失,可能乱序到达,或者可能被延迟,使得当视频分组到达时,用于显示对应帧的时间已经过去。
例如,在一种实现中,本公开提供了用于减少网络延时对流客户端设备处的用户体验的影响的系统和方法。具体地,本公开解决了流客户端设备未及时接收视频分组以在流客户端设备的显示器上呈现与帧对应的图像的问题。本公开提供了一种航位推测方法,其中当一个或多个视频分组没有被及时接收到时,基于所生成的图像的历史和针对视频流的运动矢量来生成替代图像。
流客户端设备可以确定用于显示视频帧的视频数据的至少一部分(例如,一个或多个视频分组)在显示视频帧之前的时间没有被接收到。流客户端设备可以基于视频帧的历史和针对视频流的运动矢量来确定图像变换。流客户端可以将图像变换应用于一个或多个先前帧的至少一部分,以生成替代视频帧。如果视频数据在显示时间尚未到达,则流客户端可以显示替代视频帧代替未接收到的视频帧。因此,当没有新的视频帧可用时,代替冻结显示器上的图像,流客户端可以预测丢失的视频帧作为替代图像可能看起来像什么。尽管预测的替代图像不太可能是丢失图像的精确副本,但是替代可以通过填充视频帧以平滑运动来改善用户体验。一旦流客户端接收到当前视频分组,则流客户端可以基于当前视频分组来在正确的帧中显示来自服务器的视频流。
确定图像变换可以由流设备的操作系统在具有或没有视频游戏客户端应用的帮助下执行。在没有视频游戏客户端应用的帮助的情况下,操作系统可以分析视频流以确定图像变换。例如,视频流可以被编码为包括图像和/或指示图像之间的某些像素的变换的运动矢量。操作系统可以分析图像以标识对象并且估计对象的深度。操作系统然后可以将运动矢量从先前帧的图像外推到与未接收到的图像对应的当前帧,以确定图像变换。
借助于视频游戏客户端应用和/或流传输服务器,操作系统可以使用关于图像的已知信息来改善图像变换。例如,视频游戏可以提供指示虚拟相机的姿势和姿势的改变的相机矩阵。由于相机姿势可以是视频帧之间的运动的主要来源,因此相机矩阵可以用于更准确地预测图像变换。作为另一示例,视频游戏可以提供关于视频游戏图像的几何形状的一些信息。例如,视频游戏可以标识对象的位置。操作系统可以高速缓存对象纹理,并且在图像变换之后将高速缓存的纹理应用于对象。
现在参考图1,示例计算机系统100可以包括计算机设备110和流传输服务器160,计算机设备110提供用于在显示器116上在对应视频帧中呈现的视频图像,流传输服务器160将视频游戏流传输到计算机设备110。流传输服务器160可以包括游戏引擎162,该游戏引擎162处理来自一个或多个用户的各种输入(例如,控制命令158)并且更新游戏状态。游戏状态可以是指视频游戏的任何特征的状态,诸如环境、角色、对象或其属性。流传输服务器160还可以包括视频编码器164,该视频编码器164生成并且编码用于计算机设备110的视频流166。视频流166可以对例如基于用户的角色的观点为特定用户而被生成的或者包括为用户传达游戏状态的适用元素的信息的图像编码。流传输服务器160可以被实现为例如一个或多个硬件计算机服务器、或者由云服务提供的一个或多个虚拟服务器。
计算机设备110可以包括任何移动或固定计算机设备,其可以可连接到用于流传输视频游戏的网络。计算机设备110可以是例如计算机设备(诸如台式或膝上型或平板计算机)、蜂窝电话、游戏控制台/设备、混合现实或虚拟现实设备、音乐设备、电视、导航系统、相机、个人数字助理(PDA)或手持设备、或者具有与一个或多个其他设备的有线和/或无线连接能力的任何其他计算机设备。
计算机设备110可以包括存储器112和被配置为控制计算机设备110的操作的CPU114。存储器112可以被配置为用于存储定义操作系统140和/或客户端应用150和/或与操作系统140和/或客户端应用150相关联的数据和/或计算机可执行指令,并且CPU 114可以执行操作系统140和/或客户端应用150,该操作系统140和/或客户端应用150可以是流媒体游戏客户端应用。存储器112的示例可以包括但不限于计算机可用的存储器类型,诸如随机存取存储器(RAM)、只读存储器(ROM)、磁带、磁盘、光盘、易失性存储器、非易失性存储器及其任何组合。存储器112可以存储由CPU 114执行的应用的本地版本。
CPU 114可以包括用于执行指令的一个或多个处理器。CPU 114的示例可以包括但不限于如本文中描述的特别编程的任何处理器,包括控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、片上系统(SoC)、或者其他可编程逻辑或状态机。CPU114可以包括其他处理组件,诸如算术逻辑单元(ALU)、寄存器和控制单元。
显示器116可以连接到与CPU 114和计算机设备110的图形处理单元(GPU)120通信的视频端口122。图像处理可以按照使得能够提供对图像变换的确定和应用的方式在CPU114与GPU 120之间进行划分。例如,CPU 114可以确定何时将应用图像变换,并且GPU 120可以将图像变换应用于一个或多个先前图像的每个像素。
计算机设备110还可以包括用于从用户接收输入的输入设备118。输入设备118可以包括例如鼠标、键盘、触摸屏、触摸板、按钮、游戏控制器、数字笔、头戴式显示器、可穿戴设备、或提供输入的其他设备。
计算机设备110还可以包括与CPU 114和/或GPU 120集成的视频端口122。视频端口122可以是例如VGA、DVI、HDMI或DisplayPort输出。视频端口122可以提供显示器116可以利用的视频信号,显示器116可以包括监视器或虚拟现实头戴式显示器(HMD)。例如,视频端口122可以周期性地扫描出GPU存储器126中的视频缓冲器。CPU 114、GPU 120和视频端口122可以针对计算机设备110执行一般的图形处理操作。
计算机设备110还可以包括网络接口124,该网络接口124可以包括任何有线或无线网络接口(例如,以太网或Wi-Fi)。作为另一示例,计算机设备110可以可选地包括通用串行总线(USB)接口。计算机设备110的网络接口124可以经由网络170连接到流传输服务器160的对应网络接口。网络170可以是传输分组的通信网络。例如,网络170可以是局域网(LAN)、广域网(WAN)或互联网。网络170可以利用各种协议,包括互联网协议(IP)。因此,计算机设备110可以经由网络170向流传输服务器160传输数据(例如,数据分组)以及从流传输服务器160接收数据(例如,数据分组)。
网络170可能对通信的延时做出贡献。在流传输视频游戏的上下文中的延时可以是指用户进行输入与用户看到在他的屏幕(例如,显示器116)上更新的图像之间的时间段的持续时间。高延时可能会使游戏无法播放。流情况下的延时包括很多分量,包括网络延时、绘出时间、图像编码时间等,并且可能超过100ms。网络通信的另一特性是抖动。抖动衡量延时的可变性。从流传输视频游戏玩家的角度来看,抖动表现为对输入的不均匀反应,并且可能导致游戏体验不和谐。与有线网络相比,诸如wi-fi和移动网络等无线网络通常具有较高的抖动。带宽可以是指平均每秒每秒可以在客户端(例如,计算机设备110)与服务器(例如,流传输服务器160)之间传输多少数据。带宽可能是不对称的,从客户端到服务器的带宽通常比相反方向的带宽低得多。有损网络协议(诸如用户数据报协议(UDP))通常用于网络流传输。这是因为,具有错误检查和纠正功能的协议(诸如传输控制协议(TCP))具有更差的延时保证。使用诸如UDP等协议可能会导致一些分组在传输中丢失。
操作系统140可以包括存储在存储器112中并且由CPU 114执行的指令(诸如客户端应用150)。操作系统140可以包括用于控制GPU120的显示控制器142。例如,显示控制器142可以向GPU 120提供控制命令以执行一个或多个特定图形处理操作,诸如绘出源图像或执行调节。显示控制器142可以包括:用于接收和解码视频流166的流传输引擎144;用于检测视频流166中的延迟的延时模块146;以及用于在当前视频帧未被接收到时生成要应用于一个或多个先前视频帧中的一个或多个图像的图像调节的重新投影模块148。
计算机设备110还可以包括客户端应用150,该客户端应用150包括存储在存储器112中并且由CPU 114执行的指令。应用150例如可以是与流传输服务器160通信的流传输视频游戏客户端应用。例如,应用150可以包括控制组件152,该控制组件152从用户接收用户输入并且向流传输服务器160传输控制命令158。在一种实现中,应用150还可以维持关于视频游戏的一些状态信息。例如,应用150可以维持指示相机的姿势的相机矩阵154。应用150可以基于从流传输服务器160接收的服务器相机矩阵来更新相机矩阵154。另外,在一种实现中,应用150可以包括几何形状156,该几何形状156指示可以在视频帧中绘出的一个或多个对象的几何形状。在一些实现中,应用150可以将相机矩阵154和/或几何形状156提供给重新投影模块148以确定图像变换。
现在参考图2,图200示出了计算机设备110和流传输服务器160处的处理和通信的示例时序。在202处,计算机设备110(例如,GPU120和显示器116)可以显示先前图像。先前图像可以对应于视频流中的先前帧。先前图像可以基于例如从流传输服务器接收的视频信息。如下面进一步详细讨论的,先前图像也可以基于应用于另一视频帧的图像变换。在任何一种情况下,先前图像可以是指例如在先前帧中已经显示在显示器116上的图像。此外,要在帧中显示的图像的视频分组可能会稍后到达。尽管图像可能太迟到达而无法在正确的帧中显示,但是图像可以用于图像变换并且可以被称为与先前帧对应的图像。
在204处,计算机设备110(例如,控制组件152)可以从用户接收用于控制视频游戏的用户输入。例如,可以经由输入设备118(例如,鼠标、键盘、触摸屏、控制器、或启用用户交互的其他设备)来提供输入。在206处,控制组件152可以将用户输入作为控制命令158传递给流传输服务器160。控制命令158可以是原始输入(例如,鼠标移动和按钮按下),或者控制组件152可以执行对输入的某种处理。例如,控制组件152可以将鼠标移动或按钮按下转换为游戏命令。也就是说,代替传输原始输入数据,控制组件152可以传输游戏命令,诸如用于向前移动角色或激活能力的命令。因此,控制命令158可以包括原始输入命令和游戏命令中的一者或两者。
在208处,流传输服务器160可以执行游戏状态更新。游戏状态更新可以包括由游戏引擎162执行的任何命令。例如,游戏状态更新可以包括一个或多个用户、环境和对象之间的交互。游戏状态更新可以基于控制命令158。
在210处,流传输服务器160可以针对每个用户执行视频绘出。流传输服务器160可以基于用户的相机视图来生成图像。例如,相机视图可以包括环境以及用户角色可以看到的任何对象。流传输服务器160可以不必在流传输服务器160处显示所生成的图像。流传输服务器160可以在存储器中生成图像。
在212处,流传输服务器160可以对所绘出的视频图像执行视频编码。本领域中已知各种视频编码技术用于减小用于传输的视频的尺寸。这样的视频编码对于流传输视频游戏减少由游戏使用的网络带宽很重要。视频编码技术可以产生可以被解码以重新生成编码图像的各种描述性数据。例如,视频编码可以包括用于像素或对象组的运动矢量。
在214处,计算机设备110可以确定要应用于一个或多个先前图像的图像调节。计算机设备110可以与流传输服务器160处的处理同时确定图像调节。因此,在216,当下一视频帧的分组将要到达时,计算机设备110可以使图像调节可用。
在218处,计算机设备110可以确定下一视频帧的视频分组是否已经被接收到。动作218可以在下一视频帧的显示之前的指定时间发生。例如,指定时间可以是允许解码视频分组和/或执行图像调节的时间。如果所有视频分组在指定时间已经被接收到,则在222处,计算机设备110可以基于所接收的视频分组来对图像解码。如果视频分组在指定时间尚未被及时接收到,则在220处,计算机设备110可以将所确定的图像调节应用于与一个或多个先前帧相关联的一个或多个图像以生成替代图像。在一种实现中,动作218处的判决可以在动作220处调节图像或者在动作222处解码图像之前发生。由于动作220和222可以利用相同的资源(例如,GPU 120和存储器126)来确定要执行哪个动作,所以可以节省资源。在替代实现中,动作220和222都可以被执行以尝试生成两个图像。如果解码过程失败(例如,由于未及时接收到视频分组),则可以选择替代图像。
在224处,如果视频分组在指定时间之前未被及时接收到,则计算机设备110可以显示替代图像,或者如果视频分组被及时接收到,则计算机设备110可以显示所接收的图像。因此,计算机设备110可以根据视频分组是否被及时接收到而显示由流传输服务器生成的图像或替代图像。例如,在具有高延时的情况下,计算机设备110可以显示替代图像。
现在参考图3,示例视频流300包括视频帧310、330和350。视频帧310和330可以是由流传输服务器160生成的流帧。视频帧350可以是在对应视频帧没有及时从流传输服务器160到达以进行显示的情况下由计算机设备110生成的替代帧。
作为示例,视频帧310可以包括与垂直走廊相交并且在墙壁314-a处终止的走廊312-a的图像。例如,视频游戏可以允许用户控制沿着走廊312-a行走的角色。走廊312-a可以由左墙壁和右墙壁限定。右墙壁可以包括窗口316-a,而左墙壁可以包括门道318-a。
视频帧330可以是在视频帧310之后的下一视频帧。例如,如果控制命令158将字符向前移动,则可以生成视频帧330。在视频帧330中,每个对象的先前位置(例如,在视频帧310中)以虚线示出。用于指示运动的方向和幅度的运动矢量332、334、336如箭头所示。例如,墙壁314-b可能已经如运动矢量332所指示的在视频帧330中向下移动,而窗口316-b可能已经如运动矢量334所指示的向下和向右移动,而门道318-b可能已经如运动矢量336所指示的向下和向左移动。视频帧330中的墙壁314-b、窗口316-b和门道318-b的尺寸也可能随着相机向对象中的每个对象的移动而越来越大。尺寸信息也可以被包括在视频编码中。
视频帧330的视频编码可以将墙壁314-b、窗口316-b和门道318-b中的每个标识为像素组,并且指示对应的运动矢量332。由于大多数像素是在视频帧310和视频帧330中相同,所以提供移动的像素组和运动矢量可以针对视频编码提供显著的压缩。
视频编码的运动矢量332还可以用于确定图像变换以生成替代图像,如果没有及时从流传输服务器160接收到视频分组,则可以将替代图像显示为视频帧350。视频帧350示出了基于运动矢量332、334、336的示例替代图像。例如,在一种实现中,图像变换可以包括将运动矢量332、334、336应用于与先前帧相同的对象或像素组。如图所示,在视频帧350中,墙壁314-c可以进一步向下移动,窗口316-c可以进一步向下和向右移动,而门道318-c可以进一步向下和向左移动。在图像变换之后超出屏幕空间的像素可能无法绘制。例如,门道318的延伸超过底部边缘的部分可以不被显示。应用来自先前视频帧330的运动矢量还可以导致没有颜色信息的区域352,因为区域352中的所有像素都已经被移动并且没有新的信息被接收到。计算机设备110可以基于相邻像素组(例如,墙壁314-c以及走廊312-c的左和右墙壁)尽最大努力来猜测要用于区域352的颜色。
尽管图3示出了基于视频帧的历史的图像变换的一个示例,但是可以使用其他技术来确定图像变换。例如,给定相机变换和每像素深度值,可以计算世界空间中的点。可以为每个点分配来自当前颜色帧的颜色。给定不同的相机变换,可以将这些有色点投影到屏幕空间中。这种类型的图像变换可以被称为重新投影。重新投影可以包括例如根据位置信息或相机姿势的改变来倾斜或以其他方式调节图像。例如,计算机设备110可以具有每像素深度和颜色以及来自先前帧的相机变换矩阵,并且视频流166中的分组可能丢失。丢失的分组可以对应于屏幕上计算机设备110现在没有其当前数据的某个区域。通过当前帧变换,计算机设备110可以采用重新投影以用来自一个或多个先前帧的颜色填充丢失区域。管理相机变换和使用重新投影的一个好处是,重新投影允许将由于相机运动而导致的帧中的所有图像运动都分解出来(factor out)并且表示为姿势运动的单个变化,从而仅留下场景中的独立运动源进行管理、传输、处理等,而不必完全依赖于编码。例如,利用重新投影,由于运动矢量332、334、336源自玩家/相机运动,而其余场景是静态的,因此可以省略以上关于编码器的图3所描述的运动矢量。因此,除非其他场景元素在走廊312中独立于玩家而移动,否则重新投影可以仅使用相机变换。重新投影模块148可以按照几种方式确定相机变换和每像素深度值。
深度重构是一种用于从平面2D图像(例如,视频帧330)重构深度信息的过程。本领域中已知几种算法可以从单个图像、图像加相机变换、立体图像、图像序列等重构深度信息。这是图像处理和机器人技术中的一个活跃的研究领域,并且可以使用基于新型人工智能的方法进行深度重构途径。场景的深度信息可以高速缓存和在后续帧中重用。深度信息也可以被交互地完善和更新,使得重新投影模块148保持3D场景中的深度的表示。深度信息可以表示为体素,或者可以使用参数描述。在一种实现中,可以根据跨多个彩色图像帧的特征观察对应关系来估计和完善用于完整帧的相机变换矩阵。另外,可以确定跨帧的相机变换矩阵的运动矢量,并且针对后续帧进行外推。
在一些实现中,流传输服务器160可以经由客户端应用150提供用于确定图像变换的附加信息。例如,流传输服务器160的游戏引擎162可以将相机矩阵154报告给应用150,使得流传输服务器160和计算机设备110具有对相机变换的最新理解。在一种实现中,相机矩阵154可以是4×4浮点矩阵,并且可以不显著增加带宽消耗。在一种实现中,由于用于传输相机矩阵154的带宽很小,因此流传输服务器160可以在一帧的多个分组中进行相机矩阵154的冗余传输。因此,如果包含矩阵的分组之一没有及时到达,则可以从帧中的另一分组中恢复相机矩阵154。在一种实现中,应用150可以与游戏引擎162并行地更新相机矩阵154。例如,在一些游戏中,控制命令158可以直接控制相机矩阵154(例如,控制命令158移动虚拟相机)。应用150可以更新相机矩阵154,而无需执行由流传输服务器160执行的更复杂的游戏状态更新和绘出操作。
当可用时,相机矩阵154可以协助流传输引擎144挑选良好的运动矢量,并且还可以帮助在流传输服务器160和计算机设备110中以更高粒度生成运动矢量。已知相机变换也可以有助于将背景场景与运动对象分离。也就是说,已知相机矩阵154可以使计算机设备110上的深度缓冲器重构更加鲁棒。
可以由流传输服务器160提供的附加信息的另一示例是深度信息。重新投影模块149可以使用来自流传输服务器160的深度信息,而不是依赖于深度重构,或者可以使用深度信息来增强深度重构。在计算机设备110上具有地面真实深度信息可以降低深度重构的复杂度。但是,如果传输每像素深度,则深度缓冲器信息可能会显著增加带宽消耗。减少深度缓冲器信息的带宽的一种技术是在考虑到相机位置的改变之后仅传输对深度信息的改变。如上所述,可以使用重新投影来将相机运动分解出来。
可以由流传输服务器160提供的附加信息的另一示例是几何形状156。由于对象的几何形状不太可能快速改变,因此可以不频繁地执行几何形状156的传输,并且该信息可以被压缩或打包。例如,几何形状156可以与具有很少变化的视频帧一起传输,从而导致更少和/或更小的分组。客户端应用150还可以包括存储在计算机设备110处的几何形状156。例如,客户端应用150可以包括用于频繁使用的对象的几何形状156。
可以由流传输服务器160提供的附加信息的另一示例包括除视频编码中包括的运动矢量之外的附加运动矢量。例如,可以按照从粗糙区域到每像素或子样本粒度的各种粒度级别为帧的空间屏幕空间区域提供运动矢量。在使用几何形状156的另一种实现中,可以由流传输服务器160提供用于场景几何形状的运动矢量。
机器学习可以由重新投影模块148用于图像分段,以进一步使用改进的范围属性来细化粗略运动矢量信息的范围和/或改善深度重构。例如,机器学习模型(诸如深度卷积神经网络)可以执行图像分类。例如,神经网络可以对视频流的图像执行聚类,以标识经历相同运动矢量的像素组。像素组可以表示在像素之间具有固定深度关系的对象。在另一示例中,可以使用由游戏引擎162生成的分段的示例来训练机器学习分类器,其中对对象进行标识。重新投影模块148可以将粗粒度运动矢量(例如,由视频编码器164或游戏引擎162产生,其可能受到用于传输的网络带宽预算的约束)与在客户端计算机设备110上执行的细粒度图像分段相结合。
现在参考图4,提供了用于计算机设备110执行流传输视频游戏的示例方法400,其中流传输服务器160生成视频图像并且将视频图像流传输到计算机设备110。例如,当包括流传输视频图像的分组没有及时到达计算机设备110以进行显示时,可以使用方法400来减少延时对流传输视频游戏的影响。方法400中示出的动作可以在时间上重叠。例如,在某个时刻,两个动作可以由不同组件执行。动作的执行还可以在组件上交错。另外,方法400中示出的动作可以按照不同于图4所示的顺序而被执行。
在410处,方法400可以包括向流传输服务器传输视频游戏控制命令。例如,在计算机设备110上运行的客户端应用150可以执行控制组件152以经由网络接口124向流传输服务器160传输控制命令158。
在420处,方法400可以包括接收视频流,视频流对响应于视频游戏控制而被生成的视频图像编码。例如,显示控制器142可以执行流传输引擎144以接收视频流166,视频流166对响应于控制命令158而被生成的视频图像编码。流传输引擎144可以经由网络接口124从流传输服务器160接收视频流166。
在430处,方法400可以包括确定要在帧中显示的视频流的视频图像在帧的显示之前的指定时间尚未被完全接收到。例如,显示控制器142可以执行延时模块146以确定要在帧中显示的视频流166的视频图像在帧的显示之前的指定时间尚未被完全接收到。例如,在指定时间,延时模块146可以确定帧的所有分组是否已经被接收到,并且在任何分组丢失时确定视频图像尚未被完全接收到。
在440处,方法400可以包括至少基于视频图像的历史和针对视频流的运动矢量来确定图像变换。例如,重新投影模块148可以至少基于先前帧的历史和针对视频流的运动矢量来确定图像变换。在一种实现中,图像变换可以是重新投影。在442处,动作440可以包括从对视频流的视频编码提取运动矢量。例如,重新投影模块148可以从视频流166的视频编码提取运动矢量。在444处,动作440可以包括确定与一个或多个先前视频帧对应的图像点的深度值。例如,重新投影模块148可以确定先前显示的图像或接收到太迟而无法在先前帧中显示的图像的点的深度值。在一种实现中,重新投影模块148可以执行深度重构算法。在另一实现中,在448处,重新投影模块148可以经由应用150从流传输服务器160接收深度信息。在另一实现中,重新投影模块148可以将针对视频游戏而被训练的机器学习模型应用于图像以确定深度值。在449处,动作440可以包括维持指示虚拟相机相对于视频图像的位置的相机矩阵。例如,客户端应用150可以维持指示虚拟相机相对于视频图像的位置的相机矩阵154。
在450处,方法400可以包括将图像变换应用于与一个或多个先前帧对应的图像的至少一部分,以生成替代图像。例如,重新投影模块148可以控制GPU 120将图像变换应用于与一个或多个先前帧对应的一个或多个图像的至少一部分。重新投影模块148可以向GPU120发送命令以及图像变换和一个或多个先前显示的图像的要对其应用图像变换的部分。GPU 120可以通过对一个或多个先前显示的图像执行图像变换来生成替代图像。在452处,动作450可以包括基于先前视频帧的深度值和相机变换来重新投影先前视频帧的至少一部分。例如,GPU 120可以基于先前视频帧的深度值和相机矩阵154来重新投影与先前视频帧330对应的图像的至少一部分。
在460处,方法400可以包括在帧中显示替代视频图像,替代视频图像包括已变换图像的至少一部分。例如,显示器116可以显示包括视频帧330的已变换图像的至少一部分的视频帧350。显示器116可以经由视频端口122从GPU 120中扫描出视频图像。
现在参考图5,示出了根据一种实现的示例计算机设备110,与图1相比,该示例计算机设备110包括附加组件细节。在一个示例中,计算机设备110可以包括用于执行与本文中描述的组件和功能中的一项或多项相关联的处理功能的处理器48。处理器48可以包括单组或多组处理器或多核处理器。此外,处理器48可以被实现为集成处理系统和/或分布式处理系统。在一种实现中,例如,处理器48可以包括CPU 114和GPU 120。在一个示例中,计算机设备110可以包括存储器50,该存储器50用于存储由处理器48可执行以执行本文中描述的功能的指令。在一种实现中,例如,存储器50可以包括存储器112和/或存储器126。
此外,计算机设备110可以包括通信组件52,该通信组件52利用本文中描述的硬件、软件和服务来提供与一方或多方的通信的建立和维持。通信组件52可以在计算机设备110上的组件之间以及在计算机设备110与外部设备(诸如位于通信网络中的设备和/或串行或本地连接到计算机设备110的设备)之间进行通信。例如,通信组件52可以包括一个或多个总线,并且还可以包括可操作用于与外部设备接口的分别与发射器和接收器相关联的发射链组件和接收链组件。在一种实现中,例如,通信组件52可以包括网络接口124。
另外,计算机设备110可以包括数据存储库54,该数据存储库54可以是硬件和/或软件的任何合适的组合,数据存储库54提供结合本文中描述的实现而采用的信息、数据库和程序的大容量存储。例如,数据存储库54可以是用于操作系统140(图1)和/或应用150(图1)的数据存储库。
计算机设备110还可以包括用户接口组件56,该用户接口组件56可操作以从计算机设备110的用户接收输入并且还可操作以生成用于呈现给用户的输出。用户接口组件56可以包括一个或多个输入设备,包括但不限于键盘、数字键盘、鼠标、触敏显示器、导航键、功能键、麦克风、语音识别组件、能够从用户接收输入的任何其他机制、或其任何组合。此外,用户接口组件56可以包括一个或多个输出设备,包括但不限于显示器、扬声器、触觉反馈机制、打印机、能够向用户呈现输出的任何其他机制、或其任何组合。
在一种实现中,用户接口组件56可以传输和/或接收与操作系统140和/或应用150的操作对应的消息。此外,处理器48执行操作系统140和/或应用150,并且存储器50或数据存储库54可以存储它们。
如本申请中使用的,术语“组件”、“系统”等旨在包括计算机相关实体,诸如但不限于硬件、固件、硬件和软件的组合、软件、或执行软件。例如,组件可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。作为说明,在计算机设备上运行的应用和计算机设备都可以是组件。一个或多个组件可以驻留在执行进程和/或线程中,并且组件可以位于一个计算机上和/或分布在两个或更多个计算机之间。另外,这些组件可以从其上存储有各种数据结构的各种计算机可读介质执行。组件可以诸如根据具有一个或多个数据分组的信号通过本地和/或远程过程进行通信,诸如来自与本地系统、分布式系统中的另一组件进行交互和/或通过网络(诸如互联网)经由信号与其他系统交互的一个组件的数据。
此外,术语“或”旨在表示包含性“或”而不是排他性“或”。也就是说,除非另有说明或从上下文中清楚得知,否则短语“X使用A或B”旨在表示任何自然的包含性排列。也就是说,以下任何一种情况都满足短语“X使用A或B”:X使用A;X使用B;或X同时使用A和B。此外,除非另有说明或从上下文中清楚得知指向单数形式,否则在本申请和所附权利要求书中使用的冠词“一个(a)”和“一个(an)”通常应当解释为表示“一个或多个”。
各种实现或特征可以根据可以包括多个设备、组件、模块等的系统来呈现。应当理解和意识到,各种系统可以包括附加的设备、组件、模块等,和/或可以并非包括结合附图讨论的所有设备、组件、模块等。也可以使用这些方法的组合。
结合本文中公开的实施例而描述的方法的各种说明性逻辑、逻辑块和动作可以用旨在执行本文中描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑设备、分立门或晶体管逻辑、分立硬件组件、或其任何组合中的特别地编程的一种而被实现或执行。通用处理器可以是微处理器,但是备选地,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器也可以被实现为计算机设备的组合,例如,DSP和微处理器的组合、多个微处理器、与DSP核心结合的一个或多个微处理器、或任何其他这样的配置。另外,至少一个处理器可以包括可操作以执行一个或多个上述步骤和/或动作的一个或多个组件。
此外,结合本文中公开的实现而描述的方法或算法的步骤和/或动作可以直接体现在硬件中,在由处理器执行的软件模块中,或在这两者的组合中。软件模块可以驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM、或本领域已知的任何其他形式的存储介质中。示例性存储介质可以被耦合到处理器,使得处理器可以从该存储介质读取信息并且可以向该存储介质写入信息。备选地,存储介质可以与处理器成一体。此外,在一些实现中,处理器和存储介质可以驻留在ASIC中。另外,ASIC可以驻留在用户终端中。备选地,处理器和存储介质可以作为分立组件驻留在用户终端中。另外,在一些实施方案中,方法或算法的步骤和/或动作可作为一个代码和/或指令或者代码和/或指令的任何组合或集合而驻留在机器可读介质和/或计算机可读介质上,机器可读介质和/或计算机可读介质可以被并入计算机程序产品中。
在一种或多种实现中,所描述的功能可以按照硬件、软件、固件或其任何组合而被实现。如果以软件实现,则功能可以作为一个或多个指令或代码在计算机可读介质上存储或传输。计算机可读介质包括计算机存储介质和通信介质,包括有助于将计算机程序从一个地方转移到另一地方的任何介质。存储介质可以是计算机可以访问的任何可用介质。作为示例而非限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁性存储设备、或者可以用于以指令或数据结构形式携带或存储期望的程序代码并且可以由计算机访问的任何其他介质。本文中使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式复制数据,而光盘通常通过激光以光学方式复制数据。上述各项的组合也应当被包括在计算机可读介质的范围内。
尽管已经结合本公开的示例描述了本公开的实现,但是本领域技术人员将理解,可以在不脱离本发明范围的情况下对上述实现进行变化和修改。通过考虑说明书或根据本文中公开的示例的实践,其他实现对于本领域技术人员将是很清楚的。
- 3D游戏流传输场景中的航位推测和延时改进
- 一种基于航位推测的目标轨迹监视装置