云游戏软件的更新方法、装置、存储介质和云游戏系统
技术领域
本申请涉及云游戏领域,尤其是一种云游戏软件的更新方法、装置、存储介质和云游戏系统。
背景技术
云游戏是云计算技术中一个重要的分支,在近年来受到了各大云服务商的重视。云游戏也称作游戏点播,用户可以通过自己的终端来游玩安装在云端的游戏。由于云游戏的运行、计算和画面渲染主要集中在云端,因此对用户终端的硬件要求较低,其只要求用户接入比较流畅的互联网即可。云端通过与终端建立通信,向终端发送正在运行的云游戏的音频和视频,并接收终端针对云游戏的操作指令,以此来实现游戏的交互控制和画面播放。
云服务商为了向用户提供更多的云游戏,会将不同的游戏开发商的游戏安装在云端以向用户提供云游戏服务,因此云游戏软件的版本更新存在不确定性。鉴于游戏的特殊性,游戏开发商为了保证全服玩家的游戏版本相同,云游戏软件一旦发布新版本,所有的云游戏软件都需要经过更新才能正常使用。如果分配到终端的云游戏软件需要进行更新后才能使用,这将会占用用户大量的时间,造成不良的用户体验。
在现有技术中,为了处理该问题,云服务商在收到游戏开发商的更新通告后,从游戏开发商处获取软件更新包,然后通过人工进行批量更新操作。
但是该方法需要人工操作,在更新时间不确定的情况下,人工更新存在遗漏或者更新不及时的问题。
发明内容
为解决上述技术问题的至少之一,本申请提供了一种云游戏软件的更新方法、装置、存储介质和云游戏系统,可以及时发现并自动完成软件的版本更新。
根据本申请的第一方面,提供了一种云游戏软件的更新方法,所述云游戏软件在服务器中运行,所述服务器用于向终端传输所述云游戏软件的视频流,以及接收终端针对所述云游戏软件的操作指令,所述方法包括以下步骤:
根据预设的指令集对所述云游戏软件进行预加载;
在预加载的过程中,检测所述云游戏软件视频流中的更新提示画面;
识别所述更新提示画面中的更新按钮的位置;
根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集;
根据预设的所述指令集对所述云游戏软件进行预加载,以使所述云游戏软件完成更新。
根据本申请的第二方面,提供了一种云游戏软件的更新装置,所述云游戏软件在服务器中运行,所述服务器用于向终端传输所述云游戏软件的视频流,以及接收终端针对所述云游戏软件的操作指令,所述装置包括:
预加载单元,用于根据预设的指令集对所述云游戏软件进行预加载;
更新提示画面检测单元,用于在预加载的过程中,检测所述云游戏软件视频流中的更新提示画面;
按钮识别单元,用于识别所述更新提示画面中的更新按钮的位置;
指令生成单元,用于根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集;
更新单元,用于根据预设的所述指令集对所述云游戏软件进行预加载,以使所述云游戏软件完成更新。
根据本申请的第三方面,提供了一种云游戏软件的更新装置,包括存储器、处理器和程序;
所述程序存储在存储器中,所述程序被处理器执行时实现所述的云游戏软件的方法。
根据本申请的第四方面,提供了一种存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现所述云游戏软件的更新方法。
根据本申请的第五方面,提供了一种云游戏系统,包括:
第一服务器,用于运行云游戏软件,以及向终端传输所述云游戏软件的视频流,以及接收所述终端针对所述云游戏软件的操作指令;
第二服务器,用于调用所述第一服务器,使所述第一服务器根据预设的指令集对所述云游戏软件进行预加载;接收所述第一服务器在预加载过程中从所述云游戏软件的视频流中获取的画面帧,从所述画面帧中检测更新提示画面;并识别所述更新提示画面中的更新按钮的位置;根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集;再次调用所述第一服务器,使所述第一服务器根据所述指令集进行预加载,以使所述云游戏软件完成更新。
本申请实施例的有益效果是:通过在预加载过程中检测云游戏软件的视频流中出现的更新提示画面来及时发现软件版本更新,然后从所述更新提示画面中检测更新按钮的位置,并生成用于点击所述更新按钮的指令,将指令保存在指令集中,接着再根据指令集对软件进行预加载,以此来完成云游戏软件的更新,相对于现有技术,本申请可以自动地发现并完成云游戏软件的更新。
附图说明
图1为根据本申请实施例提供的一种云游戏的实现架构图;
图2为根据本申请实施例提供的一种云游戏软件的更新方法的流程图;
图3为根据本申请实施例提供的一种云游戏系统的架构图;
图4a为根据本申请实施例提供的一种云游戏软件的更新提示画面的示意图;
图4b为根据本申请实施例提供的另一种云游戏软件的更新提示画面的示意图;
图5为根据本申请实施例提供的另一种云游戏系统的架构图;
图6为根据本申请实施例提供的另一种云游戏系统的架构图;
图7为根据本申请实施例提供的一种主剧本的代码截图;
图8a为根据本申请实施例提供的一种游戏开始的画面的示意图;
图8b为根据本申请实施例提供的一种游戏登录的画面的示意图;
图9为根据本申请实施例提供的一种更新处理剧本的代码截图;
图10为根据本申请实施例提供的一种软件和剧本之间的关系示意图;
图11为图2中步骤220的子步骤流程图;
图12为图11中步骤1120的子步骤流程图;
图13为图2中步骤230的子步骤流程图;
图14为图13中步骤1320的子步骤流程图;
图15为根据本申请实施例提供的另一种云游戏软件的更新方法的流程图;
图16a、图16b、图16c和图16d为游戏“某某王者”的画面截图;
图17为根据本申请实施例提供的一种云游戏软件的更新过程的示意图;
图18为根据本申请实施例提供的一种OSS服务器的后台界面的截图;
图19为根据本申请实施例提供的另一种OSS服务器的后台界面的截图;
图20为根据本申请实施例提供的一种云游戏软件的更新装置的模块框图;
图21为根据本申请实施例提供的一种安卓板卡的模块框图;
图22为根据本申请实施例提供的一种服务器的模块框图。
具体实施方式
下面结合说明书附图和具体的实施例对本申请进行进一步的说明。所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
下面对本申请实施例出现的名词进行解释:
云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。作为云计算的基础能力提供商,会建立云计算资源池平台(简称云平台,一般称为IaaS(Infrastructrue as a Service,基础设施即服务),在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(例如虚拟化机器,包含操作系统)、存储设备、网络设备。
云游戏(Cloud gaming)又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏场景下,云游戏软件并不在玩家游戏终端运行,而是在云端服务器中运行。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取玩家输入指令并发送给云端服务器的能力即可。云游戏可以通过如图1所示的架构实现,在图1中的架构示出云游戏服务器和游戏客户端之间的关系,其中,用户选择的云游戏在云游戏服务器中运行。云游戏服务器通过音视频获取器获取云游戏软件的音视频流,然后经由音视频编码器编码,再通过实时流传输协议(RealTime Streaming Protocol RTSP)等互联网通信协议将经过编码的音视频流发送至游戏客户端。游戏客户端收到经过编码的音视频流后,通过音视频解码器对音视频流进行解码,再由音视频播放器播放游戏的画面和声音,那么用户就可以在终端看到游戏画面以及听到游戏的声音。游戏客户端监听用户的输入指令(包括来自鼠标、键盘和触摸屏等输入设备的输入指令),会根据用户输入的指令进行事件编码,然后经过自定义通信协议,将编码后的输入事件发送到云游戏服务器。云游戏服务器在接收到这些经过编码的输入事件后,将其进行解码,然后再重现用户的输入。
预加载:为了让玩家启动云游戏即可试玩指定场景下的游戏,那么,在玩家玩云游戏之前,图像识别程序会预先自动控制游戏登录,且通过模拟点击,让游戏进入到指定场景,这个预先加载到游戏指定场景的阶段为预加载。
OSS(Object Storage Service):一种云游戏管理系统,用于维护云游戏数据,处理云游戏所有配置、参数相关的逻辑。本申请将部署有OSS的服务器称作OSS服务器。
剧本,又称作脚本,一种软件自动控制的描述性语言,其可以看作是由多个具有逻辑关系的指令组成的指令集,剧本中通常包括图像匹配、点击、滑屏等指令。剧本被执行时,对软件模拟剧本所描述的操作。
主剧本:云游戏预加载时的入口剧本,一个云游戏可以拥有多个主剧本,不同的主剧本包含不同的逻辑,可以加载到不同的场景。
异常处理剧本:当主剧本无法正常执行完毕,发生异常时,被调用来处理异常画面的剧本。
异常子剧本:异常处理剧本中处理某个异常的剧本,多个异常子剧本集合则为异常处理剧本,比如:更新处理剧本就是异常子剧本。
静图,即静态画面,是指:云游戏预加载过程中,软件一直停留的一个画面。比如:云游戏的更新画面就是一个静图。可见,静态画面是一种根据主剧本无法处理的画面,是一种异常的画面。
云游戏服务器,是指用于向用户终端提供云游戏服务的设备,其可以是诸如服务器或者安卓板卡等硬件设备,也可以是由硬件设备通过资源划分的方式虚拟出来的虚拟设备,即虚拟机。
在本申请的应用场景中,云服务商为了满足自身的运营需求和使得用户获得更好的用户体验,向用户提供云游戏服务之前,会对将要提供给用户的云游戏服务器上的云游戏软件进行预加载,使得云游戏软件加载至特定的场景。当用户从自己的终端看到云游戏软件的画面时,已经是特定的场景,那么用户可以直接玩游戏。例如,在云游戏试玩的场景中,对云游戏软件进行预加载,使得云游戏软件加载至战斗场景,用户在自己的终端看到游戏画面时,已经处于该战斗场景,用户可以直接在终端进行操作,直接试玩该游戏。
然而,游戏开发商所提供的云游戏软件随时可能发布新的版本,通常云游戏软件如果不处于最新版本是无法使用的,这一点在游戏领域特别普遍。为了尽量避免将需要进行软件更新的云游戏服务器分配给用户,本申请通过在预加载过程中检测云游戏软件的视频流中出现的更新提示画面来及时发现版本更新,然后从所述更新提示画面中检测更新按钮的位置,并生成用于点击所述更新按钮的指令,将指令保存在指令集中,接着再根据指令集对软件进行预加载,以此来完成云游戏软件的更新。
具体地,参照图2,图2公开了一种云游戏软件的更新方法,本方法可应用于如图3所示的云游戏系统中,包括服务器310和多个云游戏服务器320,服务器310用于对多个云游戏服务器320进行管理和调度等,并用于连接用户终端330和云游戏服务器320。需要说明的是,服务器310可以是一个独立的服务器,也可以是由多个功能不同的服务器组成的。
当一个云游戏服务器320被分配给用户终端330时,服务器310会将用户终端330上传的操作指令传递到云游戏服务器320中,云游戏服务器320会根据这些操作指令作相应的处理。同时,云游戏服务器320的游戏画面会经过服务器310传输给用户终端330,那么用户就可以在用户终端330上操作实际在云游戏服务器320上运行的云游戏软件。在本实施例中,云游戏服务器320上均安装有若干个云游戏软件。为了让用户获得比较好的用户体验,云游戏服务器320分配给用户终端330之前,会对云游戏服务器320上的云游戏软件提前进行预加载。例如,服务器310预计有50个用户会玩某一个云游戏,可以预先对50个云游戏服务器320中的这一款云游戏进行预加载。当用户终端330发起请求指定游玩这款云游戏的时候,服务器310直接将已经完成预加载的云游戏服务器320分配给该用户终端330,用户可以在终端直接看到预加载完成后的游戏画面,并在这基础上直接玩游戏。
为了避免将未经过更新的云游戏服务器320分配给用户,本实施例需要及时发现云游戏服务器320中的云游戏软件版本更新和及时完成软件的更新工作,如图2所示,本实施例的方法包括步骤210~250。
步骤210、根据预设的指令集对所述云游戏软件进行预加载。
具体地,在本实施例中预设的指令集是指剧本集合,其中剧本集合中包括主剧本和异常处理剧本,当然,在其他实施例中,指令集也可以是一个程序文件或者其他由多个指令构成的文件。在本实施例中,由服务器310发送预加载指令,使得云游戏服务器320按照预先录制好的主剧本对云游戏软件进行预加载,目标是使云游戏软件加载至该主剧本所指定的场景。服务器310发送预加载指令的行为可以是正常的运营行为,也可以是测试行为。例如,在运营场景中,按照运营的需求,预估未来会有50人玩某个云游戏,先准备50个云游戏服务器对该云游戏软件进行预加载,以便于满足用户的需求。或者在测试场景中,按照测试的需求,在每个测试周期抽取50个云游戏服务器进行测试,测试的过程就是实现预加载,测试云游戏服务器是否能够完成预加载。
其中,主剧本可以存储在服务器310上,也可以存储在云游戏服务器320之中,每个云游戏软件可以对应有多个主剧本,以用于将软件预加载至不同的场景。服务器310所发送的预加载指令,用于指定云游戏服务器320进行预加载的云游戏软件,以及预加载时执行的主剧本。
此外,在云游戏服务器320中配置有图像识别程序,该图像识别程序用于执行主剧本以执行预加载,具体地,图像识别程序用于根据主剧本的执行逻辑,执行主剧本中的指令,直到特定指令被成功执行后退出,或者在执行异常的情况下退出。
在主剧本中包括多个种类相同或者不同的指令,这些指令可以是图像识别指令,也可以是操作指令,这些指令通过一些逻辑关系语句连接在一起构成主剧本。其中,图像识别指令,用于匹配软件的视频流中的画面帧是否与该指令指向的样图相匹配。主剧本中的操作指令包括点击指令和滑动指令等等,操作指令用于对软件进行操作。预加载的过程就是图像识别程序执行主剧本中的指令的过程,即根据主剧本中的指令识别特定的画面,然后针对该画面实施相应的操作的一个过程。
步骤220、在预加载的过程中,检测所述云游戏软件视频流中的更新提示画面。
具体地,本步骤的目的在于,检测出在预加载过程中,出现在云游戏软件的视频流中的更新提示画面。其中,视频流是指云游戏软件输出的画面流,所述视频流由多个连续的图像帧构成。更新提示画面是指包括可以触发软件更新的按钮并且带有更新提示信息的画面,如图4a和图4b所示,画面400a和画面400b均为常见的更新提示画面,在这两个更新提示画面中,都包含触发更新的按钮和提示更新的文字信息。在画面400a中,触发更新的按钮表现为更新按钮410a,提示更新的文字信息表现为文案420a。在画面400b中,触发更新的按钮表现为确定按钮410b,提示更新的文字信息表现为文案420b。
为了检测更新提示画面,首先需要在云游戏软件的预加载过程中从其视频流中获取画面帧,进而检测获得的画面帧是否为更新提示画面。
在本实施例中,由云游戏服务器320从云游戏软件的视频流中直接获取画面帧,然后发送给服务器310来进一步检测画面帧是否为更新提示画面。
其中,云游戏服务器320可以通过以下几种方式来从云游戏软件的视频流中获取画面帧:
1)云游戏服务器320按照设定的周期从云游戏软件的视频流中获取画面帧,例如每三秒获取一个画面帧,然后将获取的画面帧发送给服务器310。
2)云游戏服务器320从云游戏软件的视频流中检测静态画面(即持续一段时间不发生变化的画面帧),将这些画面帧发送给服务器310。明显,通过先从云游戏软件的视频流中检测静态画面,再从静态画面中确定更新提示画面可以减少图像识别的次数,降低服务器310的运算压力。
接着,在接收到云游戏服务器320所发送的画面帧之后,服务器310从这些画面帧中检测出更新提示画面。服务器310可以采用图像识别技术来识别这些画面帧中的特征,从而确定一个画面帧是否为更新提示画面。例如,通过OCR(Optical CharacterRecognition,光学字符识别)技术从更新提示画面中识别文字信息,然后根据文字信息判断该画面是否一个更新提示画面。由于在预加载过程中,可能会有多个云游戏服务器320上报多个画面帧,当服务器接收到多个画面帧的时候,为了减少识别的次数,可以先通过聚类服务,将画面帧进行分类,然后从若干类画面帧中各抽取一张进行图像识别,从而确定出更新提示画面。
需要说明的是,在另一些实施例中,服务器310也可以主动从云游戏服务器320中截取云游戏软件的视频流中的画面帧。同理,在一些实施例中,检测更新提示画面的步骤,也可以由云游戏服务器320执行,云游戏服务器320在检测到更新提示画面后,再上报给服务器310,以用作生成处理更新提示画面的指令。
步骤230、识别所述更新提示画面中的更新按钮的位置。
具体地,本步骤的目的在于检测出更新提示画面中更新按钮的位置,从而可以生成对更新提示画面进行操作的指令。在本实施例中,服务器310可以通过以下两种方式检测更新按钮的位置,第一种方式是根据步骤220中识别文字信息,将文字信息中包含的第二预设关键词在更新提示画面中的位置作为更新按钮的位置。第二种方式是采用经过训练的图像识别模型来直接识别更新按钮,从而得到更新按钮的位置。
步骤240、根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集。
具体地,在本实施例中,指令集包括主剧本和异常处理剧本,异常处理剧本中包括多个异常子剧本,其中,主剧本为进行预加载的剧本,而异常处理剧本中的异常子剧本则用于处理主剧本无法处理的画面,例如,处理更新提示画面。在本步骤中,服务器310在确定更新按钮在更新提示画面的位置后,可以以按钮的中心坐标作为点击位置,生成用于点击该坐标的指令,并基于这个用于点击更新按钮的指令,生成更新处理剧本,然后将更新处理剧本作为异常处理剧本的子剧本合并到异常处理剧本中。在合并时,会将更新提示画面作为更新处理剧本的样图,将两者关联起来。
步骤250、根据预设的所述指令集对所述云游戏软件进行预加载,以使所述云游戏软件完成更新。
具体地,在本步骤中,指令集包括主剧本和异常处理剧本,也就是说,经过步骤240,指令集中已经包含更新处理剧本。在本步骤中,服务器310向至少一个云游戏服务器320发送更新指令,使得至少一个云游戏服务器320中的图像识别程序,按照更新指令指定的主剧本对云游戏软件进行预加载。其中,在本实施例中,服务器310发送更新指令的对象为所有安装有云游戏软件的云游戏服务器320。根据一般云游戏软件的版本更新规律,通常一个新的版本的发布,全部云游戏软件都需要更新。因此,可以通过向所有安装有云游戏软件的云游戏服务器320发送更新指令来实现批量更新。当然,在另一些实施例中,服务器310可以只向检测到更新提示画面的云游戏软件所在的云游戏服务器320发送更新指令,单独更新该云游戏服务器320中的云游戏软件。
跟前面的预加载过程一样,云游戏服务器320中的图像识别程序会按照更新指令所指定的主剧本进行加载,当云游戏软件还没更新的时候,主剧本执行到某个指令的时候,因为遇到更新提示画面,主剧本由于是预先录制的,没有识别更新提示画面的指令,因此主剧本无法继续执行下去,从而产生执行异常。在本实施例中,主剧本执行异常是指主剧本中的指令执行超时或者执行失败次数大于预设值。例如,在主剧本中设置指令或者剧本整体的最大的执行时间,如果超过该时间,指令或者剧本还不能顺利执行完毕的情况下,则产生异常。也可以在主剧本中设置指令的最大执行次数,剧本中的指令如果在一次执行没有成功的情况下,会再次执行,直到执行次数超过最大次数为止。
在主剧本执行异常的情况下,图像识别程序会从异常处理剧本中寻找对应的异常子剧本进行处理,由于更新处理剧本有样图,因此图像识别程序可以根据当前云游戏软件的视频流中的画面帧匹配到更新处理剧本,从而可以执行更新处理剧本来对云游戏软件进行版本更新。
当然,除了以这种方式来执行更新处理剧本以外,还可以有其他方式。在一些实施例中,可以先由服务器310向云游戏服务器320发送更新指令,其中,更新指令中包含主剧本的信息和更新处理剧本的信息,云游戏服务器320的图像识别程序先按照更新指令中指定的主剧本进行预加载,然后在执行主剧本达到一个设定时间后,直接执行更新指令所指定的更新处理剧本。在该实施例中,只要云游戏软件需要更新,并且执行主剧本的时间足够长,那么云游戏软件在预加载过程中,通常会停留在更新提示画面中,因此这时候只要执行更新处理剧本即可对更新提示画面进行处理,以达到更新云游戏软件的目的。
再有一些实施例,图像识别程序在执行主剧本异常时,可以逐个执行异常处理剧本中异常子剧本,只要更新处理剧本在异常处理剧本的集合中,那么一般情况下会执行到异常处理剧本来处理云游戏软件的更新提示画面,从而完成版本更新。可见,执行步骤240中生成的指令来点击更新按钮并不一定依赖于指令集中用于识别更新提示画面的指令。
根据上面的实施例的记载,应当理解的是,即便在产生更新处理剧本后,不马上对所有的云游戏软件进行主动的更新,所有的云游戏软件在后续的运营或者自动测试的预加载过程中,均会自动完成更新,无需人工介入,同时可以最大限度地保障了云游戏服务器被分配到用户手上前云游戏软件及时得到了更新。
参照图5,本实施例所提供的云游戏系统也可以实现如图2所示的云游戏软件更新方法。本实施例的云游戏系统实际上是将图3中的服务器的功能进行进一步的划分,将其划分为OSS服务器510和后台服务器520。
如图5所示,本实施例的云游戏系统由OSS服务器510、后台服务器520和云游戏服务器530构成,其中,云游戏服务器530中包括多个安卓服务器531,这些安卓服务器531以安卓板卡的形式安装在云游戏服务器530中。需要说明的是,本实施例中采用的安卓服务器也可以替换成windows服务器、IOS服务器或者搭载其他操作系统的服务器。在本实施例中,这些集成在游戏服务器530中的安卓服务器531将被分配给用户,以提供云游戏服务。在本实施例的机构中,云游戏软件在安卓服务器531中运行,安卓服务器531在本架构中的作用与图3中架构的云游戏服务器相同。
在本实施例中,后台服务器520用于分配安卓服务器531或者调用安卓服务器531中的图像识别程序。后台服务器520根据用户终端540的请求,向用户终端540分配一个安卓服务器531以提供云服务。同时,后台服务器520还用于连接用户终端540和分配给用户终端540的安卓服务器531,具体地,后台服务器520接收分配给该用户终端540的安卓服务器531的视频流,将安卓服务器531的视频流进行编码后发送到对应的用户终端540,用户终端540对经过编码的视频流进行解码,从而得到安卓服务器531的画面。用户基于看到的游戏画面,可以在用户终端540中对游戏进行操作。后台服务器520接收用户终端540上传的操作指令,并将接收到的操作指令传递给分配给该用户终端540的安卓服务器531。用户可以通过用户终端540和安卓服务器531上运行的游戏进行交互。其中,后台服务器520向用户终端540分配的安卓服务器531为已经针对某个游戏完成预加载的服务器。
云游戏服务器530,用于为安卓服务器531提供网络和电源等硬件服务。
安卓服务器531,用于向用户终端540提供云服务,具体是为用户终端540提供游戏的存储和运行环境。同时,安卓服务器531上配置有图像识别程序,可以用于进行图像识别和执行剧本,以达到预加载或者更新软件的目的。图像识别程序的功能具体包括静图检测和对软件的模拟操作。
OSS服务器510用于触发预加载、从安卓服务器531上报的画面帧中确定更新提示画面、根据更新提示画面生成更新处理剧本、存储剧本和下发更新指令等。
本实施例可以通过图5中的云游戏系统实现图1中的云游戏软件的更新方法。
具体地,在本实施例中,步骤210具体为:OSS服务器510下发预加载指令到后台服务器520,其中预加载指令中包含预加载的数量、游戏编号和主剧本编号等,后台服务器520根据游戏编号查找到安装有该游戏的安卓服务器531,并根据预加载的数量,拉起多个安卓服务器531中的图像识别程序来对游戏进行预加载。
步骤220具体为:在游戏的预加载过程中,按照预加载指令所指定的主剧本由对游戏进行预加载的安卓服务器531从游戏的视频流中检测静态画面,并将静态画面发送给OSS服务器510。OSS服务器510通过聚类服务对得到的静态画面进行分类,并从每个分类中抽取一个画面帧来进行图像识别,以确定出更新提示画面。其中,在本实施例中,静态画面是指超过预设时间没有发生变化的画面帧。
步骤230具体为:OSS服务器510从更新提示画面中识别更新按钮的位置。具体地,OSS服务器510通过识别更新提示画面中的关键词来确定更新按钮的位置。这些关键词可以是“确定”、“更新”、“马上更新”或者“体验新版本”等词。
步骤240具体为:OSS服务器510以更新按钮的中心坐标作为点击位置,生成用于点击更新按钮的指令,进而生成一个更新处理剧本。随后,OSS服务器510将更新处理剧本合并到异常处理剧本中。
步骤250具体为:OSS服务器510向后台服务器520发送批量更新指令,使得后台服务器520拉起全部安装有该云游戏的安卓服务器531中的图像识别程序,执行更新指令所指定的主剧本,并利用图像识别程序在执行主剧本过程中遇到异常会调用异常处理剧本的机制,使得安卓服务器531在遇到更新提示画面时,执行更新处理剧本来完成对云游戏软件的更新。
参照图6,图6提供了一种云游戏系统,该云游戏系统由云游戏服务器610构成,云游戏服务器610利用自身的资源,虚拟出多个虚拟服务器611,这些虚拟服务器611中安装有若干个云游戏软件,用以向用户终端620提供云服务。在本实施例中,同样可以利用图6所示的云游戏系统来实现如图2所示的云游戏软件的更新方法。具体地,由云游戏服务器610调用虚拟服务器611中的图像识别程序来执行主剧本,以对软件进行预加载。虚拟服务器611中的图像识别程序在执行预加载的过程中,检测软件的视频流中的静态画面。云游戏服务器610在获取这些静态画面后,从中确定出更新提示画面,接着检测更新提示画面中的更新按钮的位置,继而生成用于点击更新按钮的指令。接着根据该指令生成更新处理剧本,并将更新处理剧本合并到异常处理剧本中。然后云游戏服务器610拉起全部安装有该软件的虚拟服务器611的图像识别程序来执行主剧本,并利用图像识别程序在主剧本执行异常时会执行异常处理剧本的机制,使得图像识别程序在遇到更新提示画面时,由于执行异常,从异常处理剧本中匹配到更新处理剧本来执行,从而完成软件的更新。
从上述的实施例可知,图2中的方法可以由各种不同结构的云游戏系统所执行,本申请通过在预加载过程中检测云游戏软件的视频流中出现的更新提示画面来及时发现软件版本更新,然后从所述更新提示画面中检测更新按钮的位置,并生成用于点击所述更新按钮的指令,将指令保存在指令集中,接着再根据指令集对软件进行预加载,以此来完成云游戏软件的更新,相对于现有技术,本申请无需人工接入操作,可以自动地发现并完成云游戏软件的更新。
本实施例结合表1,对剧本(包括主剧本、异常处理剧本、异常子剧本)进行更详细的说明。表1为构成剧本的节点的功能和配置说明,本申请中的所有剧本均由表1中的若干种节点构成。
表1、节点的功能和配置说明
图7示出本实施例中的一种主剧本的代码截图700。该主剧本用于将游戏的画面加载到登录且点击游戏开始后的界面,从图7中可以看出,该剧本包括若干个match节点、true节点、guard节点和watch节点。
从第一个match节点的语句可以看出,该match节点是用于匹配游戏开始按钮的,如图8a所示,该match节点用于在画面800a中匹配如按钮810这样的游戏开始按钮,从第一个match节点的语句中可以看出,该语句给出了ROI(region of interest即感兴趣区域)的位置、按钮810的样图、相关的延迟和最大执行次数等。当匹配到按钮810后,执行点击按钮的指令,具体为模拟点击按钮810所在的位置。在游戏默认登录的情况下,预加载便完成了。
但是如果游戏在非默认登录的情况下,在出现画面800a之前,会出现如图8b所示的登录界面800b,由于登录界面800b的可能存在,在本实施例通过在主剧本中设置一个guard节点来执行登录操作,根据表1中对guard节点的定义,当第一个match节点无法执行时,会跳转到guard节点。从图7中可以看出,该guard节点下还设置有一个watch节点,用于匹配登录按钮820,在匹配到登录按钮820时,点击登录按钮,并执行相关的登录操作,例如,调用第三方账号登录等,从而完成登录进入游戏。
由于主剧本是人工预先制作的,针对不同的画面跳转逻辑,可以设计不同的语句来执行。图9示出了一种异常子剧本的代码截图900,具体地,该异常子剧本是根据更新提示画面生成的。从图9可知,该剧本由一个guard节点和该guard节点下的两个watch节点构成。其中,第一watch节点用于匹配更新提示画面,并且在检测到更新提示画面的情况下,进入游戏更新模式,点击游戏更新按钮,例如以图4a的更新提示画面为例,该指令用于点击触发更新的按钮410a。第二个guard节点用于匹配更新完毕画面,如果匹配到更新完毕的画面后,退出游戏更新模式。其中,设置进入游戏更新模式和退出游戏更新模式的指令目的在于,将处于更新状态的安卓服务器挂起,避免分配给用户。具体地,是安卓服务器调用负责分配安卓服务器的服务器来将本安卓服务器配置为更新状态,从而避免将更新过程中的安卓服务器分配给用户,导致更新中断。
图10示出了云游戏软件1010、主剧本1020、异常处理剧本1030和异常子剧本1031的关系。从图10可以看出,一款云游戏软件1010可以设置多个主剧本1020和一个异常处理剧本1030,其中,异常处理剧本1030下包含多个异常子剧本1031,这些异常子剧本1031中就包括更新处理剧本。在图5中的云游戏系统,在OSS服务器510中,设置有称之为剧本中心的数据库,该剧本中心用于集中管理剧本,当安卓服务器531需要执行某个剧本时,可以从剧本中心中进行查找和读取。
在剧本中心中,除了包括若干个软件的主剧本和异常处理剧本以外,还配置了与剧本相关的索引,该索引包括编号索引和样图索引。例如,对于主剧本而言,OSS服务器510通过参数传递的方式使得安卓服务器531执行某个主剧本,这时候就是通过传递主剧本的编号,使得安卓服务器531的图像识别程序根据编号查找到相关的主剧本。而对于异常处理剧本中的异常子剧本而言,图像识别程序是在主剧本执行异常的情况下从异常处理剧本中查找相关的异常子剧本,此时图像识别程序只能获取当前的静态画面,如果需要匹配到正确的异常子剧本,则需要通过样图索引,故此,对于异常处理剧本而言,其下属的每个异常子剧本都关联有样图。例如,更新处理剧本所关联的样图就是更新提示画面。由于异常子剧本是自动生成,异常子剧本的数量有不可预料性,因此将全部的异常子剧本合并成异常处理剧本,可以减少代码的复杂性。以当前的执行机制,图像识别程序只要在执行主剧本的过程中产生异常,即可以从异常处理剧本中匹配到相关的异常子剧本来处理。
参照图11,本实施例将对图2中的步骤220进行更详细的说明,在本实施例中,采用如图5所示的云游戏系统,步骤220具体包括:
步骤1110、安卓服务器531的图像识别程序从所述云游戏软件的视频流中检测静态画面,并上报给OSS服务器510;
步骤1120、OSS服务器510接收所述静态画面,并从所述静态画面中确定更新提示画面。
其中,在一些实施例中,所述静态画面是指在预加载的过程中超过预设时间不发生变化的画面帧。在预加载过程中超过预设时间不发生变化的画面帧有两种,一种是主剧本中没有对应的处理指令可以处理的正常画面帧,例如更新提示画面,另一种是程序崩溃导致卡死的画面。这些画面对于预加载过程而言都属于异常画面。
其中,在步骤1110中,安卓服务器531的图像识别程序,在执行主剧本过程中如果检测到主剧本执行异常,会截取当前云游戏软件的视频流中的画面帧作为静态画面。其中,执行异常是指主剧本中的一些指令执行超时或者执行失败次数大于预设值,致使主剧本无法顺利地执行完毕。因此,实际上,静态画面也可以理解为主剧本无法处理的一个异常画面,或者是理解为主剧本无法识别的一个画面,因此静态画面也是一个检测结果。而更新提示画面的出现,在时间上具有不确定性,同时,软件每次的更新提示画面可能因为版本不同而不同,也难以预料。因此,更新提示画面是一种典型的静态画面。故此,可以通过检测静态画面来检测更新提示画面。通过这样的方法得到的静态画面,数量较少,可以减轻OSS服务器510的识别压力。
当然在步骤1110中,确定静态画面还可以采用以下方式:按照预设间隔获取所述云游戏软件的视频流中的至少两个画面帧;确定获取时间上相邻的两个所述画面帧的相似度;将相似度大于预设值的两个所述画面帧中的一个作为静态画面。通过这种方式检测静态画面,可以无需等待主剧本的执行异常出现,可以更快地检测到静态画面。
本实施例将对如何从静态画面或者画面帧中确定出更新提示画面进行更详细的说明。更新提示画面如图4a和图4b所示,更新提示画面中存在两个明显的特征,第一个特征是触发更新的按钮,如按钮410a和按钮410b。第二个特征是提示更新的文字信息,如文案420a和文案420b。故此,可以利用图像识别技术对更新提示画面中的这些特征进行识别,以此判断画面帧是否为更新提示画面。
以步骤1120为例,参照图12,该步骤具体包括:
步骤1210、对所述静态画面进行文字识别,得到所述静态画面中的文字。
步骤1220、所述静态画面中的文字,确定更新提示画面。
具体地,在步骤1210中可以通过OCR(Optical Character Recognition,光学字符识别)技术对画面帧进行文字识别,然后在步骤1220中,根据从画面帧中提取到的文字信息,判定该画面帧是否为更新提示画面。具体的判断方式可以是检测从画面帧中提取到的文字信息中是否包含第一预设关键词,如果从画面帧中提取的文字信息包含预设的关键词,则可以判定这个画面帧为更新提示画面。其中,这里的第一预设关键词可以有多个,例如,这些第一预设关键词可以是:“更新”、“马上更新”、“确定更新”、“新版本”和“体验新版本”等等。可以根据词语在更新画面中出现的概率来选择作为第一预设关键词的词语。通过关键词检测来判断画面帧是否为更新提示画面,其计算量小,并且相对准确。
在另一些实施例中,根据从画面帧中提取的文字信息判断画面帧是否为更新提示画面的步骤,还可以利用经过训练的语义分类模型来实现。在该实施例中,可以建立一个语义分类模型,例如BERT模型、Elmo模型或者GPT模型等自然语言处理模型,然后利用标注好的文本对语义分类模型进行训练,其中,标注好的数据包括输入文本和该输入文本是否为更新提示信息的标注信息。经过训练后,向语义分类模型中输入一个文本,语义分类模型可以输出该文本为更新提示信息的概率,从而确定画面帧是否为更新提示画面。故此,本实施例可以通过语义分类模型对所述文字进行分类,将分类结果为更新类别的文字对应的静态画面确定为更新提示画面。结合语义分类模型来判断画面帧是否为更新提示画面,其具有更好的准确度。
当然,通过文字识别可以准确地判断出一个画面是否为更新提示画面,但是在部分实施例中,为了削减步骤,也可以直接用经过标注的画面帧,对一个图像分类模型直接进行训练,从而训练出一个可以判断一个画面帧是否为更新提示画面的图像分类模型。然后利用该图像分类模型,直接对画面帧进行判断。向图像分类模型输入一个画面帧,该图像分类模型会输出该画面为更新提示画面的概率,当一个画面帧为更新提示画面的概率大于阈值,则可以判定该画面帧为更新提示画面。
参照图13,本实施例针对步骤230进行更加详细的说明,在本实施例中,步骤230包括:
步骤1310、在所述更新提示画面中检测第二预设关键词和所述第二预设关键词的位置;
步骤1320、将检测到的所述第二预设关键词在更新提示画面中的位置作为更新按钮的位置。
在本实施例中,第二预设关键词可以是“马上更新”、“更新”、“确定”和“体验新版本”等经常出现在触发更新的按钮上的关键词。由于从更新提示画面中提取的文字信息中可能包含多个第二预设关键词,为此,可以将文字信息中包含的所有的第二预设关键词在更新提示画面中的位置都作为更新按钮的位置,即假定更新提示按钮就处于这些可能的位置之中。
在步骤240中,会根据检测到的更新按钮在更新提示画面中的位置,生成用于点击所述更新按钮的指令,继而生成更新处理剧本,并将更新处理剧本合并在异常处理剧本中。在本实施例中,如果检测到可能为更新按钮的位置有多个,则可以生成多个点击指令,依次点击这些位置。在本步骤中生成的更新处理剧本中至少包含点击更新按钮的位置的指令。当然,为了增加更新的成功率和衔接其他处理流程,更新处理剧本通常会包括多个指令,如图9示例的更新处理剧本,该剧本还包括匹配更新提示画面的指令、进入更新模式的指令、点击更新按钮的位置的指令、匹配更新完毕的画面的指令以及退出更新模式的指令。其中,需要说明的是,在生成更新处理剧本时,通常会将游戏开始的第一个要点击的画面作为更新完毕的画面,因为通常软件在更新完毕后,会再次重新回到开始的画面,故此,通过检测该画面可以判断更新是否完毕。当然,在更新过程中不排除出现特殊情况,例如,图像识别程序故障或者更新完毕后软件的开始的画面与之前完全不同,图像识别程序无法正常判断是否已经更新完毕,因此,可以为更新处理剧本设置最大的执行时间,例如1小时。这样可以避免安卓服务器在执行更新处理剧本的过程中一直处于更新状态而被锁死。
在前面的讨论实施例中,如果检测到有多个第二预设关键词,会判断为有多个位置可能是更新按钮所在的位置,所以会生成多个点击指令来逐一点击这些位置。本实施例为了避免多次点击画面可能带来的不利影响,对多个可能为更新按钮的位置进行进一步的确定,以准确判断出更新按钮的位置。
如图4a和图4b所示,更新按钮往往具备这几个特征,第一是更新按钮中的关键词字体大小相较于其他文字要更大,第二是更新按钮通常会有外边缘,即更新按钮通常由一个外边框和外边框中的关键词构成,第三是更新按钮中的关键词通常是独立于其他文字的,即更新按钮中的关键词与其他文字的距离比较远。
因此,在从所述更新提示画面检测到的所述第二预设关键词的数量为多个的情况下,参照图14,步骤1320具体包括:
步骤1410、从多个检测到的所述第二预设关键词中确定目标关键词;
步骤1420、将所述目标关键词在更新提示画面中的位置作为更新按钮的位置。
其中,步骤1410,包括:
检测各所述第二预设关键词的字体大小,将字体最大的关键词作为目标关键词。本实施例认为字体更大的第二预设关键词所在的位置,更有可能是更新按钮所在的位置。
或者,
检测更新提示画面中的连通域,将处于连通域内的关键词作为目标关键词。通常更新按钮会有一个外边框,因此通过将更新提示画面进行二值化分割后,可以识别出若干个连通域来检测这些按钮的外边框,而这些连通域内如果存在第二预设关键词,则说明该连通域是一个更新按钮的外边框的概率非常大。当然,由于更新按钮形状和大小一般会有规律,因此还能通过检测连通域的形状和大小来排除不可能为更新按钮外边框的连通域。
或者,
检测各第二预设关键词和与其最接近的一个文字之间的距离,将和与其最接近的一个文字之间的距离最远的第二预设关键词作为目标关键词。简而言之,本实施例计算各个第二预设关键词和其他文字之间的距离,选取和其他文字距离最远的第二预设关键词作为目标关键词。距离的计算方式可以是,计算第二预设关键词的中心点到最接近的文字的中心点之间的距离。
参照图15,本实施例提供了一种在图5中的云游戏系统中实现的安卓服务器的软件更新方法,其中,在本实施例中安卓服务器是指安卓服务器531。
在本实施例中,云游戏系统包括OSS服务器510、后台服务器520、集成在云游戏服务器530中的多个安卓服务器531。
参照图16a、图16b、图16c和图16d,本实施例结合一款云游戏的画面进行说明,本实施例的方法包括以下步骤:
步骤1501、OSS服务器510向后台服务器520发送预加载指令,使后台服务器520调用安卓服务器531的图像识别程序,以某个主剧本对“某某王者”进行预加载。“某某王者”的视频流中会依次出现图16a中的登录画面1600a、图16b中的开始画面1600b和图16c中的游戏画面1600c。具体地,图像识别程序根据主剧本识别登录画面1600a,然后点击登录按钮1610a,游戏的画面跳转至游戏开始画面1600b,接着图像识别程序在识别到游戏开始画面1600b后,点击游戏开始按钮,并结束预加载。此时,“某某王者”被预加载至游戏画面1600c,即可以马上进行游戏的画面。
步骤1502、后台服务器520拉起部分安卓服务器531的图像识别程序,并传递参数使其按照主剧本对“某某王者”进行预加载。但是如果当“某某王者”需要更新,那么在该云游戏软件的视频流中出现的第一个画面是图16d所示的更新提示画面1600d。
步骤1503、安卓服务器531的图像识别程序在执行主剧本进行预加载的过程中,由于“某某王者”的视频流中出现了更新提示画面,安卓服务器531的图像识别程序检测到该静态画面,即检测到更新提示画面1600d作为静态画面。
步骤1504、安卓服务器531将静态画面上传至OSS服务器510。
步骤1505、OSS服务器510从接收到的多个静态画面中确定出更新提示画面。具体地,OSS服务器510收集一段时间的静态画面后,利用聚类服务对静态画面进行分类,随后从每个分类之中抽取一个样图进行图像识别,从而确定出更新提示画面。当然,这里所有静态画面都是指同一个游戏的视频流中产生的静态画面。例如,更新提示画面1600d在这步骤就会被OSS服务器510确定为更新提示画面。
步骤1506、OSS服务器510根据获得的更新提示画面1600d生成更新处理剧本,并将该更新处理剧本作为异常处理剧本中的一个子剧本,将其合并到异常处理剧本之中,其中,该更新处理剧本中包含用于识别更新提示画面1600d的指令和点击更新按钮1610d的指令。
步骤1507、紧接在步骤1504后,安卓服务器531的图像识别程序在执行主剧本异常的情况下,基于静态画面从异常处理剧本中匹配相关的异常子剧本,尝试处理该静态画面。但是由于更新提示画面1600d是第一次出现的画面,在此之前没有生成过相关的异常子剧本,因此安卓服务器531因为剧本执行超时而退出预加载。
步骤1508、OSS服务器510在步骤1506后,向后台服务器520下发批量更新指令,该指令指向所有安装有“某某王者”的安卓服务器531,该指令用于使安卓服务器531批量执行主剧本对“某某王者”进行预加载。
步骤1509、后台服务器520拉起所有安装有“某某王者”的安卓服务器531的图像识别程序,并传递参数使其按照主剧本对“某某王者”进行预加载。
步骤1510、各安卓服务器531的图像识别程序均在执行预加载,由于“某某王者”的新版本已经发布了,而且这些安卓服务器531上的“某某王者”均没有经过更新,因此,所有的安卓服务器531上的图像识别程序都检测到更新提示画面1600d这一静态画面。
步骤1511、各安卓服务器531均上报更新提示画面1600d这一静态画面至OSS服务器510。
步骤1512、OSS服务器510对这些静态画面进行识别,检测到该更新提示画面已经生成过更新处理剧本了,因此不再生成相同的剧本,也不再触发批量更新。当然,本步骤也可以采取另外一种方式,即在批量更新指令下发时,携带一个特定的参数,例如任务类型,而在安卓服务器531上报静态画面时携带该参数,OSS服务器510就可以知道已经生成过更新处理剧本了。
步骤1513、紧接于步骤1511,安卓服务器531根据静态画面从异常处理剧本中匹配到更新处理剧本对更新提示画面1600d进行处理,从而进入更新状态。
步骤1514、安卓服务器531的图像识别程序在执行更新处理剧本时,调用后台服务器520将自身的状态标记为更新状态,以避免后台服务器520将处于更新状态的安卓服务器531分配给用户。
步骤1515、安卓服务器531的图像识别程序在执行完更新处理剧本后,继续执行主剧本剩余的部分或者重新执行主剧本以完成预加载。
步骤1516、安卓服务器531的图像识别程序在执行完更新处理剧本后,调用后台服务器将更新完的安卓服务器标记为可分配的状态。当然,在一些实施例中,更新状态也可以由后台服务器420根据设定的时间来自动解除。
步骤1517、后台服务器520将已经完成预加载的安卓服务器531分配给用户。
参照图17,图17示出了另一种安卓服务器的软件更新方法,本实施例着重突出各安卓服务器从检测到更新提示画面到执行更新的过程,安卓服务器1~n均安装有某个待更新的云游戏软件。首先,安卓服务器1的图像识别程序在执行第一剧本对云游戏软件进行预加载,在此时出现执行异常,图像识别程序截取云游戏软件的视频流中的画面帧作为静态画面上报到OSS服务器。OSS服务器从静态画面中确定出更新提示画面,接着根据更新提示画面生成更新处理剧本,然后下发批量更新指令,使得安卓服务器1~n的图像识别程序均被拉起,执行第一剧本对第一游戏进行预加载,由于各安卓服务器上的云游戏软件都需要更新,因此各图像识别程序在执行第一剧本时,均会出现执行异常。随后,各图像识别程序会在异常处理剧本中寻找与出现执行异常时的静态画面相匹配的异常子剧本。由于OSS服务器已经根据该更新提示画面生成过更新处理剧本,因此,各图像识别程序可以匹配到更新处理剧本,并且顺利完成更新。在本实施例中,为了防止图像识别程序故障出错,设置更新处理剧本的最大执行时间为两小时,一旦超过两小时未执行完毕,则自动退出。
本实施例对OSS服务器的管理功能进行说明,结合图10可知,在OSS服务器的剧本中心之中,对每个软件都存放有各自的剧本集,其中一个软件可以对应有多个主剧本,这些主剧本用于将软件加载到特定的场景。每一个软件都包括一个异常处理剧本,该异常处理剧本下存放有多个异常子剧本,更新处理剧本是其中一种异常子剧本。对于主剧本而言,通常是人工录制或者编写,而异常子剧本既可以由系统自动生成,也可以由人工录制或者编写。
图18示出了一种OSS服务器的后台界面,从界面1800可以看出,该界面1800主要由三个部分的功能组件所构成,包括查询栏1810、剧本操作组件1820和信息显示区域1830。其中,从图18中可以看出,查询栏1810可以通过至少四个字段进行查询,这四个字段包括剧本ID、游戏名称、剧本类型和剧本的创建人。在本实施例中,用户可以输入这四个字段中的至少一个,然后点击查询按钮来触发查询。然后查询的结果会在信息显示区域1830中显示,从信息显示区域1830所显示的游戏1的信息可知,在数据库中一个剧本所关联的数据包括剧本ID、剧本名称、剧本功能、样图、合并状态和其创建者。
除此之外,本实施例中的界面1800中还包含剧本操作组件1820,该操作组件包括上传剧本和录制剧本两个按钮,该组件可以用于录制剧本和上传用户已经制作好的剧本。这些由用户录制或者上传的剧本会根据类型、对应的游戏等信息,存放到OSS服务器的数据库之中。
参照图19,在触发批量更新以后,用户可以通过界面1900对批量更新的情况进行查询,同样在界面1900中包括查询组件1910和信息显示区域1920,从信息查询组件1910可以看出,该组件包括四个查询字段,四个查询字段分别为:日期、设备ID、更新是否成功和更新批次。同样,用户可以通过输入这四个查询字段中的一个来进行查询。查询的结果会在信息显示区域1920中显示,从信息显示区域1920中可以看出,在数据库中,一条更新记录,包括更新任务ID、游戏名称、更新批次、更新的设备ID、更新的结果、耗时和更新开始的时间。也就是说,用户可以在后台查询任意设备的任一次更新的情况。
因此,对于OSS服务器而言,其中还包括存放更新记录的数据库,该数据库可以通过关键词进行索引查询,并将索引查询的结果以可视化的方式呈现给用户。
参照图20、本实施例提供了一种云游戏的更新装置,所述云游戏软件在服务器中运行,所述服务器用于向终端传输所述云游戏软件的视频流,以及接收终端针对所述云游戏软件的操作指令,所述装置包括:
预加载单元2010,用于根据预设的指令集对所述云游戏软件进行预加载;
更新提示画面检测单元2020,用于在预加载的过程中,检测所述云游戏软件视频流中的更新提示画面;
按钮识别单元2030,用于识别所述更新提示画面中的更新按钮的位置;
指令生成单元2040,用于根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集;
更新单元2050,用于根据预设的所述指令集对所述云游戏软件进行预加载,以使所述云游戏软件完成更新。
本实施例提供了一种存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现所述的云游戏更新方法。
本实施例提供了一种云游戏系统,该系统包括:
第一服务器,用于运行云游戏软件,以及向终端传输所述云游戏软件的视频流,以及接收所述终端针对所述云游戏软件的操作指令;
第二服务器,用于调用所述第一服务器,使所述第一服务器根据预设的指令集对所述云游戏软件进行预加载;接收所述第一服务器在预加载过程中从所述云游戏软件的视频流中获取的画面帧,从所述画面帧中检测更新提示画面;并识别所述更新提示画面中的更新按钮的位置;根据所述更新按钮的位置生成用于点击所述更新按钮的指令,并将所述指令保存至所述指令集;再次调用所述第一服务器,使所述第一服务器根据所述指令集进行预加载,以使所述云游戏软件完成更新。
需要理解的是,在本申请中所述云计算设备可以是虚拟机、独立的物理服务器或者是一个硬件板卡。
而本申请中出现的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。用户终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。用户终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
图21示出一种安卓板卡(即安卓服务器)的部分结构的框图,参考图21,安卓板卡包括:通信电路2110、存储器2120、处理器2180、以及电源2190等部件。本领域技术人员可以理解,图21中示出的安卓板卡结构并不构成对安卓板卡的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图21对安卓板卡的各个构成部件进行具体的介绍:
通信电路2110可用于为安卓板卡提供基础通信服务,根据接口的不同,该通信电路2110可以是LAN(local area network)接口电路或者串行通信接口电路等。
存储器2120可用于存储软件程序以及模块,处理器2180通过运行存储在存储器2120的软件程序以及模块,从而执行安卓板卡的各种功能应用以及数据处理。存储器2120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、画面播放功能等)等;存储数据区可存储根据安卓板卡的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器2120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器2180是安卓板卡的控制中心,利用各种接口和线路连接整个安卓板卡的各个部分,通过运行或执行存储在存储器2120内的软件程序和/或模块,以及调用存储在存储器2120内的数据,执行安卓板卡的各种功能和处理数据,从而对安卓板卡进行整体监控。可选的,处理器2180可包括一个或多个处理单元;优选的,处理器2180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理通信信息。可以理解的是,上述调制解调处理器也可以不集成到处理器2180中。
处理器2180还用于接收来自于用户终端的操作指令,根据操作指令作出相应的操作,以及将视频和音频数据进行编码后通过通信电路2110发送出去,使得用户终端可以接收到音频和视频。
安卓板卡还包括给各个部件供电的电源2190。
本申请实施例中的云计算设备、OSS服务器和后台服务器等也可以是普通的服务器,请参见图22所示,图22为本申请实施例提供的服务器2200的结构图,服务器2200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(CentralProcessing Units,简称CPU)2222(例如,一个或一个以上处理器)和存储器2232,一个或一个以上存储应用程序2242或数据2244的存储介质2230(例如一个或一个以上海量存储装置)。其中,存储器2232和存储介质2230可以是短暂存储或持久存储。存储在存储介质2230的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器2222可以设置为与存储介质2230通信,在服务器2200上执行存储介质2230中的一系列指令操作。
服务器2200还可以包括一个或一个以上电源2226,一个或一个以上有线或无线网络接口2250,一个或一个以上输入输出接口2258,和/或,一个或一个以上操作系统2241,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或装置不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或装置固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
对于上述方法实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。
以上是对本申请的较佳实施进行了具体说明,但本申请并不限于所述实施例,熟悉本领域的技术人员在不违背本申请精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。