一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据处理方法、装置、电子设备及计算机可读存储介质与流程

2021-10-09 12:42:00 来源:中国专利 TAG:数据处理 电子设备 网络媒体 视频处理 装置


1.本技术涉及网络媒体,视频处理以及播放控制技术领域,具体的,本技术涉及一种数据处理方法、装置、电子设备及计算机可读存储介质。


背景技术:

2.随着多媒体技术的发展、无线网络的普及以及人们生活水平的提高,人们的娱乐活动变得越来越丰富,游戏也已经成为了很多人生活中不可或缺的一部分。
3.对于需要在游戏中播放视频的场景,通常需要对待处理的视频进行解析,然后基于解析出的各帧图像中的每帧图像的图像数据,一帧一帧图像的图像数据进行渲染,由于解析视频得到每一帧图像的图像数据的过程比较耗时,会拖慢游戏性能,如何提升游戏性能,一直是本领域的重要任务之一。


技术实现要素:

4.本技术实施例的目的旨在提供一种能够提升游戏性能的数据处理方法、装置、电子设备及计算机可读存储介质。
5.一方面,本技术实施例提供了一种数据处理方法,该方法包括:
6.获取待播放视频,上述待播放视频是在目标游戏运行过程中播放的视频;
7.创建并启动第一线程,通过第一线程对待播放视频进行解析,得到待播放视频中各帧图像的图像数据;
8.对于待播放视频中的每帧图像,通过第一线程创建该帧图像对应的第一纹理,并将该帧图像的图像数据存储到第一纹理中;
9.通过第二线程创建目标纹理,并建立第一纹理与目标纹理之间的对应关系;
10.响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
11.另一方面,本技术实施例提供了一种数据处理装置,该装置包括:
12.视频获取模块,用于获取待播放视频,待播放视频是在游戏运行过程中播放的视频;
13.视频解析模块,用于创建并启动第一线程,通过第一线程对待播放视频进行解析,得到待播放视频中各帧图像的图像数据;
14.纹理创建模块,用于对于待播放视频中的每帧图像,通过第一线程创建该帧图像对应的第一纹理,并将该帧图像的图像数据存储到第一纹理中;
15.对应关系建立模块,用于通过第二线程创建目标纹理,并建立第一纹理与目标纹理之间的对应关系;
16.数据渲染模块,用于响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹
理对应的图像数据进行渲染,得到目标画面数据。
17.可选的,上述对应关系建立模块在建立第一纹理与目标纹理之间的对应关系时,具体用于:建立目标纹理对应的纹理坐标与第一纹理中相对应的纹理坐标之间的对应关系;上述数据渲染模块在由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据时,具体用于:由第三线程根据对应关系从第一纹理中读取目标纹理对应的纹理坐标对应的图像数据。
18.可选的,对于待播放视频中的每帧图像,上述纹理创建模块在通过第一线程创建该帧图像对应的第一纹理时,具体用于:由第一线程通过调用三维图形接口的纹理创建接口,在显存中创建该帧图像对应的第一纹理;上述对应关系建立模块在通过第二线程创建目标纹理时,具体用于:由第二线程通过调用外部纹理创建接口,在内存中创建目标纹理。
19.可选的,该装置还包括:数据加载模块,用于通过第二线程获取待渲染的游戏数据,并将待渲染的游戏数据加载到内存中;上述第一纹理为在显存中创建的纹理,上述第二线程和第三线程为同一线程,上述数据渲染模块在响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据时,具体用于:响应于满足待播放视频的播放时机,由第三线程将待渲染的游戏数据从内存加载到显存中,以及由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,通过第三线程对显存中的目标纹理对应的图像数据和显存中的待渲染的游戏数据进行渲染,得到目标画面数据。
20.可选的,上述第三线程包括第二线程和渲染线程,上述数据渲染模块在响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据时,具体用于:响应于满足待播放视频的播放时机,由第二线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并向渲染线程发送渲染指令,通过渲染线程基于渲染指令,对待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
21.可选的,上述数据渲染模块在由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据时,具体用于:基于各帧图像在待播放视频中的排序,由第三线程根据对应关系从第一纹理中依次读取目标纹理对应的图像数据,依次基于读取的目标纹理对应的图像数据和对应的待渲染的游戏数据进行渲染,得到目标画面数据。
22.可选的,对于待播放视频中的每帧图像,上述纹理创建模块在通过第一线程创建该帧图像对应的第一纹理时,具体用于:由第一线程基于该帧图像的图像尺寸,确定该帧图像所占存储空间的大小;根据该帧图像所占存储空间大小,通过第一线程创建该帧图像对应的第一纹理。
23.可选的,上述目标游戏为云游戏,该装置包含在由云游戏服务器内,该装置还包括:视频播放模块,用于在得到目标画面数据之后对目标画面数据进行编码,得到视频流;将视频流发送给用户终端,以使用户终端通过对视频流进行解码得到目标画面数据并播放。
24.另一方面,本技术实施例还提供了一种电子设备,该电子设备包括存储器和处理器,存储器中存储有计算机程序,处理器在运行计算机程序时执行本技术任一可选实施例中提供的数据处理方法。
25.另一方面,本技术实施例还提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,该计算机程序在被处理器运行时,处理器执行本技术任一可选实施例中提供的数据处理方法。
26.再一方面,本技术实施例还提供了一种计算机程序产品或计算机程序,当其在计算机设备上运行时,是的计算机设备执行本技术所提供的任一可选实施方法。该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术任一可选实施方式中提供的数据处理方法。
27.本技术提供的技术方案带来的有益效果是:本技术实施例所提供的方案,在获取到待播放视频时,创建并启动第一线程,通过该第一线程实现对待播放视频解析、创建第一纹理,以及将该视频中的每帧图像的图像数据存储至第一纹理的过程,通过第二线程创建目标纹理,并建立第一纹理和目标纹理之间的对应关系,目标纹理是用于存储待渲染数据的纹理,通过目标纹理可将第一纹理中的图像数据作为游戏纹理数据进行渲染,进而,在需要在目标游戏内播放视频时,即响应于满足待播放视频的播放时机,通过第三线程基于将要渲染的数据(目标纹理对应的图像数据和待渲染的游戏数据)进行渲染。在本技术方案中,由于对待播放视频的解析以及存储各帧图像的图像数据均是通过第一线程实现的,即相对比较耗时的工作都是由第一线程完成的,相对不耗时的渲染工作由第二线程和第三线程完成,由此,通过多个线程完成在目标游戏运行过程中播放视频的过程,可提升处理效率。进一步的,由于第一线程只用来处理待播放视频,不影响处理目标游戏的游戏数据的线程的处理逻辑,从而还可以提升游戏性能。
28.本技术附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本技术的实践了解到。
附图说明
29.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例描述中所需要使用的附图作简单地介绍。
30.图1为本技术实施例提供的一种数据处理方法的流程示意图;
31.图2为本技术实施例提供的一种展示界面的示意图;
32.图3为本技术实施例提供的另一种展示界面的示意图;
33.图4为本技术实施例提供的一种基于多线程的数据处理方法的流程示意图;
34.图5为本技术实施例提供的另一种基于多线程的数据处理方法的流程示意图;
35.图6为本技术实施例提供的一种数据处理系统的结构示意图;
36.图7为本技术实施例提供的一种数据处理装置的结构示意图;
37.图8为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
38.下面详细描述本技术的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本技术,而不能解释为对本发明的限制。
39.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
40.本技术是针对现有技术中所存在的视频处理效率低,拖慢游戏性能的问题,而提出的一种数据处理方法。
41.本技术实施例中提供的方案适用于任何需要在游戏中播放视频的场景,即在游戏运行过程中需要播放的视频的场景,比如,基于游戏需要播放视频的需求,预先配置在游戏运行满足某个条件(播放视频的条件)时,在游戏中播放视频。比如,预先配置游戏运行到某个指定游戏画面时播放视频a,或者,预先配置接收到用户对游戏中的指定的虚拟按钮的触发操作时播放视频b,则在游戏运行过程中,接收到做针对该指定的虚拟按钮的触发操作时,通过本技术的方案播放该视频b。
42.其中,上述游戏可以是云游戏,也可以是普通游戏(也就是需要用户终端下载安装的传统游戏)。本技术实施例中的待播放视频指的是在游戏运行过程中需要播放的视频,比如,在游戏运行过程中的一些虚拟场景中会出现视频播放的画面,待播放视频则可以是虚拟场景中要播放的视频或者该视频的部分片段,比如游戏的虚拟场景有一个可以播放视频的广告牌,待播放视频可以是该广告牌要播放的视频或其片段;再比如,在游戏运行过程中有插播的广告,待播放视频则可以是指该广告的部分或全部,即该广告的至少一帧图像。也就是说,待播放视频可以是游戏运行时所展示的虚拟场景画面内所出现的视频、也可以是在游戏运行过程中插播的不属于的游戏本身内容的视频。
43.其中,在云游戏场景下,本技术实施例提供的方法的执行主体可以是云游戏服务器(为描述方便,下文也可称为云服务器)。在普通游戏场景下,执行主体为玩游戏的用户(也可称为玩家)的用户终端。
44.针对现有技术中存在的问题,本技术提供的方案中,由第一线程(在下文中还可称为独立的线程)和第二线程(在下文中还可称为主线程)两个线程实现对待播放视频的处理,具体的,由第一线程执行对待播放视频的视频解析、创建第一纹理以及将图像数据存储至第一纹理这些相对耗时的步骤,由第三线程执行对图像数据和待渲染的游戏数据的渲染的相对不耗时的步骤,相对于现有技术中仅通过一个线程执行上述三个线程所执行的步骤的方案,提升了视频的处理效率,同时提升了游戏性能,特别是在有大量数据需要处理的情况下,可以有效提升用户在玩游戏时的游戏感知。
45.本技术实施例所提供的方案,可以是执行上述视频渲染处理的任一电子设备,可以是用户终端,也可以是服务器(如云服务器)执行,其中,服务器可以是独立的物理服务
器,也可以是多个物理服务器构成的服务器集群或者分布式系统。用户终端可以包括以下至少一项:智能手机、平板电脑、笔记本电脑、台式计算机、智能电视、智能音箱、智能手表、智能车载设备。但并不局限于此。用户终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
46.本技术实施例所涉及的数据处理方法可以基于云技术实现,如处理过程中所涉及的数据存储可以采用云存储方式,处理过程中所涉及的数据计算可以采用云计算方式。
47.云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
48.云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为iaas(infrastructure as a service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
49.可选的,本技术实施例中的用户终端和服务器可组成为一区块链,而服务器和用户终端可以分别为区块链上的节点,本技术实施例中的数据处理方法可以由区块链上的至少一个节点执行。比如在云游戏场景中,多个用户终端可以通过网络与云游戏服务器通信,游戏在云游戏服务器中运行,并由云游戏服务器将游戏场景渲染为视频流,通过网络传输给用户终端。用户终端可以无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取用户输入指令并发送给云游戏服务器的能力即可。在该场景下,参与游戏的各用户的用户终端、云游戏服务器可以分别作为区块链上的节点,节点之间可以进行数据共享,云游戏服务器可以通过区块链技术实现。
50.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
51.为了更好的理解和说明本技术所提供的数据处理的方法,下面结合具体应用场景进行说明,比如,以云游戏场景为例,待播放视频为需要在目标游戏内播放的广告视频。
52.在该场景下,本技术方案的执行主体为云服务器,主线程和独立的线程是云服务器中运行的游戏引擎对应的线程。通过云服务器完成对待播放视频的视频解码、纹理更新及渲染的工作。其中,视频解码指的是从视频中解析出图像的图像数据的过程,纹理更新指的是基于视频中的图像的图像尺寸创建第一纹理,以及将该图像的图像数据存储至该第一纹理中的过程,渲染指的是对通过第三线程(该第三线程可以是主线程)对第一纹理中的图像数据进行渲染的过程,下面结合以下具体步骤对本技术方案进行具体的描述:
53.游戏初始化步骤:玩家在玩游戏的用户终端(比如,手机)上启动手机上安装的游戏a(该游戏a为云游戏),具体可基于玩家在手机的客户端界面上显示的游戏a的游戏标识
的触发操作,生成游戏启动请求,基于该请求,进行游戏初始化并启动主线程。该游戏启动请求中包括该游戏a的游戏标识以及玩家的游戏账号信息;手机基于该游戏启动请求,启动该游戏a,并完成游戏a的初始化。
54.启动游戏a后,手机在接收到玩家点击开始玩游戏的操作时,响应于该操作,玩家开始玩游戏,在游戏进行到某个场景时,需要在游戏a内播放广告视频,则可从广告视频对应的服务器获取该广告视频,将该广告视频作为待播放视频,同时,创建并启动独立的线程(第一线程),其中,第一线程可以有多个,则可通过多个第一线程处理待播放视频。
55.视频解码步骤:通过独立的线程对广告视频进行解析,得到广告视频中至少一帧图像中各帧图像的图像数据和图像尺寸,其中,对于每帧图像,图像数据包括该帧图像的图像内容,图像尺寸包括该图像的高和宽。
56.纹理更新步骤:由于对于每帧图像的以下处理过程一致,则下文以一帧图像为例进行说明,为描述方便,下文可称该图像为图像1。通过独立的线程基于该图像1的图像尺寸,确定该图像1所占存储空间大小,基于该图像1所占存储空间大小,通过三维图形direct3d的底层接口得到direct3d对象,接下来独立的线程通过direct3d对象对应的接口调用纹理创建接口createtexture2d接口,以越过游戏引擎(比如,unity引擎),在显存中创建该图像1对应的第一纹理(还可将第一纹理称为纹理t2)。通过独立的线程将图像1的图像数据存储至对应的纹理t2。假如,解析广告视频得到10帧图像,则对应创建10个纹理t2。在本技术方案中,可以随着广告视频的播放,逐步对广告视频进行解析,则上述10帧图像可以是广告视频中的部分图像。也可以一次性解析得到广告视频的全部图像,则上述10帧图像也可以是广告视频中的全部图像。
57.创建第二纹理步骤:由第二线程通过调用外部纹理创建接口texture2d.createexternaltexture接口,基于待播放视频中的图像的图像尺寸,在内存中创建目标纹理(还可称目标纹理为纹理t1),其中,纹理t1可只在需要对纹理t2中的图像数据进行渲染时创建一次。纹理t1建时所基于的图像可以是视频中的任一帧图像。
58.渲染步骤:通过主线程创建纹理t2和纹理t1的对应关系,基于该对应关系,第三线程可将纹理t2中存储的图像数据作为目标纹理对应的图像数据(纹理数据),对目标纹理的纹理数据和待渲染的游戏数据进行渲染,得到目标画面数据。其中,每个纹理t2一次也只存储一帧图像的图像数据。然后,云服务器对目标画面数据进行编码,得到视频流;云服务器将该视频流发送给用户终端,用户终端对该视频流进行解码得到目标画面数据并播放,最终实现在云游戏a内播放广告视频的目的。
59.图1为本技术实施例提供的一种数据处理方法的流程图,该方案可以由任一电子设备执行,例如,本技术实施例的方案可以在用户终端或者服务器上执行,或者由用户终端和服务器交互执行。
60.由前文描述可知,该方法的适用场景是游戏运行过程中播放视频的场景,在播放视频之前,需要启动目标游戏,具体的过程为:
61.获取针对目标游戏的游戏启动请求,游戏启动请求中包括游戏标识,基于游戏启动请求,启动游戏标识对应的目标游戏以及第二线程。
62.游戏启动请求是用户通过用户终端发起的启动游戏的请求,比如,可以是基于用户在用户界面上对显示的目标游戏的游戏标识的触发操作生成的,该游戏启动请求中包括
该游戏标识,基于该游戏启动请求启动该目标游戏。在启动目标游戏的同时,启动第二线程(还可称为主线程)。其中,目标游戏为用户(也可称为玩家)想要玩的游戏。需要说明的是,上述第二线程通常仅在游戏启动时启动一次。
63.下面结合图1示出的一种数据处理方法对本技术方案进行说明,图1示出了本技术实施例提供的一种数据处理方法的流程示意图,该方法可以由电子设备执行,其中,该电子设备可以是用户终端,也可以是云服务器,如图1中所示,在该示例中,执行主体可以为云服务器或用户终端,该方法可以包括以下步骤:
64.步骤s110,获取待播放视频,该待播放视频是在目标游戏运行过程中播放的视频。
65.其中,待播放视频为需要在目标游戏内播放的视频,该视频是与目标游戏一起播放的视频,最终呈现给用户的游戏画面中包括待播放视频的内容以及游戏内容。该视频可以是实时的视频流,也可是一段完整的视频,或某个完整视频的一段视频。该视频可以是包含在目标游戏的游戏数据中的视频。该视频还可以是基于视频的下载地址从对应的视频平台上下载的视频,或者由用户上传的视频。该视频还可以是实时录制的视频流,该视频流可以由玩家的用户终端实时录制得到的,本技术方案中不限定该视频的来源。本技术方案中,不限定待播放视频的类型,比如,可以是游戏视频、广告视频、电影片段、游戏玩家直播视频等等。
66.步骤s120,创建并启动第一线程,通过第一线程对待播放视频进行解析,得到待播放视频中各帧图像的图像数据。
67.其中,对于待播放视频中的各帧图像,一次可解析出一帧,或几帧,或全部帧,具体可基于实际需求配置。每解析出一帧图像,可对应为该帧图像创建第一纹理。对于每帧图像,图像数据中包括该帧图像的图像内容。以一帧图像为例,该帧图像的图像数据可以该图像中各个像素点的颜色值。比如,该帧图像的图像编码格式为rgb编码格式,则该图像的图像数据为该图像中各像素点在r、g、b三个颜色通道下对应的颜色值。
68.其中,第一线程可以为在cpu(central processing unit,中央处理器)上创建并启动的线程,如果是在cpu上创建并启动的线程,由于通常游戏都是基于cpu中的单线程或者固定线程数的线程来运行的,正常情况下所采用的线程不超过3个线程。但是对于具有大于3个线程的cpu,比如,具有4至64个线程的cpu,游戏只使用3个线程的话,cpu的性能没有被充分发挥出来,本技术方案单独开启新的线程(第一线程)来做视频解析和纹理创建(创建第一纹理),因为是新的线程,所以使用到了更多的cpu的线程,从而可提高cpu的利用率。
69.可以理解的是,cpu指的是目标游戏当前运行环境中的cpu。如果游戏运行在玩家手机上,则该cpu指的就是手机cpu;如果游戏运行在电脑上,则该cpu指的就是电脑cpu;如果目标游戏运行在云端(目标游戏是云游戏),则该cpu指定就是云服务器cpu。
70.在本技术的方案中,上述视频解析与纹理创建可以异步实现,即可以一边解析,一边创建第一纹理,比如,第一线程可以解析出视频中的一帧图像,基于该帧图像的图像尺寸,创建该帧图像对应的第一纹理,然后第一线程再解析视频中的下一帧图像,再基于该下一帧图像的图像尺寸,创建该下一帧图像对应的第一纹理。也可以解析出视频中的几帧图像,或全部图像后,再执行纹理创建的步骤。
71.步骤s130,对于待播放视频中的每帧图像,通过第一线程创建该帧图像对应的第一纹理,并将该帧图像的图像数据存储到第一纹理中。
72.其中,第一纹理指的是存储图像数据的存储空间。对于待播放视频中的每帧图像,一帧图像可以对应创建一个第一纹理,即每帧图像的图像数据存储至该帧图像对应的第一纹理中,一个第一纹理仅用于存储对应一帧图像的图像数据。作为一个示例,比如,视频中有10帧图像,则对应创建10个第一纹理,每个第一纹理存储一帧图像的图像数据。
73.其中,对于待播放视频中的每帧图像,上述通过第一线程创建该帧图像对应的第一纹理,可以包括:由第一线程基于该帧图像的图像尺寸,确定该帧图像所占存储空间的大小;根据该帧图像所占存储空间大小,通过第一线程创建该帧图像对应的第一纹理。
74.其中,第一纹理可以创建在显卡对应的显存中,也可以创建在cpu对应的内存空间中,如果是在显存中创建,则上述存储空间为显存空间,如果是在内存空间中创建,则上述存储空间为内存空间。
75.其中,图像尺寸越大,表征对应图像所占存储空间越大。在本技术方案中,对于图像的图像尺寸,可以根据需要设定,本技术实施例在此不作任何限定,例如,图像的图像尺寸可以为width*height,其中,width表示宽度,height表示高度。基于图像的高和宽,确定图像所占存储空间大小,可选的,存储空间大小可基于以下公式确定:
76.图像所占存储空间大小=图像高度(像素)*图像宽度(像素)*一个像素所占存储空间(单位为字节)。
77.其中,图像的高度指的是图像的高度方向上的像素点的数量,图像的宽度指的是图像的宽度方向上的像素点的数量。
78.在实际应用中,对于同一个视频,该视频中的各帧图像的图像尺寸都是相同的,则在基于图像的图像尺寸,创建第一纹理时,可基于一帧图像的图像尺寸,创建各帧图像对应的第一纹理,无需对于视频中的每帧图像均获取对应的图像尺寸,从而减少数据处理量。
79.步骤s140,通过第二线程创建目标纹理,并建立第一纹理与目标纹理之间的对应关系。
80.其中,目标纹理是用于存储游戏的纹理数据的存储空间。目标纹理可以在需要在目标游戏内播放视频时创建,也可以在游戏初始化的创建。在本技术的可选方案中,上述目标纹理也可基于待播放视频中的图像的图像尺寸创建,具体的创建过程已在前文描述,在此不再赘述。
81.在本技术的方案中,对于待播放视频中的每帧图像,可先由第二线程创建该帧图像对应的第一纹理与目标纹理之间的对应关系,基于该对应关系,在后续步骤中,第三线程可准确找到该目标纹理对应的图像数据,即第一纹理中存储的图像数据。
82.在本技术的一可选方案中,上述通过第一线程在显存中创建该帧图像对应的第一纹理,可以包括:由第一线程通过调用三维图形接口的纹理创建接口,在显存中创建该帧图像对应的第一纹理。
83.上述通过第二线程创建目标纹理,可以包括:由第二线程通过调用外部纹理创建接口,在内存中创建目标纹理。
84.可选的,外部纹理创建接口为texture2d.createexternaltexture。目标纹理为在内存中创建的纹理,第一纹理为在显存中创建的纹理。两个纹理在不同的存储空间创建,第一纹理占用显卡中的存储资源,不占用内存的存储资源,从而可以使第二线程的处理速度更高,进而还可提升游戏流畅度。另一方面,在本技术的方案中,由于目标纹理只作为将图
像数据作为游戏数据进行渲染的载体,目标纹理中实际上始终没有存储数据,因此,将目标纹理创建在内存中,实际上目标纹理没有占用内存的存储资源。
85.可选的,三维图像接口为direct3d接口。direct3d接口可以提供越过游戏引擎直接进行支持该接口的各种硬件的底层操作,比如,在显存中创建第一纹理,这样第一纹理占用显卡中的存储资源,不占用内存空间的存储资源,从而可进一步提升处理速度,让游戏运行的更加顺畅。
86.可选的,纹理创建接口可以为createtexture2d,具体的,在基于该帧图像创建第一纹理时,第一线程可通过direct3d的底层接口得到direct3d对象,第一线程通过direct3d对象对应的三维图像接口direct3d调用纹理创建接口createtexture2d,在显存中创建第一纹理。这样可通过游戏引擎的底层接口越过游戏引擎创建一个与游戏引擎无关的纹理。
87.可选的,上述游戏引擎可以为unity、unreal engine或其它支持多线程渲染技术(比如,direct3d技术)的游戏引擎。其中,此处的多线程指的是至少一个第一线程和一个第二线程。
88.在本技术的可选方案中,上述纹理创建接口createtexture2d是线程安全的,即可同时调用多个线程,每个线程可独立执行对应的任务,在该createtexture2d接口内部实现对线程的加锁过程,在该createtexture2d接口外部无需其他的处理,采用线程安全技术可保证纹理创建接口createtexture2d正常使用,即在多个线程并行执行时,可保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
89.其中,如果该视频有10帧图像,则需要对应创建10个第一纹理,则同样需要创建10个对应关系。对于每帧图像,基于该帧图像对应的对应关系,第二线程可以基于目标纹理对应的图像数据进行渲染。其中,上述每个第一纹理一次存储一帧图像的图像数据,上述目标纹理中一次也只存储一帧图像的图像数据。
90.可选的,在本技术的方案中,可基于第一纹理的标识,创建该第一纹理和目标纹理的对应关系,该标识用于表征该第一纹理的身份,比如,该第一纹理在显存中的地址(存储位置),则在基于该对应关系,对目标纹理对应的图像数据进行渲染时,可先基于该第一纹理的标识和对应关系,确定第二线程所要渲染的是哪个第一纹理中的图像数据,即该标识对应的第一纹理中的图像数据,则第二线程可对该标识对应的第一纹理中的图像数据进行渲染。
91.步骤s150,响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
92.其中,播放时机是游戏逻辑中预先配置的在游戏中播放待播放视频的条件,该条件可以是与游戏内容相关的,比如,该条件为接收到针对指定的虚拟按钮的触发操作,或者,跳转至游戏中指定的游戏画面等。上述的第三线程可以与第二线程是同一线程,则可通过主线程实现步骤s150。第三线程可以包括至少两个线程,该至少两个线程中可以包括第二线程,则可以通过至少两个线程完成步骤s150。
93.响应于满足待播放视频的播放时机时,第三线程为游戏引擎对应的线程,第三线程知道即将要渲染的是哪些数据(哪些待渲染的游戏数据和哪个第一纹理中的图像数据),
以及这些数据的存储地址,则可将这些要渲染的数据加载到显存再进行渲染。
94.其中,待渲染的游戏数据包括游戏的三维模型、三维模型对应的游戏纹理数据以及其他与渲染相关的数据。三维模型对应的游戏纹理数据对应贴图在对应的三维模型上,即可得到游戏场景下的游戏内容。比如,三维模型是树叶形状,该树叶形状对应的游戏纹理数据包括树叶的颜色信息以及纹理信息,将该树叶的颜色信息以及纹理信息对应的贴在该树叶形状上可以得到一个游戏场景下的树叶。
95.需要说明的是,上述第一线程和第三线程所执行的步骤可采取异步执行的方式,即第一线程将视频中的各帧图像的图像数据存储至各自对应的第一纹理中的过程与第三线程对图像数据和待渲染的游戏数据进行渲染的过程异步进行处理,只要第一纹理中存储有图像数据,第三线程即可执行渲染的步骤,则上述第三线程所渲染的图像数据可以是一个第一纹理对应的一帧图像的图像数据,也可以是多个第一纹理对应的多帧图像的图像数据,如果是多帧图像的图像数据,第二线程也是按照多帧图像中各帧图像在视频中的排序一帧一帧进行渲染。
96.在本技术的可选方案中,第三线程可以在需要对图像数据渲染的时候,即需要播放待播放视频的时候,再由第三线程执行渲染的步骤。
97.本技术实施例所提供的方案,在获取到待播放视频时,创建并启动第一线程,通过该第一线程实现对待播放视频解析、创建第一纹理,以及将该视频中的每帧图像的图像数据存储至第一纹理的过程,通过第二线程创建目标纹理,并建立第一纹理和目标纹理之间的对应关系,目标纹理是用于存储待渲染数据的纹理,通过目标纹理可将第一纹理中的图像数据作为游戏纹理数据进行渲染,进而,在需要在目标游戏内播放视频时,即响应于满足待播放视频的播放时机,通过第三线程基于将要渲染的数据(目标纹理对应的图像数据和待渲染的游戏数据)进行渲染。在本技术方案中,由于对待播放视频的解析以及存储各帧图像的图像数据均是通过第一线程实现的,即相对比较耗时的工作都是由第一线程完成的,相对不耗时的渲染工作由第二线程和第三线程完成,由此,通过多个线程完成在目标游戏运行过程中播放视频的过程,可提升处理效率。进一步的,由于第一线程只用来处理待播放视频,不影响处理目标游戏的游戏数据的线程的处理逻辑,从而还可以提升游戏性能。
98.在本技术的可选方案中,在得到目标画面数据后,可将该目标画面数据显示在终端设备上,该目标画面数据为游戏画面,该游戏画面内容中包括游戏内容(待渲染的游戏数据对应的内容)和待播放视频的图像内容(图像数据对应的内容)。该图像内容在游戏画面内的展示形式不限定,该图像内容在游戏画面内的显示位置也不限定,可以是指定的位置,也可是用户选择的位置。
99.作为一个示例,参见图2所示的目标游戏的虚拟场景展示界面的示意图,图2中所示的展示界面10是目标游戏在进行到场景a时所对应的展示界面,该展示界面10包括位置a和位置b,位置a处用于显示目标游戏的游戏内容。目标游戏在运行到场景a时,需要在该展示界面10的位置b处播放玩家的面部表情的视频,则可通过玩家的视频采集设备(比如,目标游戏运行的用户终端的摄像头,图2中所示的摄像头101)采集玩家的面部表情的视频流,将该视频流作为待播放视频,通过本技术图1中所示的方法对该视频流进行渲染,以使该视频流在上述展示界面10的位置b处播放。
100.作为又一个示例,参见图3所示的目标游戏的又一虚拟场景展示界面的示意图,图
3中所示的展示界面20是目标游戏在进行到场景b时所对应的展示界面,该展示界面20包括虚拟界面201和虚拟界面202,虚拟界面201为一个“广告牌”,虚拟界面202上显示目标游戏的游戏内容。目标游戏在运行到场景b时,需要在该展示界面20的虚拟界面201上播放一个广告视频,则可将该广告视频作为待播放视频,通过本技术图1中所示的方法对该视频流进行渲染,以使该广告视频在展示界面20的虚拟界面201上播放。可以理解的是,不同场景下对应的虚拟界面的具体表现形式可以不同。
101.可以理解的是,在视频播放过程中,用户可基于实际需求打断视频的播放,比如,退出游戏,则如果还有未被第二线程渲染的图像数据,响应于用户的停止播放视频的操作,可停止对图像数据的渲染。
102.可选的,上述第一线程可以为多个,即可以由多个第一线程共同执行视频解析、创建纹理和将图像数据存储至第一纹理(创建纹理和将图像数据存储至第一纹理的过程在下文还可称为纹理更新或更新纹理),以加快处理速度。
103.在本技术方案中,响应于满足待播放视频的播放时机,实现对待渲染的游戏数据和目标纹理对应的图像数据的渲染得到目标画面数据可以包括以下两种实现方式。
104.第一种实现方式,响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。其中,对于第二线程而言,如果第二线程只渲染目标纹理对应的数据,则可将第一纹理中存储的图像数据作为目标纹理的纹理数据,这样通过目标纹理,第二线程可以对第一纹理中存储的图像数据进行渲染。
105.第二种实现方式,响应于满足待播放视频的播放时机,由第三线程根据对应关系,将第一纹理中的图像数据存储至目标纹理中,基于目标纹理中存储的图像数据和待渲染的游戏数据进行渲染,得到目标画面数据。其中,对于待播放视频中的每帧图像,在将从第一纹理中获取的图像数据存储至目标纹理中之前,如果目标纹理中存储有其他图像的图像数据,则可在该其他图像的图像数据渲染之后,将从第一纹理中获取的图像数据替换目标纹理中的图像数据,可以理解的是,游戏启动时,目标纹理中存储的图像数据为空。
106.在实际应用中,通常第二线程和目标纹理对应一个实现逻辑,第一线程与第一纹理对应一个实现逻辑,第二种实现方式需要破坏第二线程对应的实现逻辑,即由原来的第二线程渲染目标纹理中存储的数据的逻辑,更改为先将第一纹理中的数据存储至目标纹理,再由第二线程渲染目标纹理中的数据的逻辑。从实现复杂度角度上讲,第二种实现方式相较于第一种实现方式的实现复杂度要高。
107.在本技术的一可选方案中,第一线程可以包括至少两个,则可通过至少两个第一线程来创建各帧图像对应的第一纹理,一个第一线程对应创建一帧图像对应的第一纹理,这样可以加快处理速度。若第一线程包括至少两个第一线程,在至少两个第一线程中的一个第一线程通过调用三维图形接口的纹理创建接口,在显存中创建该帧图像对应的第一纹理时,对该一个第一线程进行加锁,此时,其他第一线程不能调用三维图形接口的纹理创建接口,在得到该帧图像对应的第一纹理后,对该一个第一线程进行解锁,此时,至少两个第一线程中另外的一个第一线程可以调用三维图形接口的纹理创建接口,在显存中创建其他帧图像对应的第一纹理。这样可以避免多个第一线程调用三维图形接口的纹理创建接口时,出现逻辑错误,影响线程的正常运行。
108.作为一个示例,至少两个第一线程分别为线程a和线程b,需要创建纹理的图像包括图像1和图像2,在本示例中,可先由线程a通过调用三维图形接口的纹理创建接口,在显存中创建图像1对应的第一纹理,并对该线程a进行加锁,在得到图像1对应的第一纹理后,对该线程a进行解锁,以使得线程b可以调用三维图形接口的纹理创建接口,在显存中创建图像2对应的第一纹理。
109.在本技术的可选方案中,上述建立第一纹理与目标纹理之间的对应关系,可以包括:建立目标纹理对应的纹理坐标与第一纹理中相对应的纹理坐标之间的对应关系;进而上述由第三线程根据对应关系从第一纹理中读取的目标纹理对应的图像数据,包括:由第三线程根据对应关系从第一纹理中读取目标纹理对应的纹理坐标对应的图像数据。
110.其中,目标纹理为游戏纹理,即目标纹理中的数据可以作为游戏纹理数据进行处理,具体的即为按照目标纹理对应的纹理坐标进行处理,建立对应关系时,建立的是第一纹理对应的纹理坐标和目标纹理坐标之间的对应关系,这样在使用第一纹理中存储的图像数据时,可基于对应关系,将第一纹理中的图像数据作为目标纹理对应的图像数据进行渲染。
111.在本技术的可选方案中,该方法还包括:通过第二线程获取待渲染的游戏数据,并将待渲染的游戏数据加载到内存中;
112.上述第一纹理为在显存中创建的纹理,上述第二线程和第三线程为同一线程,响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据,包括:
113.响应于满足待播放视频的播放时机,由第三线程将待渲染的游戏数据从内存加载到显存中,以及由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,通过第三线程对待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
114.其中,对于待渲染的游戏数据,在需要渲染之前,可以通过主线程先将待渲染的游戏数据从硬盘加载到内存中,由于在渲染时,需要即将待渲染的游戏数据加载到显存中,在本技术的方案中,在需要渲染时,即响应于满足待播放视频的播放时机,才通过主线程将待渲染的游戏数据从内存加载到显存,可避免在不需要渲染时就将待渲染的游戏数据从内存加载到显存,导致显存占用过多,影响游戏运行速度。另一方面,由于第一纹理是在显存中创建的,在渲染时,可直接渲染显存中的第一纹理中的图像数据,进一步加快处理速度。
115.在本技术的可选方案中,上述第三线程包括第二线程和渲染线程,上述响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据,包括:响应于满足待播放视频的播放时机,由第二线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并向渲染线程发送渲染指令,通过渲染线程基于渲染指令,对待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
116.其中,渲染过程(步骤s150)可以由主线程和渲染线程共同完成,由主线程确定需要渲染哪些数据,通过渲染指令告知渲染线程,渲染线程对要渲染的数据进行渲染,由于通过两个线程完成步骤s150,相较于通过一个线程(主线程)完成,进一步提升处理效率,渲染线程也可以是游戏引擎对应的线程。
117.在本技术的可选方案中,上述由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据,包括:
118.基于各帧图像在待播放视频中的排序,由第三线程根据对应关系从第一纹理中依次读取目标纹理对应的图像数据,依次基于读取的目标纹理对应的图像数据和对应的待渲染的游戏数据进行渲染,得到目标画面数据。
119.其中,在渲染第一纹理中的图像数据时,可按照各帧图像在视频中的排序依次进行渲染,这样可保证视频画面的流畅度。作为一个示例,比如,以视频中三帧图像为例,三帧图像的先后排序依次为图像a,图像b和图像c,则第二线程可先对第一纹理中图像a的图像数据进行渲染,然后再对第一纹理中图像b的图像数据进行渲染,最后再对第一纹理中图像c的图像数据进行渲染。
120.可选的,由于在本技术的方案中,一帧图像对应创建一个第一纹理,则在第二线程对第一纹理中所存储的图像数据进行渲染后,表征该第一纹理中所存储的图像数据已被使用,则可由第一线程删除该第一纹理中的图像数据,以释放存储资源。
121.在本技术的可选方案中,多帧图像还可共用一个第一纹理,则在创建了第一纹理后,待播放视频中的各帧图像的图像数据均可按照图像在视频中的排序依次存储至第一纹理中,在该种情况下,由于第一纹理中一次只存储一帧图像的图像数据,则此时的存储至第一纹理指的是基于一帧图像的图像数据替换第一纹理中存储的图像数据。在多帧图像共用一个第一纹理的情况下,第二线程可与第一线程之间进行通信,由于第一纹理中一次仅可存储一帧图像的图像数据,在第二线程对第一纹理中的一帧图像的图像数据渲染后,第一线程可按照图像在视频中的排序,将该帧图像的下一帧图像的图像数据存储至该第一纹理中。按照此方式,实现对视频中各帧图像的图像数据的存储以及渲染。
122.本技术的方案中的目标游戏可以为普通游戏或者云游戏,如果是云游戏,则该方案的执行主体为云服务器,如果是普通游戏,该方案的执行主体为用户终端(玩家的终端设备)。如果执行主体是用户终端,则第一线程、第二线程和第三线程均是在终端设备上运行的线程,在第三线程对需要渲染的数据渲染后,可直接将得到的目标画面数据显示在用户终端的客户端界面上。
123.如果执行主体是云服务器,则在本技术的可选方案中,上述目标游戏为云游戏,该方法由云游戏服务器执行,在得到目标画面数据之后,该方法还包括:对目标画面数据进行编码,得到视频流,将视频流发送给用户终端,以使用户终端通过对视频流进行解码得到目标画面数据并播放。
124.其中,可在第二线程对多帧图像的图像数据和对应的待渲染的游戏数据渲染后,再对渲染后得到的多帧目标画面数据进行编码,以使得在用户终端对编码得到的视频流进行解码时,可得到多帧目标画面数据,并且在播放该视频流对应目标画面时,使得视频画面更加顺畅。
125.在本技术的可选方案中,在第二线程对各帧图像的图像数据进行渲染后,可将渲染后的目标画面数据存储至显存中,然后对显存中存储的目标画面数据进行编码,得到视频流,在将该视频流发送给用户终端之后,可以删除显存中存储的目标画面数据,这样可释放显存中的存储资源。
126.基于本技术的方案,在玩家玩游戏的过程中,对于在游戏内播放视频的需求,可分为以下两个场景,第一种场景:普通游戏场景,第二种场景:云游戏场景,其中,云游戏场景指的是游戏引擎运行在云服务器上的游戏场景,普通游戏场景指的是游戏引擎运行在用户终端上的游戏场景。
127.为了更好的说明及理解本技术所提供的方法的原理,下面结合另一个可选的具体实施例对本技术的方案进行说明。需要说明的是,该具体实施例中的各步骤的具体实现方式并不应当理解为对于本技术方案的限定,在本技术所提供的方案的原理的基础上,本领域技术人员能够想到的其他实现方式也应视为本技术的保护范围之内。
128.对于任一种需要在游戏内播放视频的场景,本技术的方案均适用。在下面的示例中,以待播放视频为通过视频采集设备采集视频为例,结合图4和图5进行说明。
129.第一种场景,普通游戏场景
130.在该场景下,本技术方案的执行主体为用户终端,本示例中,用户终端为手机。第二线程(在本示例中,还可将第二线程称为主线程)和第一线程(在本示例中,还可将第一线程称为独立的线程)是手机上运行游戏引擎对应的线程。在该场景下,通过手机完成对需要播放在游戏内的视频(待播放视频)的进行视频解码、纹理更新及渲染的工作。需要说明的是,本示例中,玩家通过手机玩的游戏可以为在线游戏或单机游戏,本示例中,以在线游戏为例进行说明。
131.首先进行游戏初始化(对应图5中所示的初始化):玩家在手机上启动手机上安装的游戏a(对应图5中所示的游戏启动),具体可基于用户在手机的客户端界面上显示的游戏a的游戏标识的触发操作,生成游戏启动请求,基于该请求,进行游戏初始化并启动主线程。
132.该游戏启动请求中包括该游戏a的游戏标识以及玩家的游戏账号信息;手机基于该游戏启动请求,启动该游戏a,如果游戏a不是玩家第一次启动,则该游戏a启动时所需要的数据可以在第一次启动时缓存在手机本地,则在启动游戏a时,可不需要向游戏a对应的服务器获取启动需要的数据。如果是第一次启动游戏a,则手机将该游戏启动请求发送给服务器,服务器基于该请求获取该游戏a对应的游戏数据并发送给手机,手机中的主线程基于该游戏数据完成游戏a的初始化。
133.启动游戏a后,手机在接收到玩家点击开始玩游戏的操作时,响应于该操作,玩家开始玩游戏,在游戏进行到某个场景m时,如果游戏中有需要在该游戏内播放玩家面部表情的视频的需求(比如,游戏运行至跳转到指定的游戏画面,需要在该游戏画面上播放玩家面部表情的视频),可向玩家申请手机摄像头的使用权限,在获得允许使用摄像头的权限时,开启摄像后,录制玩家脸部表情的视频流,将该视频流作为待播放视频,同时,创建并启动独立的线程(第一线程),其中,第一线程可以有多个,则可通过多个第一线程处理待播放视频。
134.通过独立的线程对玩家脸部的视频流进行解析,得到各帧图像的图像数据和图像尺寸,其中,对于每帧图像,图像数据包括该帧图像的图像内容,图像尺寸包括该图像的高和宽。
135.下文以一帧图像为例进行说明,为描述方便,下文可称该图像为图像1;通过独立的线程基于该图像1的图像尺寸,确定该帧图像1所占存储空间大小,基于该帧图像1所占存储空间大小,通过direct3d的底层接口得到direct3d对象,接下来独立的线程通过
direct3d对象对应的接口调用createtexture2d接口,越过unity引擎,在显存中创建该图像1对应的第一纹理(还可将第一纹理称为纹理t2)(对应图5中所示的使用底层direct3d接口创建纹理t2)。假如,解析玩家脸部表情的视频流得到10帧图像,则对应创建10个第一纹理。
136.作为一个示例,以一个第一纹理为例,可通过以下代码创建第一纹理:
137.tex=render_api

>createtexture2d(image_data,width,heigth);
138.其中,render_api为着色器渲染接口,createtexture2d为纹理创建函数,image_data表示图像数据,width表示图像的宽,heigth表示图像的高。独立的线程可基于图像的高和宽创建第一纹理,并将该图像的图像数据存储至该第一纹理中。
139.可选的,在本示例中,以一个第一纹理为例,还可通过以下代码创建第一纹理:renderapid3d11::createtexture2d(void*texture_data,int width,intheigh);其中,renderapid3d11为支持多线程渲染技术的着色器渲染接口,direct3d 11技术为支持多线程渲染的技术;createtexture2d为纹理创建函数,texture_data表示图像数据,int width表示图像的宽,intheigth表示图像的高,该段代码与上述基于渲染接口创建第一纹理所用的数据是相同的,仅是表达方式不同。
140.其中,对于一帧图像,在创建该帧图像对应的第一纹理之前,需要获取该帧图像的图像尺寸以及一些配置好的该图像的相关数据,该相关数据可以包括但不限于该图像中的像素的数据格式,创建第一纹理的个数,第一纹理对应的文件格式等。
141.通过独立的线程将图像1的图像数据存储至对应的纹理t2(上述创建图像1对应的第一纹理和将图像1的图像数据存储至对应的纹理t2的过程对应图4中所示的更新纹理数据)。
142.由第二线程通过调用外部纹理创建接口texture2d.createexternaltexture接口,基于待播放视频中的图像的图像尺寸,在内存中创建目标纹理(对应图5中的纹理t1)。其中,纹理t1可只在需要对第一纹理中的图像数据进行渲染时创建一次。目标纹理创建时所基于的图像可以是视频中的任一帧图像。可选的,目标纹理也可以在游戏初始化的创建(对应图5中所示的单次初始化)。
143.作为一个示例,目标纹理的创建可参见以下代码:
144.targettexture=texture2d.createexternaltexture(
145.width,
146.height,
147.textureformat.rgba32,
148.false,false,
149.texture
150.);
151.其中,targettexture为目标纹理,texture2d.createexternaltexture为外部纹理创建接口,width为目标纹理的宽,height为目标纹理的高,textureformat.rgba32为目标纹理的纹理格式。
152.通过第二线程(主线程)基于纹理t2在显存中的地址,创建纹理t2和纹理t1的对应关系(对应图5中所示的绑定到t1,对应图4中所示的绑定到当前显示的纹理,其中,当前显
示的纹理指的是游戏a内当前播放的视频帧对应的纹理),响应于满足待播放视频的播放时机(本示例中,该播放时机为前文描述的游戏运行至跳转到指定的游戏画面,需要在该游戏画面上播放玩家面部表情的视频),此时,主线程知道即将要渲染哪些数据,主线程(第三线程与第二线程是同一线程)基于对应关系确定纹理t2对应的图像数据(对应图5中所示的获取多线程(多线程指的是多个第一线程)创建的纹理t2,对应图4中所示的获取视频解码后的纹理,此时,视频解码后的纹理指的是图像1对应的纹理t2中的图像数据),通过主线程基于对应关系从显存的第一纹理中读取目标纹理对应的图像数据,并将待渲染的游戏数据从硬盘中加载到内存中,再从内存中加载到显存中,主线程对显存中的纹理t2对应的图像数据(第一纹理中存储的图像数据)和待渲染的游戏数据进行渲染,得到目标画面数据(对应图5中所示的执行渲染,对应图4中所示的渲染纹理)。
153.上述第三线程可以与第二线程不是同一线程,第三线程包括主线程和渲染线程,在主线程确定了将要渲染的数据后,主线程向渲染线程发送渲染指令,指令中告知渲染线程所要渲染哪些数据,渲染线程对主线程对显存中的纹理t2对应的图像数据(第一纹理中存储的图像数据)和待渲染的游戏数据进行渲染,得到目标画面数据。
154.上述第一线程执行的流程可以与第二线程执行的流程采用异步的方式,即独立的线程可以将多帧图像的图像数据分别存储至各自对应的纹理t2,主线程可以对多个纹理t2中的图像数据,按照图像在视频中的排序一帧一帧进行渲染。
155.第二线程异步获取目标纹理可参见以下代码:
156.var texture=asynctexture.gettexture();
157.if(texture==inptr.zero)
158.return;
159.其中,texture为第一纹理,asynctexture.gettexture()为异步获取第一纹理的函数,用于采用异步的方式获取第一纹理。即在需要渲染第一纹理中的图像数据时,通过第二线程获取存储了图像数据的第一纹理。
160.作为一个示例,第二线程获取第一纹理中的图像数据可参见以下代码:
161.targettexture.updateexternaltexture(texture);
162.其中,targettexture.updateexternaltexture为目标纹理更新接口,用于基于第一纹理和目标纹理之间的对应关系,确定目标纹理对应的图像数据进行渲染。
163.在本示例中,unity的版本为2020.1.0a17版本,该版本的游戏引擎中可适用于本技术的方案,并且不会出现显存泄露的问题。
164.在通过第二线程对待播放视频中的各图像的图像数据和对应的待渲染的游戏数据进行渲染之后,可将目标画面数据通过手机中运行的目标游戏的展示界面显示给用户,此时,目标游戏的展示界面上所显示的目标画面包括游戏内容和玩家面部表情的视频。
165.上述示例中,待播放视频为包含玩家面部表情的视频,本技术方案适用于任何类型的视频,比如,待播放视频为与目标游戏相关的视频,例如,某个新技能的使用介绍视频,玩家在玩目标游戏的过程中,第一次使用到该技能(播放时机)时,可以基于申请的方案将该视频在目标游戏内播放,以向玩家介绍该新技能的使用方法。
166.第二种场景:云游戏场景
167.在该场景下,参见图6所示的数据处理系统的结构示意图,本方案的执行主体为云
服务器,其中,该云服务器可以为游戏b对应的服务器,游戏b为云游戏,用户终端a、用户终端b和用户终端c为玩游戏a的玩家的用户终端,比如,手机,需要说明的是,上述三个用户终端仅为示例,用户终端的具体数量以及表现形式在本技术中不作限定,比如,用户终端还可以是笔记本。本示例中,可以以用户终端a的玩家玩游戏b的场景为例进行说明,主线程和独立的线程是云服务器中的游戏引擎对应的线程。通过云服务器完成对待播放视频的视频解析、纹理更新及渲染的工作。具体流程为:
168.在玩家通过用户终端a玩游戏b时,有需要在游戏b内播放玩家的面部表情的视频时,可通过用户终端b获取玩家的面部表情的第一视频流,将第一视频流作为待播放视频,对第一视频流编码后发送给云服务器,云服务器接收到该编码的第一视频流后,对该编码的第一视频流进行解码,得到第一视频流,然后通过云服务器中独立的线程对第一视频流进行视频解析以及纹理更新,通过云服务器中的第三线程完成对第一视频流和对应待渲染的游戏数据的渲染,渲染后,云服务器对于渲染后的目标画面数据进行编码,得到第二视频流;云服务器将该第二视频流发送给用户终端a,用户终端a对该第二视频流进行解码得到各帧目标画面并播放,所播放的即为包含玩家面部表情的游戏画面。
169.基于与本技术图1所提供的方法相同的原理,本技术实施例还提供了一种数据处理装置,如图7所示,该数据处理装置20包括视频获取模块210,视频解析模块220,纹理创建模块230,对应关系建立模块240和数据渲染模块250;其中:
170.视频获取模块210,用于获取待播放视频,上述待播放视频是在游戏运行过程中播放的视频;
171.视频解析模块220,用于创建并启动第一线程,通过第一线程对待播放视频进行解析,得到待播放视频中各帧图像的图像数据;
172.纹理创建模块230,用于对于待播放视频中的每帧图像,通过第一线程创建该帧图像对应的第一纹理,并将该帧图像的图像数据存储到第一纹理中;
173.对应关系建立模块240,用于通过第二线程创建目标纹理,并建立第一纹理与目标纹理之间的对应关系;
174.数据渲染模块250,用于响应于满足待播放视频的播放时机,由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据,并基于待渲染的游戏数据和读取的目标纹理对应的图像数据进行渲染,得到目标画面数据。
175.可选的,上述对应关系建立模块240在建立第一纹理与目标纹理之间的对应关系时,具体用于:建立目标纹理对应的纹理坐标与第一纹理中相对应的纹理坐标之间的对应关系;上述数据渲染模块250在由第三线程根据对应关系从第一纹理中读取目标纹理对应的图像数据时,具体用于:由第三线程根据对应关系从第一纹理中读取目标纹理对应的纹理坐标对应的图像数据。
176.可选的,对于待播放视频中的每帧图像,上述纹理创建模块230在通过第一线程创建该帧图像对应的第一纹理时,具体用于:由第一线程通过调用三维图形接口的纹理创建接口,在显存中创建该帧图像对应的第一纹理;上述对应关系建立模块240在通过第二线程创建目标纹理时,具体用于:由第二线程通过调用外部纹理创建接口,在内存中创建目标纹理。
177.可选的,该装置还包括:数据加载模块,用于通过第二线程获取待渲染的游戏数
circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field

programmable gate array)或其他电子元件。
185.在另一些实施例中,本发明实施例提供的数据处理装置可以采用软件方式实现,存储在存储器中的数据处理装置,其可以是程序和插件等形式的软件,并包括一系列的模块,包括数据处理装置20中的视频获取模块210,视频解析模块220,纹理创建模块230对应关系建立模块240和数据渲染模块250;其中,数据处理装置20中的各模块用于实现本发明实施例提供的数据处理方法。
186.本技术实施例提供了一种数据处理装置,与现有技术相比,在获取到待播放视频时,创建并启动第一线程,通过该第一线程实现对待播放视频解析、创建第一纹理,以及将该视频中的每帧图像的图像数据存储至第一纹理的过程,通过第二线程创建目标纹理,并建立第一纹理和目标纹理之间的对应关系,目标纹理是用于存储待渲染数据的纹理,通过目标纹理可将第一纹理中的图像数据作为游戏纹理数据进行渲染,进而,在需要在目标游戏内播放视频时,即响应于满足待播放视频的播放时机,通过第三线程基于将要渲染的数据(目标纹理对应的图像数据和待渲染的游戏数据)进行渲染。在本技术方案中,由于对待播放视频的解析以及存储各帧图像的图像数据均是通过第一线程实现的,即相对比较耗时的工作都是由第一线程完成的,相对不耗时的渲染工作由第二线程和第三线程完成,由此,通过多个线程完成在目标游戏运行过程中播放视频的过程,可提升处理效率。进一步的,由于第一线程只用来处理待播放视频,不影响处理目标游戏的游戏数据的线程的处理逻辑,从而还可以提升游戏性能。
187.上述从虚拟模块或者虚拟单元的角度介绍本技术的数据处理装置,下面从实体装置的角度介绍本技术的电子设备。
188.基于与本技术实施例提供的方法相同的原理,本技术实施例中提供了一种电子设备,该电子设备包括存储器和处理器;存储器中存储有计算机程序,该计算机程序在被处理器执行时,可以实现本技术任一可选方式中所提供的方法。
189.作为一个可选方案,图8中示出了本技术实施例所适用的一种电子设备的结构示意图,如图8所示,图8所示的电子设备4000包括处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本技术实施例的限定。
190.处理器4001可以是cpu(central processing unit,中央处理器),通用处理器,dsp(digital signal processor,数据信号处理器),asic(application specific integrated circuit,专用集成电路),fpga(field programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。
191.总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci
(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
192.存储器4003可以是rom(read only memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,ram(random access memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom(electrically erasable programmable read only memory,电可擦可编程只读存储器)、cd

rom(compact disc read only memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
193.存储器4003用于存储执行本技术方案的应用程序代码(计算机程序),并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。
194.其中,电子设备包括但不限于用户终端设备、服务器,其中,服务器可以是物理服务器、云服务器、单个服务器或服务器集群等。
195.本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当该程序在计算机上运行时,可以使得计算机可以执行前述方法实施例中相应内容。
196.根据本技术的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方法实施例涉及的各种可选实现方式中提供的方法。
197.应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
198.以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜