用于降低的视频等待时间的接收方侧修改的制作方法

文档序号:14624704发布日期:2018-06-08 07:50阅读:135来源:国知局

已用其中各组件协作以并发地对不同的视频帧执行操作的管线架构构造了生成和编码视频的计算设备。这些组件通常包括视频生成组件、帧缓冲器、编码器以及可复用声音数据、准备视频帧以供网络传输、执行图形变换等的可能某些其他组件。通常,由图形管线处理的数据单元已经为视频帧。也就是说,完整的帧填充帧缓冲器,随后完整的帧被传递到下一组件,该下一组件可变换该帧,并且仅在整个帧已被完全变换时才将经变换的帧传递到下一组件。

该逐帧方法对于硬件的设计以及用于驱动该硬件的软件的设计而言可能是方便的。例如,管线的组件可全部由相同的vsync(垂直同步)信号来驱动。然而,在要求实时响应性和低等待时间的场景中可存在缺点。如仅由本申请发明人所观察到的,从(i)发生使得开始在一个设备处生成图形(视频帧)的事件到(ii)在另一设备上显示这些图形的时间的等待时间可长到足以是能被注意到的。在该事件是到诸如游戏之类的交互式图形生成应用的用户输入的情况下,此等待时间可使得该应用对用户而言显得反应迟钝或迟缓。如仅发明人已领会的,在图形管线的其余部分可处理(例如,开始编码)新帧之前等待帧缓冲器充满该新帧的时间以及在网络连接可开始视频流传送之前等待整个帧被编码的时间可对总等待时间有贡献。

除了上文以外,为了编码视频以供通过网络或无线信道进行流传送,对同一视频帧的不同片执行不同类型的编码已成为可能。例如,ITU(国际电信联盟)的H.264/AVC和HEVC/H.265标准允许帧具有被独立编码的一些片(“I片(ISlice)”)。I片对帧的其他部分或其他帧的各部分没有依赖性。H.264/AVC和HEVC/H.265标准还允许帧的各片(“P片”)基于先前帧的其他片通过帧间预测和补偿来被编码。这样的片也可被独立地解码。

当被编码在各片中的帧流在有损信道上被传送时,如果一个帧的个体第N个片被损坏或丢弃,则有可能通过将下一帧的第N个片编码为I片来从此部分损失中恢复。然而,当整个帧被丢弃或损坏时,完全编码恢复变得有必要。先前,这样的恢复将通过传送整个I帧(如本文中所使用的,“I帧”将指代仅具有I片的帧或在无需片的情况下编码的帧,而“P帧”将指代具有所有P片的帧或在无需任何帧内编码的情况下编码的帧)来执行。然而,如仅由本申请发明人所观察到的,I帧的传输可导致与P帧或主要具有P片的帧有关的帧大小方面的峰值。尤其对于诸如游戏之类的交互式应用而言,此峰值可形成等待时间问题、抖动或可能有问题的其他人工产物。

以下描述了涉及实现图形管线等的技术,该图形管线能够依据入站视频帧的片并且可能在该视频帧已被完全从编码和传送该视频帧的设备中接收到之前处理(例如,解码)该视频帧。

概述

包括以下概述仅仅是为了介绍在以下详细描述中讨论的一些概念。该概述不是完整性的并且不意图划定所要求保护的主题的范围,所述范围由结尾处呈现的权利要求书提出。

主机具有依据部分(例如,像素或行)或片来处理帧的图形管线。远程设备经由网络向主机传送视频流容器。容器中的视频流的帧具有经编码的部分。图形管线包括提取视频帧的各部分的去复用器。当某部分已被提取时,该部分被传递到在管线中紧邻的解码器。解码器可在接收帧的下一部分之前,可能在去复用器正在对帧的下一部分进行去复用的同时,对该部分进行解码。该帧的经解码的部分被传递给渲染器,该渲染器积累该帧的各部分并对该帧进行渲染。在任何时间,帧的各部分可并发地被接收、去复用、解码和渲染。解码器可以是单线程、多线程或硬件加速的。

附图简述

从结合附图阅读的以下详细描述将更好地理解本发明的描述,其中相同的附图标记用户指示所附描述中相同的部分。

图1示出主机正向客户机传送视频流。

图2示出由逐帧管线架构进行的处理的时间线。

图3示出其中视频帧在增量部分中被处理的时间线。

图4示出可如何将帧缓冲器、编码器和发射机/复用器(Tx/mux)配置成并发地处理各帧的各部分。

图5示出从主机向客户机传送的经编码的视频帧的序列。

图6示出当P帧变得不可用于解码时,可如何恢复视频流。

图7示出用于在经编码的视频数据不可用时执行帧内刷新的过程。

图8示出可能甚至在视频帧被完全接收之前,可如何将客户端图形管线配置成并发处理帧的各处理部分。

图9示出具有基于软件的多线程解码器的客户机。

图10示出了计算设备的示例。

许多附带特征将随着参考下面的详细描述并结合附图进行解释。

详细描述

图1示出主机100正向客户机102传送视频流。主机100和客户机102可以是任何类型的计算设备。应用104正在主机100上执行。应用104可以是生成视频数据并且可能生成音频数据的任何代码。应用104将一般不以内核模式执行,但这是可能的。应用104具有按视频流(2D帧图像序列)的形式生成图形数据的逻辑。例如,应用104可具有与3D图形引擎对接以执行被渲染为各2D图像的3D动画的逻辑。应用104可改为是加窗应用、用户界面、或输出视频流的任何其他应用。

应用104由中央处理单元(CPU)和/或图形处理单元(GPU)执行(其可能组合工作)以生成各个体视频帧。这些原始视频帧(例如,RGB数据)被写到帧缓冲器106中。尽管实际上帧缓冲器106可以是多个缓冲器(例如,前置缓冲器和后置缓冲器),但为了讨论,帧缓冲器106代表任何类型的缓冲器布置,包括单重缓冲器、三重缓冲器等。如将描述的,帧缓冲器106、编码器108和发射机/复用器(Tx/mux)108通过各种形式的同步一起工作以将由应用104生成的视频数据流传送到客户机102。

编码器108可以是被配置成实现以压缩视频数据为主要目的的视频编码算法(例如,H.264的变型或其他)的任何类型的硬件和/或软件编码器或混合编码器。通常,将使用帧间和帧内编码的组合。

Tx/mux 108可以是将经编码的视频数据和音频数据组合在容器(优选为支持流传送的类型的容器)中的硬件和/或软件的任何组合。以下是合适格式的示例:AVI(音频视频交织)、FLV(Flash视频)、MKV(Matroska)、MPEG-2传输流、MP4等。Tx/mux 108可交织视频和音频数据,并附上诸如时间戳、PTS/DTS持续时间、或关于流的其他信息(诸如类型或分辨率)之类的元数据。经容器化的(经格式化的)媒体流随后由主机100的各通信组件传送。例如,网络栈可将媒体流的各组块放置在网络/传输分组中,该网络/传输分组进而可被放入物理上通过通信接口111来传送的链路/媒体帧中。在一个实施例中,通信接口111是任何类型的无线接口。如将参考图2来解释的,在先前的设备中,图1中概括表示的管线的类型将在逐帧的基础上操作。也就是说,各帧是在相应的离散周期期间作为离散单元来处理的。虽然图1中的设备具有与这样的在先设备的相似性,但它们还以本文中将描述的方式不同于在先设备。

图2示出由逐帧管线架构进行的处理的时间线。使用在先图形生成设备,对应于显示器刷新率的刷新信号驱动图形管线。例如,对于60Hz的刷新率而言,vsync(垂直同步)信号每16ms的刷新周期112(112A-112D指代各个体周期)被生成一次。每一刷新周期112从vsync信号开始,并开始由以下中的每一者进行的并行处理的新增量:(i)捕捉到帧缓冲器106的捕捉硬件,(ii)编码器108,以及(iii)Tx/mux 110。在图2中,假定新视频流正例如响应于用户输入开始。如将解释的,对应于图2的示例的图形管线在相应的视频流可开始向客户机102传送之前需要两个刷新周期112。

在第一刷新周期112A在用户输入之后开始时,图形管线的每一组件为空或空闲。在第一刷新周期112A期间,帧缓冲器106填充有第一原始视频数据帧(F1)。在第二刷新周期112B期间,编码器108开始编码帧F1(形成经编码的帧E1),而同时帧缓冲器106开始填充有第二帧(F2),且Tx/mux 110保持空闲。在第三刷新周期112C期间,这些组件中的每一者均为忙:Tx/mux 110开始处理经编码的帧E1(经编码的F1,形成容器帧M1),编码器108对帧F2进行编码(形成第二经编码的帧E2),且帧缓冲器106填充有第三帧(F3)。第四刷新周期112D和后续周期以这种方式继续,直到帧缓冲器106为空。这假定编码器花了16ms来对帧进行编码。然而,如果编码器能够更快编码,则该编码器一结束,Tx/mux就可开始。归因于功率考虑,编码器可通常被运行,使得它可在1vsync时段中编码一个帧。

显然,被配置成如图2所示的那样操作的设备在(例如,通过用户输入或其他触发事件)发起视频生成和传送该视频之间具有大致2个刷新周期的固有等待时间。对于诸如交互式游戏之类的一些应用,使图形管线准备好的等待时间可能是能注意到的,并且用户的体验可能不理想。如将参考图1、3和4解释的,该等待时间可通过将主机100配置为以逐片的方式处理帧来显著地降低,在该方式中,相同帧的各部分在管线的不同阶段被并行地处理。

图3示出其中视频帧在增量部分中被处理的时间线。在图3的示例中,每一帧具有4个部分(N=4)。然而,考虑到较大值的N可减少等待时间,但视频保真度和/或编码率可归因于较小的部分被编码而受到影响,因此对于N可使用大于2的任何数字。图3中的帧将用与如图2中相似的标记来引用,但添加了子索引号。例如,第一未经编码的帧F1具有将被称为F1-1、F1-2、F1-3和F1-4的四个部分。类似地,第一经编码帧例如具有部分E1-1到E1-4,并且第一Tx/mux帧具有容器部分M1-1到M1-4。

图1示出未经编码的帧部分120正从帧缓冲器106传递到编码器108。图1还示出经编码的帧部分122正从编码器108传递到Tx/mux 110。图1进一步示出容器部分被Tx/mux 110输出以通过主机100的通信设施(例如,网络栈和通信接口111)传输。帧部分120可以是图3中示出的帧部分FX-Y(例如,F1-1)中的任一者。经编码的部分122可以是经编码的部分EX-Y(例如,E2-4)中的任一者,并且容器部分124可以是容器部分MX-Y(例如,M1-3)中的任一者。

客户机102具有经由与主机100的接口111的网络连接137来通过网络135接收分组133的通信接口131。分组133的有效负载承载容器部分124(视频分组/流中的组块)。客户机102汇集分组133的有效负载以重组容器部分124。客户机102处的去复用器133对容器部分124内的媒体进行去复用以获得经编码的帧部分122(即,经编码的视频帧片),经编码的帧部分在稍后被描述。客户机102的图形管线还包括解码器135,解码器135对经编码的帧部分122进行解码并将未经编码的帧部分120输出到渲染器137,渲染器137将经解码的视频数据渲染到显示器139上。以下参考图8和9描述接收方设备的实施例和其他细节。

图4示出可能甚至在视频帧被完全生成并填充帧缓冲器106之前,可如何将帧缓冲器106、编码器108和Tx/mux 110配置成并发地处理帧的各部分。最初,如在图2中,应用104开始生成视频数据,视频数据开始填充帧缓冲器106。在步骤130,视频捕捉硬件正在监视帧缓冲器106。在步骤132,视频捕捉硬件确定帧缓冲器106包含视频数据的新的完整的部分,并且在步骤134,向编码器108发信号。

在步骤136,编码器108被阻塞(以等待)视频帧的一部分。在步骤138,编码器108接收新帧部分120可用的信号。在该示例中,第一帧部分将是帧F1-1。在步骤140,编码器108向Tx/mux 110发经编码部分122可用的信号。在该情况下,第一经编码的部分是经编码的部分E1-1(即经编码形式的帧部分F1-1)。

在步骤142,Tx/mux 110阻塞以等待数据可用的信号。在步骤144,Tx/mux 110接收经编码的部分E1-1可用的信号,复制或访问新的经编码的部分,并且进而Tx/mux 110与任何相应的音频数据复用经编码的部分E1-1。Tx/mux 110输出容器部分124(例如,M1-1)以供传输到客户机102。

应注意,前述组件并行操作。当捕捉硬件在步骤134已完成一个周期时,捕捉硬件在步骤130继续检查新的视频数据,同时编码器108对来自帧缓冲器106的输出进行操作,且同时Tx/mux 110对来自编码器108的输出进行操作。类似地,当编码器108已完成对一个帧部分进行编码时,它开始对下一个帧部分进行编码,同时当Tx/mux 110已完成一个经编码的部分时,它开始下一个经编码的部分(如果可用的话)。

如可在图3中看见的,通过将处理粒度从帧减小到帧部分,有可能降低发起视频生成和传送经适当处理的经生成的视频之间的等待时间。各管线组件之间的同步可按各种方式来完成。如上所述,每一组件可生成用于下一组件的信号。计时器可被用于确保每一组件都不会因未能在足够的时间内完成处理一部分而形成冲突。例如,如果帧被划分成四个部分,并且刷新周期为16ms,则每一组件可具有4ms的计时器。实际上,该时间将更小一个小量以允许诸如中断处理、数据传输等开销。在另一实施例中,图形管线通过vsync信号来驱动,并且每一组件具有适当地从vsync信号偏移(例如,~4ms)的中断或计时器。不同的组件可生成中断,作为用于向管线中的下一组件通知数据准备好其消费的机制。在硬件、固件或驱动程序中实现的驱动程序信号、计时器和组件间信号的任何组合都可被用于使管线组件同步。

关于可如何依据部分或片来对视频帧进行编码的细节可在别处获得;许多视频编码标准(诸如H.264标准)指定用于进行逐片编码的特征。然而,即使视频标准不具有片的概念,或者编码器被配置成使用单一片编码,各实施例也将工作。编码器可限于对运动搜索可用的视频部分。也就是说,在对E1-1进行编码时,编码器将使对运动搜索的访问仅限于E1-1部分。此外,客户机102需要被修改,以便处理从主机100接收到的视频流。客户机102接收常规的经容器化的流。客户机102处的常规解码器可识别经编码的单元(部分)并相应地进行解码。在一个实施例中,客户机102可被配置成以部分为单位进行解码,这可最低限度地减少开始显示从主机100接收到的新视频数据所需的时间。

在相关方面,可用另一方式来改善等待时间或吞吐量。大多数编码算法形成了经编码的帧之间某种形式的依赖性。例如,如很好理解的,时变信息(诸如运动)可跨各帧被检测到并被用于压缩。即使在如上所述帧是以部分为单位来进行编码的情况下,那些部分中的一些部分将具有对先前部分的依赖性。以上描述的各实施例可能最终在不同的帧或分组中传送帧的各个体部分。导致间歇性分组丢失或毁坏的有噪声的信道可造成问题,因为帧的一部分的丢失/毁坏可造成整个帧或其一部分的实际丢失。此外,在没有良好参考的情况下,下一P帧/B帧(预测帧)可能不是可解码的。为了方便起见,只要本文中使用了术语“P帧”和“P片”,这样的术语就旨在表示预测性地编码的帧/片,或双向预测的帧/片(B帧/B片)或两者。换言之,在上下文许可的情况下,“P帧”指代“P帧和/或B帧”,且“P片”指代“P片和/或B片”。接着描述用于刷新(允许解码以继续)经毁坏的经编码的视频流,而不要求传输完整的I帧(经帧内编码的帧)的技术。

图5示出从主机100向客户机102传送的经编码的视频帧的序列160。如在视频编码的领域中所公知的,帧可基于各帧(P帧164A-164C)之间的改变或仅基于一个帧(I帧162)的固有内容来编码。I帧可被解码而无需其他帧,但I帧相对于P帧和B帧而言较大。另一方面,P帧依赖于并需要其他帧以被完全解码。如图5所示,当P帧164B不可用于解码时(可能归因于传输期间的分组丢失或毁坏),下一P帧164C无法被解码。每当P帧实际上不可用于解码时,现有方法将需要新的I帧。接着描述了允许以低等待时间并以接近确定性和合理的保真度来恢复经编码的视频流的实施例。

如同样已知并且以上所讨论的,许多视频编码算法和标准包括允许逐片编码的特征。也就是说,视频帧可具有经帧内编码(可自解码的数据)的部分或片,以及经预测性地编码的部分或片。前者通常被称为I片,并且后者通常被称为P片。如图5所示,P帧可被编码为P片170的集合,并且I帧可被编码为I片172的集合。也有可能经编码的帧具有I片172和P片170的混合,其中一个帧的P片独立于先前帧的P片和/或I片。基于片的编码可有助于用帧的部分而非整个帧工作的管线,如以上所描述的。此外,经编码的数据的较小的片(诸如P片和I片)可跨无线链路或其他可能有损的介质被单独地传送,这可有助于数据重传。如果某个片不可用于进行解码,则仅该片可能需要被重传以便进行恢复。但是,在一些场合中,整个帧可能不可用于进行解码。

图6示出当P帧由于分组丢失、毁坏、乱序等变得不可用时,可如何恢复视频流。当客户机102向主机100提供帧已被毁坏或丢失的反馈时,主机100传送一起包括足够的I片的帧序列以刷新视频流。假如P帧164B已被丢弃,则用相应的I片182和P片的残余br来对第一刷新帧108A进行编码。随后用处于下一片位置的第二I片来对下一刷新帧即第二刷新帧180B进行编码。类似地,用处于下一片位置(第三片位置)的I片来对第三刷新帧180C进行编码。用处于第四和最后片位置的I片(除四个片以外的分区可被使用)来对第四刷新帧180D进行编码。

每一刷新帧的其他片被编码成P片。然而,由于仅先前刷新帧的部分可能是有效的,因此任何给定P片的编码可涉及对先前帧的空间扫描范围的限制。也就是说,针对预测性编码的扫描限于先前帧的包含有效的经编码片(无论是P片还是I片)的那些部分。在其中编码算法使用运动向量搜索来实现基于运动的编码的一个实施例中,运动向量搜索被局限于先前刷新帧的有效的区域(即,先前帧的经帧内刷新的部分)。在第二刷新帧180B的情况下,预测性编码仅限于第一刷新帧180A的I片。在第三刷新帧180C的情况下,预测性编码限于第二刷新帧180B的前两个片(P片和I片)。对于第四刷新帧180D,预测性编码对除第三刷新帧180C的最后一个片以外的全部片执行。在第四刷新帧180D之后,视频流已被刷新,以使得当前帧是一完整的有效编码帧,并且主要利用P帧的编码可继续。

尽管刷新帧序列上可使用不同模式的I片位置,但图6中描绘的交错方法可能是优选的,因为该方法提供尺寸随每一刷新帧增加的毗连的可搜索帧区域;第一刷新帧具有一片(one-slice)的可搜索区域,下一刷新帧具有两片(two-slice)的可搜索区域,并以此类推。此外,可搜索区域随经预测性地编码的片(P片)的添加而增长,并且因此在任何给定的帧内刷新帧中是用最小数量的帧内编码数据来编码的。

图7示出用于在经编码的视频数据不可用时执行帧内刷新的过程。在步骤200,主机100首先传送P帧,每一P帧依赖于先前的帧以解码。在步骤202,客户机102接收P帧,并使用先前的P帧对其进行解码。在接收P帧时,客户机102检测P帧的问题(例如,丢失、毁坏、乱序等)。可在网络层、在编码层、在解码层或这些的任何组合处检测丢失的经编码数据。响应于丢失的P帧,在步骤204,客户机102向主机100传送指示哪个帧不能由客户机102来解码的消息。在步骤206,主机开始发送帧内刷新帧。可使用一循环来在每一帧之后将要被帧内编码的片(被编码为I片)增量式地向下移位。在步骤208,对当前帧内刷新帧进行编码。对于第i个刷新帧,第i个片被编码为I片。第i个片之上的片(如果有的话)被预测性地编码为P片。此外,在对任何P片进行编码时,对那些P片的预测性扫描(具体为,对运动向量的搜索)在范围上限于先前帧的经刷新的部分(I片以及其之上的任何P片)。在第i个刷新帧已被编码之后,该帧在步骤210被传送,并且迭代变量i被递增,直到具有N个(例如四个)有效片的刷新帧(诸如图6中示出的第四个刷新帧180D)已被传送。

随着刷新帧被传送,在步骤212,客户机接收这些刷新帧,并按顺序对其进行解码,直到完全有效的帧已被重构,这时,客户机102在步骤202继续接收并首先解码常规的P帧。

在一些实现中,对逐帧对准的片的使用可形成辉纹伪像;接缝线可出现在片边界处。该效应可用若干技术来降低。帧内刷新片的随机化的高频振动可被用于平滑。换言之,取代使用I片,编码器可将不同块作为图片中的帧内块来进行编码。这些块的空间位置可被随机化以提供更好的体验。为了详述高频振动技术,想法是取代在传输错误等之际连续对I宏块进行编码,而是使I宏块散布在相关片上。这可有助于避免使经解码的图像表现为从上到下填充。相反,通过高频振动,将表现为整个帧正得到刷新。对于查看者而言,这可看上去好像图像被更快地恢复。

为了优化性能,可使用主机100和客户机102之间的信道的条件来通知帧内刷新编码过程。可将帧内刷新编码的参数的目标设为适当地拟合信道或考虑信道上的条件,诸如噪声、分组丢失等。例如,可根据估计的可用信道带宽来设定I片的经压缩的尺寸的目标。片QP(量化参数)和MB(宏块)增量可被自适应地调整以满足估计目标。

图8示出了可能甚至在视频帧被完全接收之前,可如何将帧缓冲器去复用器133、解码器135和渲染器137配置成并发处理帧的各处理部分。一旦发射方主机102已开始传送分组133,客户机102就开始接收这些分组133。客户机的网络栈聚集这些分组,提取容器部分124并将其传递给在步骤230被阻塞的去复用器133。作为响应,在步骤232,去复用器133接通,接收传入的容器部分,并去复用该容器部分以产生经编码的帧部分122。在步骤236,解码器135被阻塞,同时等待要处理的帧部分。在步骤238,解码器接通以接收经编码的帧部分,并且在步骤238对该经编码的帧部分进行解码,并向渲染器137提供经解码的视频片120。渲染器积累经解码的视频片,并据此显示帧。

至于发射方主机100的图形管线,客户机102的图形管线的各组件并行操作。在任何时间,帧的视频数据的各部分可在不同的阶段被并发地处理。

发射方主机100可被预期将视频流传送到各种异构客户机中的任一者。那些客户机的硬件和软件配置可驱动如何接收、处理和渲染视频的细节。例如,如接下来所讨论的,硬件加速可能可用或可能不可用,并且多线程处理可能可用或可能不可用。

在一个实施例中,客户机仅具有基于软件(CPU)的单线程解码器。在该情况下,客户机能够一次解码一个片。虽然片是以串行方式来解码的,但取决于所使用的编码方案,有可能不按顺序对片进行解码。也就是说,如果经编码的片不按顺序到达客户机(例如,帧的第二片首先到达),解码器还可对片进行解码。

图9示出具有基于软件的多线程解码器135的客户机。客户机135(可能不按顺序)接收经编码的帧部分122。每当新的经编码的帧部分被接收时,解码器就开始新的线程260。假定经编码的帧部分之间不存在依赖性,每一线程对其帧部分进行解码并将经解码的片传递给渲染器137。

在另一客户机实施例中,软件(CPU)和硬件(GPU)的组合执行解码。解码的部分由CPU执行,这可以是单线程或多线程的。并且,解码的一部分(诸如运动补偿或阻塞)可由在GPU上执行的着色器并行完成。该方法可要求CPU和GPU之间的同步以允许它们协作。解码的一部分可以按随机次序发生以降低等待时间,但另一其他部分必须用CPU和GPU之间的同步点序列化。

在又一实施例中,图形管线可主要用硬件实现,并且可能CPU提供帧边界的通知。该实施例类似于基于CPU的多线程实施例。增加的性能可使得全部的客户机侧等待时间相比于客户机去复用、解码和渲染的能力更依赖于网络条件。

图10示出了计算设备300的示例。一个或多个这样的计算设备可配置以实现以上描述的实施例。计算设备300包括存储硬件302、处理硬件304、联网硬件306(例如,网络接口、蜂窝联网硬件等)。处理硬件304可以是通用处理器、图形处理器和/或其他类型的处理器。存储硬件可以是各种形式中的一者或多者,诸如光学存储(例如,紧致盘只读存储器(CD-ROM))、磁性介质、闪速只读存储器(ROM)、易失性存储器、非易失性存储器或按处理硬件304可容易消费的方式存储数字信息的其他硬件。计算设备300还可具有显示器308以及一个或多个输入设备(未示出)以供用户与计算设备300进行交互。

以上描述的实施例可由存储硬件302中的信息实现,该信息采用机器可执行指令(例如,已编译的可执行二进制码)、源代码、字节码、或者可用于使能或配置处理硬件以执行以上描述的各实施例的任何其他信息的形式。以上提供的细节将足以使本发明的实现者写出与各实施例相对应的源代码,该源代码可被编译/解释和执行。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1