一种游戏录像回放方法及系统
技术领域
本发明涉及游戏领域,特别是一种游戏录像回放方法及系统。
背景技术
随着计算机软件技术的发展,虚拟游戏系统逐渐完善,单机游戏、手机游戏或网页游戏等等游戏都发展迅速。虚拟游戏作为一个虚拟世界,玩家可以在其中体验各种游戏环境,而且目前游戏系统均可以进行录像回放,从而重现战斗场景,让玩家重温战斗时的感觉。现有技术中,进行游戏回放的技术是通过抓取游戏的界面后,存储成avi格式文件,回放时获取并播放avi格式文件。但是这种技术获得的录像文件的体积比较大,需要耗费较大的计算资源,而且不便于进行分享与传播。
发明内容
为了解决上述的技术问题,本发明的目的是提供一种游戏录像回放方法,本发明的另一目的是提供一种游戏录像回放系统。
本发明解决其技术问题所采用的技术方案是:
一种游戏录像回放方法,包括:
S1、响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;
S2、响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
S3、获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。
进一步,所述步骤S1,包括:
S11、响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
S12、针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
S13、按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;
S14、判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行步骤S12。
进一步,所述步骤S13中,所述预设的指令对象格式包括指令头和指令序列化数据,所述步骤S13,其具体为:
按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中。
进一步,所述录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子以及文件总长度。
进一步,所述步骤S3,包括:
S31、获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
S32、根据游戏基本信息加载游戏场景并初始化相关游戏数据;
S33、按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
S34、针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
S35、判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行步骤S33。
本发明解决其技术问题所采用的另一技术方案是:
一种游戏录像回放系统,包括:
游戏录像模块,用于响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;
请求模块,用于响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
录像回放模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。
进一步,所述游戏录像模块,包括:
第一子模块,用于响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
第二子模块,用于针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
第三子模块,用于按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;
第四子模块,用于判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行第二子模块。
进一步,所述第三子模块中,所述预设的指令对象格式包括指令头和指令序列化数据,所述第三子模块具体用于:
按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中。
进一步,所述录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子以及文件总长度。
进一步,所述录像回放模块,包括:
第五子模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
第六子模块,用于根据游戏基本信息加载游戏场景并初始化相关游戏数据;
第七子模块,用于按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
第八子模块,用于针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
第九子模块,用于判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行第七子模块。
本发明的有益效果是:本发明的一种游戏录像回放方法,通过在游戏系统的游戏战斗操作时,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器,从而在接收到录像回放请求时,获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。本方法通过存储录像相关的指令数据并根据指令数据进行录像回放,体积小,耗费资源少,流程简单,便于实施,可以真实准确地进行游戏战斗的录像回放,而且便于进行分享与传播。
本发明的另一有益效果是:一种游戏录像回放系统,包括:游戏录像模块,用于响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;请求模块,用于响应于用户输入的请求录像回放的指令,向服务器发送回放请求;录像回放模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。本系统通过存储录像相关的指令数据并根据指令数据进行录像回放,体积小,耗费资源少,流程简单,便于实施,可以真实准确地进行游戏战斗的录像回放,而且便于进行分享与传播。
附图说明
下面结合附图和实施例对本发明作进一步说明。
图1是本发明的一种游戏录像回放方法的流程图;
图2是本发明的一种游戏录像回放方法的实施例一中的步骤S1的流程示意图;
图3是本发明的一种游戏录像回放方法中的预设的指令对象格式的数据结构示意图;
图4是本发明的一种游戏录像回放方法中的录像文件的数据结构示意图;
图5是本发明的一种游戏录像回放方法中的录像文件的数据结构图;
图6是本发明的一种游戏录像回放方法的实施例一中的步骤S3的流程示意图。
具体实施方式
参照图1,本发明提供了一种游戏录像回放方法,包括:
S1、响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;
S2、响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
S3、获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。
进一步作为优选的实施方式,所述步骤S1,包括:
S11、响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
S12、针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
依次执行该帧数据的所有执行指令的具体执行顺序:先执行所有界面操作指令后,再执行处界面操作指令之外的所有执行指令,例如移动处理指令、移动处理指令、转向处理指令、连招处理指令、特殊动作处理指令和战斗结果指令等等;
S13、按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;
S14、判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行步骤S12。
进一步作为优选的实施方式,所述步骤S13中,参照图3,所述预设的指令对象格式包括指令头和指令序列化数据,所述步骤S13,其具体为:
按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中。
进一步作为优选的实施方式,参照图4和图5,所述录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子以及文件总长度。
进一步作为优选的实施方式,所述步骤S3,包括:
S31、获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
S32、根据游戏基本信息加载游戏场景并初始化相关游戏数据;
S33、按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
S34、针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
S35、判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行步骤S33。
本发明还提供了一种游戏录像回放系统,包括:
游戏录像模块,用于响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;
请求模块,用于响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
录像回放模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。
进一步作为优选的实施方式,所述游戏录像模块,包括:
第一子模块,用于响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
第二子模块,用于针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
第三子模块,用于按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;
第四子模块,用于判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行第二子模块。
进一步作为优选的实施方式,所述第三子模块中,所述预设的指令对象格式包括指令头和指令序列化数据,所述第三子模块具体用于:
按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中。
进一步作为优选的实施方式,所述录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子以及文件总长度。
进一步作为优选的实施方式,所述录像回放模块,包括:
第五子模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
第六子模块,用于根据游戏基本信息加载游戏场景并初始化相关游戏数据;
第七子模块,用于按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
第八子模块,用于针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
第九子模块,用于判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行第七子模块。
以下结合具体实施例对本发明做详细说明。
实施例一
一种游戏录像回放方法,包括:
S1、响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;参照图2,步骤S1包括S11~S14:
S11、响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
S12、针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
依次执行该帧数据的所有执行指令的具体执行顺序:先执行所有界面操作指令后,再按时间顺序执行处界面操作指令之外的所有执行指令,例如移动处理指令、移动处理指令、转向处理指令、连招处理指令、特殊动作处理指令和战斗结果指令等等;
S13、按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;所述预设的指令对象格式包括指令头和指令序列化数据;
因为指令的执行顺序是先执行界面操作指令再执行其它指令,因此,这里写入到录像文件流的每一逻辑帧数据所对应的指令信息中,界面操作指令信息是排在前面的,后续录像回放时也是先执行界面操作指令。
本实施例中,执行指令具有相同的数据结构,包括指令的ID、创建该指令的帧数、指令处理的帧数、处理的角色ID。执行具体的指令指令时,根据具体数据结构进行对应处理即可。
参照图3,所述预设的指令对象格式包括指令头和指令序列化数据,步骤S13,其具体为:按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中;
指令头的数据结构包括角色ID、逻辑帧的帧数、执行命令的ID定义、随机种子等。采用KCOMMANDHEAD表示指令头,以下是对指令头进行定义的一段代码实例:
public struct KCOMMANDHEAD
{
public uint uHandlerId; //怪物或玩家的id,即角色ID
public uint uFrame; //逻辑帧的帧数
public int nCommandId; //指令的ID定义,如:1为移动指令,2为技能指令
public uint uRandomSeed; //随机种子
}
通过序列化将指令头转化为指令序列化数据,是指将指令头所包含的对象转化成bytes格式的内存数据进行保存。
S14、判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行步骤S12。
判断游戏战斗是否结束的具体方式有多种,结合目前游戏中常见的结束战斗方式进行判断即可。例如,目前游戏战斗结束主要有以下几种方式:
1、计时。一场战斗,根据游戏怪物和玩家场景的情况,计算战斗时间,例如设定战斗时间为6分钟,则计时6分钟后,玩家没打完就算输。因此,到达计时时间6分钟后,判断游戏战斗结束。
2、若检测到玩家放弃战斗或主动退出战斗,判断游戏战斗结束。
3、若检测到玩家被杀死,视为挑战失败,判断游戏战斗结束。
4、若检测到玩家杀光了场景的所有激活了的游戏怪物,并杀死了boss,判断游戏战斗结束。
出现以上4种情况,则判断游戏战斗结束,处理战斗结果,停止录像。
参照图4和图5,录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子、文件总长度以及其它还原游戏需要的基本信息等,图5所示的录像文件的录像帧数据1包括指令信息1、指令信息2、指令信息3和指令信息4。
S2、响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
S3、获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放,参照图6,步骤S3包括S31~S35:
S31、获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
S32、根据游戏基本信息加载游戏场景并初始化相关游戏数据;
S33、按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
根据前面生成录像文件的指令信息的顺序,这里,每一逻辑帧数据中,先添加到播放命令队列中的指令为界面操作指令,然后才按顺序添加界面操作指令之外的其它操作指令。
S34、针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
依序执行其播放命令队列中的每个执行指令的具体执行顺序,如前所述的播放命令队列中执行指令的添加顺序,这里先执行所有界面操作指令后,再执行处界面操作指令之外的所有执行指令,例如移动处理指令、移动处理指令、转向处理指令、连招处理指令、特殊动作处理指令和战斗结果指令等等;
S35、判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行步骤S33。具体判断方式为判断是否还有逻辑帧数据未被处理,若无,则表示录像文件播放完毕,反之亦然。
实施例二
一种游戏录像回放系统,包括:
游戏录像模块,用于响应于游戏系统的游戏战斗操作,执行对应的执行指令,并将游戏基本信息、成功执行的执行指令以及对应的角色ID生成录像文件并上传到服务器;
请求模块,用于响应于用户输入的请求录像回放的指令,向服务器发送回放请求;
录像回放模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得对应的游戏基本信息、所有执行指令以及对应的角色ID,进而进行录像播放。
所述游戏录像模块,包括:
第一子模块,用于响应于游戏系统开始游戏战斗的指令,结合游戏基本信息,创建录像文件流;
第二子模块,用于针对游戏系统的每一逻辑帧数据,依次执行该帧数据的所有执行指令,并记录成功执行的每个执行指令以及对应的角色ID;
第三子模块,用于按照预设的指令对象格式,将记录的每个执行指令生成对应的指令信息,并将指令信息按其逻辑帧顺序写入到录像文件流中;参照图3,预设的指令对象格式包括指令头和指令序列化数据,第三子模块具体用于:按照预设的指令对象格式,将记录的每个执行指令生成对应的指令头,同时对指令头进行序列化后作为指令序列化数据,进而将包括指令头和指令序列化数据在内的指令信息按其逻辑帧顺序,写入到录像文件流的对应位置中;
第四子模块,用于判断游戏战斗是否结束,若是,则关闭录像文件流并将其压缩后将录像文件上传到服务器,反之,返回执行第二子模块。
参照图4和图5,录像文件包括录像头以及多帧录像帧数据,所述录像头包括游戏基本信息,每帧录像帧数据包括该帧数据对应的所有指令信息,所述游戏基本信息包括版本号、游戏模式、游戏场景、随机数种子、文件总长度以及其它还原游戏需要的基本信息等。图5所示的录像文件的录像帧数据1包括指令信息1、指令信息2、指令信息3和指令信息4。
本实施例中,录像回放模块,包括:
第五子模块,用于获取服务器返回的录像文件,并对录像文件进行解析后,获得游戏基本信息以及每一录像帧数据对应的所有指令信息;
第六子模块,用于根据游戏基本信息加载游戏场景并初始化相关游戏数据;
第七子模块,用于按照逻辑帧顺序,依次解析获得每一逻辑帧数据对应的每个指令信息所对应的角色ID和执行指令,进而将获得的执行指令加入到该角色ID对应的播放命令队列中;
第八子模块,用于针对每个角色ID对应的游戏角色,依序执行其播放命令队列中的每个执行指令;
第九子模块,用于判断录像文件是否播放完毕,若是,则结束播放,反之,返回执行第七子模块。
本实施例是与实施例一一一对应的软系统,其详细实现细节可参照实施例一的描述。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变型或替换均包含在本申请权利要求所限定的范围内。