CN115955590A - 视频处理方法、装置、计算机设备、介质 - Google Patents
视频处理方法、装置、计算机设备、介质 Download PDFInfo
- Publication number
- CN115955590A CN115955590A CN202211741956.8A CN202211741956A CN115955590A CN 115955590 A CN115955590 A CN 115955590A CN 202211741956 A CN202211741956 A CN 202211741956A CN 115955590 A CN115955590 A CN 115955590A
- Authority
- CN
- China
- Prior art keywords
- linked list
- node
- video
- decoding
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本申请提出一种视频处理方法、装置、计算机设备、介质及产品。应用于视频客户端,视频客户端配置有第一显卡和第二显卡;该方法包括:获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。本申请可满足特殊场景下的视频播放需求,可提高视频处理效率,降低延时。
Description
技术领域
本申请涉及计算机技术领域,具体涉及视频处理领域,尤其涉及一种视频处理方法、一种视频处理装置、一种计算机设备、一种计算机可读存储介质及一种计算机程序产品。
背景技术
随着计算机技术的不断发展,各式各样的视频遍布于日常生活中的方方面面。在视频领域,客户端侧的完整的视频处理过程通常包括:视频帧的解码处理、对解码处理的结果进行渲染处理、输出并播放渲染后的视频画面。
目前,客户端侧的常规的视频处理流程通常是由单张显卡独自完成解码和渲染等处理过程,处理效率较低。
发明内容
本申请实施例提出了一种视频处理方法、装置、计算机设备、介质及产品,支持将解码过程和渲染过程分别交由两张显卡单独执行,可提高视频处理效率,降低视频帧处理的延时。
一方面,本申请实施例提供了一种视频处理方法,应用于视频客户端,视频客户端配置有第一显卡和第二显卡;该方法包括:
获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
一方面,本申请实施例提供了一种视频处理装置,其特征在于,应用于视频客户端,视频客户端配置有第一显卡和第二显卡;该装置包括:
获取单元,用于获取待处理的视频帧;
处理单元,用于通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
存储单元,用于将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
获取单元,还用于从双向链表中获取待渲染的解码帧数据;
处理单元,用于通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
在一种可能的实现方式中,处理单元还用于执行以下操作:
创建链表头和链表尾,链表头用于存储存入到解码输出缓存中的第一个节点的指针,链表尾用于存储存入到解码输出缓存中最后一个节点的指针;
基于创建的链表头和链表尾,生成初始状态下的双向链表;
其中,初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。
在一种可能的实现方式中,处理单元基于第一显卡启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据之后,还用于执行以下操作:
通过解码线程基于线程加锁的方式获取解码输出缓存的写入权限;
根据解码处理得到的解码帧数据获取目标节点,并将目标节点添加至所述初始状态下的双向链表中;
在确定目标节点被成功添加至双向链表中后,调用解码线程执行释放锁的操作。
在一种可能的实现方式中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在解码输出缓存中位于目标节点的后一个节点。
在一种可能的实现方式中,处理单元将目标节点添加至初始状态下的双向链表中,用于执行以下操作:
将目标节点用于指向前项节点的前指针指向双向链表的链表头,并将目标节点用于指向后项节点的后指针指向链表头指向的第一个节点;
将链表头指向目标节点,以将目标节点添加至双向链表中;
若双向链表的链表尾指向的节点为空,则将链表尾指向目标节点。
在一种可能的实现方式中,处理单元从双向链表中获取待渲染的解码帧数据,用于执行以下操作:
通过渲染线程查询双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取解码输出缓存的读取权限;
将查询得到的可用节点从双向链表中移除;
若确定可用节点已成功从双向链表中移除,则通过渲染线程执行释放锁的操作。
在一种可能的实现方式中,若双向链表的链表尾所指向的节点不为空,则确定双向链表中存在可用节点,且可用节点为双向链表中的最后一个节点;处理单元将查询得到的可用节点从双向链表中移除,用于执行以下操作:
若双向链表中存在至少两个节点,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点,以将最后一个节点从双向链表中移除;或者,
若可用节点为双向链表中的唯一节点,则将双向链表的链表尾的指针指向的节点设置为空,以将最后一个节点从双向链表中移除。
在一种可能的实现方式中,处理单元还用于执行以下操作:
检测视频客户端中是否配置有集成显卡,若有,则将集成显卡作为第一显卡,并将独立显卡作为第二显卡;
若无,则将工作显卡作为第二显卡,并将除工作显卡之外的显卡作为第一显卡。
在一种可能的实现方式中,处理单元还用于执行以下操作:
判断第二显卡是否满足空闲条件,若满足,则调用第二显卡的渲染线程从双向链表中获取待渲染的解码帧数据并执行渲染操作;
若不满足,则调用第一显卡的解码线程从双向链表中获取待渲染的解码帧数据并执行渲染操作。
一方面,本申请实施例提供一种计算机设备,该计算机设备包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述的视频处理方法。
一方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被计算机设备的处理器读取并执行时,使得计算机设备执行上述的视频处理方法。
一方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的视频处理方法。
本申请实施例中,视频客户端中配置有第一显卡和第二显卡。首先,第一显卡可以获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;然后,可以将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存;最后,从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。由此可见,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术对象来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种视频处理方案的原理示意图;
图2是本申请实施例提供的一种视频处理***的架构示意图;
图3是本申请实施例提供的一种视频处理方法的流程示意图;
图4是本申请实施例提供的一种双向链表的结构示意图;
图5是本申请实施例提供的另一种视频处理方法的流程示意图;
图6是本申请实施例提供的一种解码线程的工作流程示意图;
图7是本申请实施例提供的一种向双向链表***节点的流程示意图;
图8是本申请实施例提供的一种渲染线程的工作流程示意图;
图9是本申请实施例提供的一种从双向链表移除节点的流程示意图;
图10是本申请实施例提供的一种游戏画面的场景示意图;
图11是本申请实施例提供的一种云游戏的图像处理方法的场景示意图;
图12是本申请实施例提供的一种视频处理装置的结构示意图;
图13是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
一、视频处理方案的原理:
本申请提供了一种视频处理方案,支持在视频客户端配置有两张显卡(即显示接口卡,又称显示适配器,用于将计算机***需要的显示信息进行转换,并向显示器提供转换后的显示信息,以控制显示器的显示对应的信息的一种硬件)的前提下,将解码任务交由第一显卡来执行,渲染任务交由第二显卡来执行;可应用于诸如云游戏、视频通话、以及游戏直播等实时视频流播放的应用场景中,可提高视频处理效率,降低播放延时。请参见图1,图1是本申请实施例提供的一种视频处理方案的原理示意图。接下来,结合图1对本申请提供的图像处理方案的原理进行大致阐述:
如图1所示,视频客户端配置有两张显卡(集成显卡和独立显卡;或者,独立显卡和独立显卡),需要说明的是,本申请会优先指定CPU(Central Processing Unit,中央处理器)集成显卡处理解码任务,独立显卡处理渲染任务。如果视频客户端中未配置有集成显卡,则基于主显卡(默认工作显卡)处理渲染任务,另外一张显卡处理解码任务。由于集成显卡的渲染能力偏弱,因此本申请优先使用集成显卡执行解码任务可以提高视频处理的效率。如图1所示,显卡A用于负责解码任务(后续称为第一显卡),显卡B用于负责渲染任务(后续称为第二显卡)。①在接收到视频流数据(可包括一个或多个视频帧)时,显卡A从视频流数据中获取待处理的视频帧,基于显卡A启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;②显卡A将解码帧数据存储至解码输出缓存中,该解码输出缓存是基于双向链表的数据存储结构实现的,双向链表用于指示在同一时刻,允许解码线程和第二显卡启动的渲染线程中的任一个线程操作解码输出缓存;③显卡B从解码输出缓存(双向链表)中获取待渲染的解码帧数据,并基于渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。后续,可在视频客户端中输出渲染后的视频帧画面。
由此可见,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
接下来,对上述提及的视频处理方案中所涉及到的关键技术术语进行详细介绍:
二、视频处理方案涉及的相关技术术语:
本申请提供的主要涉及云技术(云游戏和云计算)和区块链技术,为了能够对更清楚地理解本申请实施例提供的技术方案,下面对本申请实施例涉及的技术术语进行相关介绍。
(1)云技术:
云技术(Cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络***的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台***进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的***后盾支撑,只能通过云计算来实现。
本申请的视频处理方案主要涉及云技术领域中的云游戏以及云计算技术,即可以将本申请的视频处理方案应用于诸如云游戏、游戏直播等实时视频流的应用场景中,在实时视频流的应用场景中,涉及到大量的云计算技术,因此,接下来分别对云游戏和云计算技术进行详细介绍:
①云游戏:
本申请提供的视频处理方案可以应用于云游戏场景。所谓云游戏(Cloud gaming)又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云端服务器中运行,并由云端服务器将游戏场景/游戏画面渲染为视频音频流(音视频流),通过网络传输给游戏客户端。游戏客户端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取游戏玩家输入的操作指令并发送给云端服务器的能力即可。
具体来说,在云游戏场景中,云端服务器将目标云游戏的游戏视频流推送至视频客户端时,视频客户端中的第一显卡可以从游戏视频流中获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据,并将解码帧数据存储至解码输出缓存中。接下来,第二显卡从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的游戏画面。后续,可以在视频客户端中输出渲染后游戏画面。由于采用双显卡的视频处理方式,可以保证云游戏场景中的网络卡顿、延时等问题,从而提升游戏体验。
②云计算:
本申请中,视频帧的解码过程(通过第一显卡的解码线程对待处理的视频帧进行解码处理)和渲染过程(通过渲染线程对待渲染的解码帧数据进行渲染处理)均涉及到大量的数据计算以及数据存储服务,上述过程需花费大量的计算机运营成本,因此本申请可基于云计算技术来实现相应的视频解码、以及画面渲染等过程。
其中,云计算(Cloud Computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用***能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取、按需使用、随时扩展、按使用付费。作为云计算的基础能力提供商,会建立云计算资源池(简称云平台),一般称为IaaS(Infrastructure as a Service,基础设施即服务)平台,在云计算资源池中部署多种类型的虚拟资源,供外部客户选择使用。
(2)区块链技术:
区块链是分布式数据存储、P2P(Peer to Peer,点对点)传输、共识机制、加密算法等计算机技术的新型应用模式。区块链本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块(也可称为区块),每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个数据块。区块链以密码学方式保证数据不可篡改和不可伪造。
本申请中,可以将视频处理过程中涉及到的解码帧数据、解码输出缓存以及渲染后的视频帧画面等数据发送至区块链进行存储,基于区块链的不可篡改、可追溯等特性可提高视频处理过程的安全性,避免视频数据的泄露。
特别需要说明的是,在本申请的后续具体实施方式中,涉及到对象信息等相关数据,当本申请以上实施例运用到具体产品或技术中时,需要获得对象许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
结合上述对本申请提供的视频处理方案和所涉及到的相关技术术语的描述,接下来,结合图2对本申请实施例提供的视频处理***的架构进行具体介绍。
请参见图2,图2是本申请实施例提供的一种视频处理***的架构示意图。该图像处理***的架构图中至少可以包括:终端设备集群、以及云端服务器204。其中,终端设备集群中包括:终端设备201、终端设备202、以及终端设备203等;云端服务器204与终端设备集群中的任一终端设备(例如终端设备201)之间可以基于有线或无线的方式建立通信连接,例如云端服务器204与终端设备201之间具体可以基于实时通讯协议进行数据(如视频流数据,可包括多个待处理的视频帧)传输。应当理解,终端设备集群中的任一终端设备中均运行有视频客户端,视频客户端用于对云端服务器204传输的视频流数据进行解码、渲染、以及播放处理,以在视频客户端中输出解码、渲染处理后的视频帧画面。其中,云端服务器204可以是存储有各种视频源数据的视频数据库,例如游戏视频、直播视频等等,本申请可根据不同的业务场景,终端设备从云端服务器204中下载或请求响应的视频流数据。需要说明的是,终端设备集群中的终端设备的数量用于示例,本申请实施例并不对终端设备的数量进行限定。
本申请所提及的终端设备201、终端设备202、以及终端设备203等可以是包括但不限于:手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(MID,mobile internetdevice)、智能语音交互设备、车载终端、路边设备、飞行器、可穿戴设备、智能家电、或者例如智能手表、智能手环、计步器等具有视频处理功能的可穿戴设备,等等。
本申请所提及的云端服务器204可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云端服务器,等等。
接下来,以图像处理***中的任一终端设备(例如终端设备201)为例,针对该终端设备201和云端服务器204之间的数据交互过程进行相应介绍:
以游戏直播场景为例,终端设备201在接收到目标游戏玩家输入的操作指令后,可将该操作指令发送至云端服务器204。云端服务器204在接收到针对目标云游戏的操作指令后,可以获取目标云游戏的游戏视频流,并将游戏视频流推送至终端设备201。本申请中,终端设备201需配置有第一显卡和第二显卡,终端设备201可以从游戏视频流中获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;然后,终端设备201可以将解码帧数据存储至解码输出缓存中,解码输出缓中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;最后,终端设备201从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面(游戏画面)。
在一种可能的实现方式中,可以将本申请实施例提供的视频处理***部署在区块链上,例如可以将终端设备集群中包括的每个终端设备均当成区块链的节点设备,共同构成区块链网络。因此本申请中的视频处理流程可以在区块链上执行,这样既可以保证视频处理流程的公平公正化,同时可以使得视频处理流程具备可追溯性,从而提升视频处理流程的安全性。
可以理解的是,本申请实施例描述的视频处理***是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术对象可知,随着***架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
基于前述对本申请视频处理方案和视频处理***的相关描述,接下来将结合附图对视频处理方案所涉及的具体实施例进行详细描述。
请参见图3,图3是本申请实施例所提供的一种视频处理方法的流程示意图。该方法应用于图2所示的视频处理***中的终端设备,终端设备中运行有视频客户端,视频客户端配置有第一显卡和第二显卡。其中,该视频处理方法主要包括但不限于如下步骤S301~S303:
S301:获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据。
本申请实施例中,待处理的视频帧可以是从一段视频流数据中获取得到的,具体地,待处理的视频帧可以为一段视频流数据中的任一帧,或者,待处理的视频帧也可以为一段视频流数据中的第一帧,又或者,待处理的视频帧还可以为一段视频流数据中的指定帧,本申请实施例对此不做具体限定。另外,视频帧可以包括但不限于:游戏场景中的游戏画面帧、直播场景中的直播画面帧、视频场景中的视频画面帧,等等。
在一种可能的实现方式中,检测视频客户端中是否配置有集成显卡,若有,则将集成显卡作为第一显卡,并将独立显卡作为第二显卡。若无,则将工作显卡作为第二显卡,以及将除工作显卡以外的另一张显卡作为第一显卡。通常情况下,当视频客户端配置有双显卡(即两张显卡)的情况下,这两张显卡分别可以为集成显卡-独立显卡、以及独立显卡-独立显卡,其中,由于集成显卡的渲染能力较弱,因此本申请实施例会优先判断视频客户端是否配置有集成显卡,若有,则将集成显卡作为第一显卡,另一张独立显卡作为第二显卡;当视频客户端中未配置有集成显卡时,则可以将主显卡(工作显卡)的独立显卡作为第二显卡,以及将剩下一张独立显卡作为第一显卡。基于这种方式,可以尽可能的保证各个显卡能够充分发挥各自的能力,提高视频处理的效率。
其中,第一显卡用于启动解码线程以执行解码任务,第二显卡用于启动渲染线程以执行渲染任务,具体地,第一显卡的解码线程可对待处理的视频帧进行解码处理,得到解码帧数据。其中,解码处理主要可以包括:实现视频帧格式的转换、以及视频信息的解读等操作。
S302:将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存。
具体地,将解码帧数据存储至解码输出缓存中是由第一显卡的解码线程执行的。其中,双向链表是指所包括的任一个节点均携带有双向的指针,例如,请参见图4,图4是本申请实施例提供的一种双向链表的结构示意图。如图4所示,该双向链表中的任一节点(如节点b)具备前项指针和后项指针,所谓前项指针是指指向前一个节点(节点a)的指针,所谓后项指针是指指向后一个节点(节点c)的指针。同理,其它节点a、节点c以及节点d均如此,各个节点之间构成一个双向链表。
在一种可能的实现方式中,可以生成初始状态下的双向链表。具体过程包括:创建链表头和链表尾,链表头用于存储存入到解码输出缓存中的第一个节点的指针,链表尾用于存储存入到解码输出缓存中最后一个节点的指针;基于创建的链表头和链表尾,生成初始状态下的双向链表;其中,初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。后续,将节点添加至初始状态下的双向链表后,即可生成包括有多个节点的完整的双向链表。其中,双向链表中的任一节点存储有:该节点对应的视频帧解码数据、该节点的前项指针、以及该节点的后项指针。
在一种可能的实现方式中,基于第一显卡启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据之后,还包括:首先,通过解码线程基于线程加锁的方式获取解码输出缓存的写入权限;然后,根据解码处理得到的解码帧数据获取目标节点,并将目标节点添加至初始状态下的双向链表中;最后,在确定目标节点被成功添加至双向链表中后,调用解码线程执行释放锁的操作。
其中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在解码输出缓存中位于目标节点的后一个节点。如图4所示,例如目标节点为节点b,则该目标节点的前项节点为节点a,该目标节点的后项节点为节点c;又如目标节点为节点c,则该目标节点的前项节点为节点b,该目标节点的后项节点为节点d。
另外,本申请实施例中允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存,是指:在同一时刻,允许解码线程或渲染线程中的任一个来操作解码输出缓存,也就是说,解码线程和渲染线程不能同时对解码输出缓存执行操作。具体地,本申请可以通过线程加锁的方式来实现允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存,所谓线程加锁可以包括:加锁位置,加锁位置代表了一旦其中某一线程(例如解码线程)获取锁后,其他线程(渲染线程)就会阻塞到此位置,当加锁的线程(解码线程)执行完毕释放锁后,其他线程(渲染线程)会根据阻塞时的位置继续向后执行。例如解码线程加锁LOCK,解码线程释放锁release。另外,解码线程操作解码输出缓存主要包括从解码输出缓存中写入解码帧数据,而解码帧数据是包装在节点中,因此解码线程用于向解码输出缓存(双向链表)中***节点;渲染线程操作解码输出缓存主要包括从解码输出缓存中读取解码帧数据以完成渲染操作,即渲染线程用于从解码输出缓存(双向链表)中读取节点中的解码帧数据,并对读取到的解码帧数据进行渲染操作。
S303:从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
应当理解,本申请实施例中的视频帧画面的画面内容具体可以根据业务场景的不同而不同,具体地,若待处理的视频帧为游戏场景中的游戏帧,则渲染后的视频帧画面可以包括游戏画面;若待处理的视频帧为直播场景中的直播帧,则渲染后的视频帧画面可以包括直播画面;若待处理的视频帧为视频场景中的图像帧,则渲染后的视频帧画面可以包括视频画面。
在一种可能的实现方式中,从双向链表中获取待渲染的解码帧数据,具体包括:首先,通过渲染线程查询双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取解码输出缓存的读取权限;然后,将查询得到的可用节点从双向链表中移除;最后,若确定可用节点已成功从双向链表中移除,则通过渲染线程执行释放锁的操作。其中,可用节点中存储的解码帧数据即为双向链表中获取到的待渲染的解码帧数据。后续,通过渲染线程对可用节点包括的解码帧数据进行渲染处理,以得到渲染后的视频帧画面。
在一种可能的实现方式中,判断第二显卡是否满足空闲条件,若满足,则调用第二显卡的渲染线程从双向链表中获取待渲染的解码帧数据并执行渲染操作;若不满足,则调用第一显卡从双向链表中获取待渲染的解码帧数据并执行渲染操作。其中,空闲条件可以包括第二显卡的渲染线程是否处于空闲状态,若是,则确定第二显卡满足空闲条件。通过这种方式,可以使得第二显卡处于工作状态下,若需要进行渲染处理,则可以基于第一显卡进行临时的渲染处理,以确保视频渲染的处理效率。
本申请实施例中,视频客户端中配置有第一显卡和第二显卡。首先,第一显卡可以获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;然后,可以将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存;最后,从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。由此可见,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
请参见图5,图5是本申请实施例提供的另一种视频处理方法的流程示意图。该方法应用于图2所示的视频处理***中的终端设备,终端设备中运行有视频客户端,视频客户端配置有第一显卡和第二显卡。其中,该视频处理方法主要包括但不限于如下步骤S501~S505:
S501:解码线程获取待处理的视频帧。
S502:通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据。
S503:解码线程将解码帧数据存储至解码输出缓存中。
本申请实施例中,解码线程在完成一个视频帧的解码后,会为该视频帧创建一个节点。此节点包含该视频帧的解码数据、用于指向上一个节点的前指针和用于指向下一个节点的后指针。将该节点放入解码输出缓存前,解码线程会通过加锁的方式获取解码输出缓存的操作权限。加锁成功后,待***节点的指向前一个节点的前指针指向链表头,指向后一个节点的后指针指向链表头指向的第一个节点,解码线程最后将链表头指向待***节点。这样,待***的节点就成了链表的第一个节点。如果此时链表尾指向的节点为空,说明这是链表的第一个节点,此时链表尾也会被设为指向此节点。节点***后,解码线程释放锁。
具体来说,请参见图6,图6是本申请实施例提供的一种解码线程的工作流程示意图。如图6所示,解码线程的工作流程主要包括如下步骤:
①获取视频数据流。
具体地,解码线程可以从云端服务器中接收视频数据流,其中,该视频数据流例如可以包括:游戏场景中的游戏视频流、直播场景中的直播视频流、视频场景中的音视频流等等,本申请实施例对视频数据流涉及到的具体场景并不作具体限定。可以理解的是,视频数据流可以理解为包括至少一个视频帧流媒体数据。
②判断是否接收到一个视频帧。
具体地,解码线程可以从视频数据流中获取一个视频帧作为待处理的视频帧,例如可以将视频数据流中的任一视频帧作为待处理的视频帧;又如可以将视频数据流中的第一帧作为待处理的视频帧;还如可以将视频数据流中的指定帧作为待处理的视频帧。若确定接收到待处理的视频帧,则触发执行步骤③;若未接收到待处理的视频帧,则触发执行步骤①。
③解码线程对待处理的视频帧进行解码处理。
④创建包含解码帧数据的目标节点。
其中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在述解码输出缓存中位于目标节点的后一个节点。
⑤加锁获取写入权限。
具体地,通过线程加锁的方式可以获取解码输出缓存的操作权限,其中,解码线程主要是用于向解码输出缓存写入解码后的数据(解码帧数据)。其中,线程加锁可以包括:加锁位置,加锁位置代表了一旦其中某一线程(例如解码线程)获取锁后,其他线程(渲染线程)就会阻塞到此位置,当加锁的线程(解码线程)执行完毕释放锁后,其他线程(渲染线程)会根据阻塞时的位置继续向后执行。例如解码线程加锁的方式具体可以包括线程加锁LOCK的方式。
⑥将目标节点添加至双向链表中。
在一种可能实现方式中,解码线程将目标节点添加至双向链表中,可以包括如下步骤:首先,将目标节点用于指向前项节点的前指针指向双向链表的链表头,并将目标节点用于指向后项节点的后指针指向链表头指向的第一个节点;然后,将链表头指向目标节点,以将目标节点添加至双向链表中;最后,若双向链表的链表尾指向的节点为空,则将链表尾指向目标节点。
请参见图7,图7是本申请实施例提供的一种向双向链表***节点的流程示意图。如图7所示,若待***的节点为节点e,则可以将节点e的前指针指向链表头,并将节点e的后指针指向指向链表头指向的第一个节点(节点a),最后,将链表头指向节点e,这样,就可以将节点e添加至双向链表中了,并且该节点e成为双向链表中的第一个节点。
⑦释放锁。
具体地,解码线程在确定已成功将目标节点添加至双向链表中后,可以执行释放锁的操作。
S504:渲染线程从双向链表中获取待渲染的解码帧数据。
S505:通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
本申请实施例中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存。其中,渲染线程在空闲时不断查询解码输出缓存中是否有待渲染的解码帧数据,做法为判断链表尾的指针指向是否为空。如果不为空,则表示解码输出缓存中有待渲染的解码帧数据,那么渲染线程会尝试加锁操作。加锁成功后渲染线程会将该节点从链表中移出。具体做法仅需将链表尾指向当前最后一个节点的前一个节点即可。有一个特殊情况是该节点是链表中唯一的节点,此时该节点指向前一个节点的指针指向链表头,这时渲染线程会将链表尾指向的节点设为空。移出操作完成后渲染线程释放锁,并开始渲染被移出的这个节点中的视频数据。渲染完成后渲染线程销毁该节点,并开始新一轮的缓存查询操作。
具体来说,请参见图8,图8是本申请实施例提供的一种渲染线程的工作流程示意图。如图8所示,渲染线程的工作流程主要包括如下步骤:
(1)渲染线程启动。
(2)判断是否有可用的节点数据。
具体地,渲染线程在空闲时不断查询解码输出缓存中是否有待渲染的视频数据,其中,此处所提及的空闲是为了保证第二显卡随时处于工作状态,即只要渲染线程处于空闲状态就触发渲染线程查询解码输出缓存中是不是存在待渲染的数据,若存在,则执行视频数据的渲染,渲染完之后又去解码输出缓存中查询,以此类推,通过这种方式可以保证渲染线程处于高强度的工作状态,从而提高视频处理的效率。
具体实现时,渲染线程判断是否有可用的节点数据可以包括:若双向链表的链表尾所指向的节点不为空,则确定双向链表中存在可用节点,且可用节点为双向链表中的最后一个节点,则触发执行步骤(3);若双向链表中不存在可用节点,则触发执行步骤(1)。
(3)加锁获取读取权限。
具体地,通过线程加锁的方式可以获取解码输出缓存的操作权限,其中,渲染线程主要是用于向解码输出缓存读取解码后的数据(解码帧数据)。其中,线程加锁可以包括:加锁位置,加锁位置代表了一旦其中某一线程(例如渲染线程)获取锁后,其他线程(解码线程)就会阻塞到此位置,当加锁的线程(渲染线程)执行完毕释放锁后,其他线程(解码线程)会根据阻塞时的位置继续向后执行。例如渲染线程加锁的方式具体可以包括线程加锁LOCK的方式。
(4)将最后一个节点移除双向链表。
具体实现时,通过渲染线程将最后一个节点移除双向链表具体可以包括:若双向链表中存在至少两个节点,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点,以将最后一个节点从双向链表中移除;或者,若可用节点为双向链表中的唯一节点,则将双向链表的链表尾的指针指向的节点设置为空,以将最后一个节点从双向链表中移除。
请参见图9,图9是本申请实施例提供的一种从双向链表移除节点的流程示意图。如图9所示,若待移除的节点为节点d,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点(节点c),这样,就可以将节点d从双向链表中移除了,并且该移除的该节点d为可用节点,可用节点中存储的解码帧数据即为待渲染的解码帧数据。可选的,若双向链表中只包括节点d,即节点d为双向链表中的唯一节点,则在移除节点d后,将链表尾指向的节点设为空。
(5)释放锁。
具体地,当确定可用节点从双向链表中成功移除后,则渲染线程执行释放锁的操作。
(6)渲染节点中的解码帧数据。
本申请中,视频帧若为游戏场景中的游戏帧,则渲染线程渲染节点中的解码帧数据的具体过程可以包括:获取解码帧数据所包括的游戏纹理数据,基于游戏纹理数据进行游戏画面的渲染,得到渲染后的游戏画面。其中,游戏纹理数据是指用于渲染游戏画面的数据,即用于对目标云游戏中的游戏内容进行渲染得到游戏画面的数据,该游戏纹理数据的数据格式可以包括二维数组、三维数组等,用于存储对应游戏画面的颜色、位置、背景环境等参数。其中,游戏内容可以包括场景内容和用户界面内容,场景内容是指游戏中的树木、道路、建筑等内容,用户界面内容是指游戏中可由用户操作的内容,例如游戏中的虚拟键盘、虚拟控件等等。请参见图10,图10是本申请实施例提供的一种游戏画面的场景示意图,在图10所示的游戏画面中,路灯(401)、交通牌(402)、草地(403)、房屋建筑(404)等是场景内容,“开始游戏”(405)、“退出游戏”(406)等虚拟控件是用户界面内容。另外,游戏画面是指可以在游戏客户端中显示的画面(例如图10所示的交通画面),游戏画面通常是由游戏场景画面和用户界面画面叠加得到的,游戏场景画面由场景内容渲染得到,用户界面画面由用户界面内容渲染得到。
(7)销毁节点。
具体地,渲染线程在完成一个节点中的解码帧数据的渲染后,即可接着从解码输出缓存中查询下一个节点,并执行下一个节点的数据渲染流程,以此类推,直至将解码输出缓存中的待渲染的解码帧数据完成渲染结束为止。
基于以上描述,应当理解的是,本申请提供的视频处理方案可适用于各种类型的云游戏场景中。请参见图11,图11是本申请实施例提供的一种云游戏的图像处理方法的场景示意图。如图11所示,在云游戏场景中,①用户可以在视频客户端(游戏客户端)中输入针对目标云游戏的游戏操作指令,例如游戏操作指令可以包括:旋转指令、跳跃指令、移动指令等。游戏客户端响应于该游戏操作指令后,向云端服务器发送该游戏操作指令。②云端服务器在接收到针对目标云游戏的游戏操作指令后,可以查询与目标云游戏相匹配的游戏视频流,并将游戏视频流(视频数据流)返回至游戏客户端。③游戏客户端配置有第一显卡和第二显卡,游戏客户端在接收到游戏视频流后,可以从游戏视频流中获取待处理的游戏帧,并通过第一显卡的解码线程对待处理的游戏帧进行解码处理,得到解码帧数据,并将该解码帧数据存储至数据存储结构为双向链表的解码输出缓存中。④第二显卡的渲染线程在空闲时间不断从双向链表中查询是否存在待渲染的游戏数据,若存在,则渲染线程从双向链表中获取待渲染的游戏数据(解码帧数据),并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的游戏画面,后续,在游戏客户端中输出相应的游戏画面。通过这种方式,针对任一帧游戏帧,即可基于上述方式完整解码、渲染等处理逻辑,最终在游戏客户端中呈现出完整的游戏画面。
本申请实施例中,在诸如云游戏、视频直播、视频会议等实时视频流播放的应用场景中,往往会要求视频帧内容从服务器端发出到本地(视频客户端、游戏客户端等)播放之间的延时低于用户可察觉的延时,这一点和应用的用户体验关系密切。当视频客户端的处理帧率低于视频流帧率时,客户端会积累大量得不到及时处理的视频帧,使应用无法正常工作。本申请实施例中,基于视频客户端配置有双显卡(第一显卡和第二显卡)的特性,充分利用视频客户端的双显卡资源,有助于提高视频客户端对视频数据流的处理速度,从而可以在较大程度上提升用户体验。具体地,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方案,相应地,下面提供了本申请实施例的装置,接下来,结合上述本申请实施例提供的视频处理方案,对本申请实施例的相关装置进行相应介绍。
请参见图12,图12是本申请实施例提供的一种视频处理装置的结构示意图。该视频处理装置1200可应用于前述实施例中的应用服务器。视频处理装置1200可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该视频处理装置1200为一个应用软件;该视频处理装置1200可以用于执行本申请实施例提供的视频处理方法中的相应步骤。其中,该视频处理装置1200包括:
获取单元1201,用于获取待处理的视频帧;
处理单元1202,用于通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
存储单元1203,用于将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
获取单元1201,还用于从双向链表中获取待渲染的解码帧数据;
处理单元1202,用于通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
在一种可能的实现方式中,处理单元1202还用于执行以下操作:
创建链表头和链表尾,链表头用于存储存入到解码输出缓存中的第一个节点的指针,链表尾用于存储存入到解码输出缓存中最后一个节点的指针;
基于创建的链表头和链表尾,生成初始状态下的双向链表;
其中,初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。
在一种可能的实现方式中,处理单元1202基于第一显卡启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据之后,还用于执行以下操作:
通过解码线程基于线程加锁的方式获取解码输出缓存的写入权限;
根据解码处理得到的解码帧数据获取目标节点,并将目标节点添加至所述初始状态下的双向链表中;
在确定目标节点被成功添加至双向链表中后,调用解码线程执行释放锁的操作。
在一种可能的实现方式中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在解码输出缓存中位于目标节点的后一个节点。
在一种可能的实现方式中,处理单元1202将目标节点添加至初始状态下的双向链表中,用于执行以下操作:
将目标节点用于指向前项节点的前指针指向双向链表的链表头,并将目标节点用于指向后项节点的后指针指向链表头指向的第一个节点;
将链表头指向目标节点,以将目标节点添加至双向链表中;
若双向链表的链表尾指向的节点为空,则将链表尾指向目标节点。
在一种可能的实现方式中,处理单元1202从双向链表中获取待渲染的解码帧数据,用于执行以下操作:
通过渲染线程查询双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取解码输出缓存的读取权限;
将查询得到的可用节点从双向链表中移除;
若确定可用节点已成功从双向链表中移除,则通过渲染线程执行释放锁的操作。
在一种可能的实现方式中,若双向链表的链表尾所指向的节点不为空,则确定双向链表中存在可用节点,且可用节点为双向链表中的最后一个节点;处理单元1202将查询得到的可用节点从双向链表中移除,用于执行以下操作:
若双向链表中存在至少两个节点,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点,以将最后一个节点从双向链表中移除;或者,
若可用节点为双向链表中的唯一节点,则将双向链表的链表尾的指针指向的节点设置为空,以将最后一个节点从双向链表中移除。
在一种可能的实现方式中,处理单元1202还用于执行以下操作:
检测视频客户端中是否配置有集成显卡,若有,则将集成显卡作为第一显卡,并将独立显卡作为第二显卡;
若无,则将工作显卡作为第二显卡,并将除工作显卡之外的显卡作为第一显卡。
在一种可能的实现方式中,处理单元1202还用于执行以下操作:
判断第二显卡是否满足空闲条件,若满足,则调用第二显卡的渲染线程从双向链表中获取待渲染的解码帧数据并执行渲染操作;
若不满足,则调用第一显卡的解码线程从双向链表中获取待渲染的解码帧数据并执行渲染操作。
本申请实施例中,视频客户端中配置有第一显卡和第二显卡。首先,第一显卡可以获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;然后,可以将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存;最后,从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。由此可见,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
请参见图13,图13是本申请实施例提供的一种计算机设备的结构示意图。该计算机设备1300用于执行前述方法实施例中视频客户端所执行的步骤,该计算机设备1300包括:一个或多个处理器1301;一个或多个输入设备1302,一个或多个输出设备1303和存储器1304。上述处理器1301、输入设备1302、输出设备1303和存储器1304通过总线1305连接。存储器1304用于存储计算机程序,所述计算机程序包括程序指令,处理器1301用于调用存储器1304存储的程序指令,执行以下操作:
获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
在一种可能的实现方式中,处理器1301还用于执行以下操作:
创建链表头和链表尾,链表头用于存储存入到解码输出缓存中的第一个节点的指针,链表尾用于存储存入到解码输出缓存中最后一个节点的指针;
基于创建的链表头和链表尾,生成初始状态下的双向链表;
其中,初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。
在一种可能的实现方式中,处理器1301基于第一显卡启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据之后,还用于执行以下操作:
通过解码线程基于线程加锁的方式获取解码输出缓存的写入权限;
根据解码处理得到的解码帧数据获取目标节点,并将目标节点添加至所述初始状态下的双向链表中;
在确定目标节点被成功添加至双向链表中后,调用解码线程执行释放锁的操作。
在一种可能的实现方式中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在解码输出缓存中位于目标节点的后一个节点。
在一种可能的实现方式中,处理器1301将目标节点添加至初始状态下的双向链表中,用于执行以下操作:
将目标节点用于指向前项节点的前指针指向双向链表的链表头,并将目标节点用于指向后项节点的后指针指向链表头指向的第一个节点;
将链表头指向目标节点,以将目标节点添加至双向链表中;
若双向链表的链表尾指向的节点为空,则将链表尾指向目标节点。
在一种可能的实现方式中,处理器1301从双向链表中获取待渲染的解码帧数据,用于执行以下操作:
通过渲染线程查询双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取解码输出缓存的读取权限;
将查询得到的可用节点从双向链表中移除;
若确定可用节点已成功从双向链表中移除,则通过渲染线程执行释放锁的操作。
在一种可能的实现方式中,若双向链表的链表尾所指向的节点不为空,则确定双向链表中存在可用节点,且可用节点为双向链表中的最后一个节点;处理器1301将查询得到的可用节点从双向链表中移除,用于执行以下操作:
若双向链表中存在至少两个节点,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点,以将最后一个节点从双向链表中移除;或者,
若可用节点为双向链表中的唯一节点,则将双向链表的链表尾的指针指向的节点设置为空,以将最后一个节点从双向链表中移除。
在一种可能的实现方式中,处理器1301还用于执行以下操作:
检测视频客户端中是否配置有集成显卡,若有,则将集成显卡作为第一显卡,并将独立显卡作为第二显卡;
若无,则将工作显卡作为第二显卡,并将除工作显卡之外的显卡作为第一显卡。
在一种可能的实现方式中,处理器1301还用于执行以下操作:
判断第二显卡是否满足空闲条件,若满足,则调用第二显卡的渲染线程从双向链表中获取待渲染的解码帧数据并执行渲染操作;
若不满足,则调用第一显卡的解码线程从双向链表中获取待渲染的解码帧数据并执行渲染操作。
本申请实施例中,基于视频客户端配置有双显卡(第一显卡和第二显卡)的特性,充分利用视频客户端的双显卡资源,有助于提高视频客户端对视频数据流的处理速度,从而可以在较大程度上提升用户体验。具体地,本申请将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。
此外,这里需要指出的是:本申请实施例还提供了一种计算机存储介质,且计算机存储介质中存储有计算机程序,且该计算机程序包括程序指令,当处理器执行上述程序指令时,能够执行前文所对应实施例中的方法,因此,这里将不再进行赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可以被部署在一个计算机设备上,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备可以执行前文所对应实施例中的方法,因此,这里将不再进行赘述。
本领域普通技术对象可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (12)
1.一种视频处理方法,其特征在于,应用于视频客户端,所述视频客户端配置有第一显卡和第二显卡;所述方法包括:
获取待处理的视频帧,并通过所述第一显卡的解码线程对所述待处理的视频帧进行解码处理,得到解码帧数据;
将所述解码帧数据存储至解码输出缓存中,所述解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许所述解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
从所述双向链表中获取待渲染的解码帧数据,并通过所述渲染线程对所述待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
创建链表头和链表尾,所述链表头用于存储存入到解码输出缓存中的第一个节点的指针,所述链表尾用于存储存入到解码输出缓存中最后一个节点的指针;
基于创建的链表头和链表尾,生成初始状态下的双向链表;
其中,所述初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。
3.如权利要求2所述的方法,其特征在于,所述通过所述第一显卡的解码线程对所述待处理的视频帧进行解码处理,得到解码帧数据之后,还包括:
通过解码线程基于线程加锁的方式获取所述解码输出缓存的写入权限;
根据解码处理得到的所述解码帧数据获取目标节点,并将所述目标节点添加至所述初始状态下的双向链表中;
在确定所述目标节点被成功添加至所述双向链表中后,调用所述解码线程执行释放锁的操作。
4.如权利要求3所述的方法,其特征在于,所述目标节点用于存储:所述解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;所述前项节点是指在所述解码输出缓存中位于所述目标节点的前一个节点,所述后项节点是指在所述解码输出缓存中位于所述目标节点的后一个节点。
5.如权利要求4所述的方法,其特征在于,所述将所述目标节点添加至所述初始状态下的双向链表中,包括:
将所述目标节点用于指向前项节点的前指针指向双向链表的链表头,并将所述目标节点用于指向后项节点的后指针指向所述链表头指向的第一个节点;
将所述链表头指向所述目标节点,以将所述目标节点添加至双向链表中;
若所述双向链表的链表尾指向的节点为空,则将所述链表尾指向所述目标节点。
6.如权利要求1所述的方法,其特征在于,所述从所述双向链表中获取待渲染的解码帧数据,并通过所述渲染线程对所述待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面,包括:
通过渲染线程查询所述双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取所述解码输出缓存的读取权限,对所述可用节点包括的解码帧数据进行渲染处理,以显示所述可用节点包括的解码帧数据对应的视频帧;
将查询得到的所述可用节点从所述双向链表中移除;
若确定所述可用节点已成功从所述双向链表中移除,则通过所述渲染线程执行释放锁的操作。
7.如权利要求6所述的方法,其特征在于,若所述双向链表的链表尾所指向的节点不为空,则确定所述双向链表中存在可用节点,且所述可用节点为所述双向链表中的最后一个节点;所述将查询得到的所述可用节点从所述双向链表中移除,包括:
若所述双向链表中存在至少两个节点,则将所述双向链表的链表尾的指针指向所述双向链表中最后一个节点的前一个节点,以将所述最后一个节点从所述双向链表中移除;或者,
若所述可用节点为所述双向链表中的唯一节点,则将所述双向链表的链表尾的指针指向的节点设置为空,以将所述最后一个节点从所述双向链表中移除。
8.如权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
检测所述视频客户端中是否配置有集成显卡,若有,则将所述集成显卡作为第一显卡,并将独立显卡作为第二显卡;
若无,则将工作显卡作为第二显卡,并将除所述工作显卡之外的显卡作为第一显卡。
9.如权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
判断第二显卡是否满足空闲条件,若满足,则调用所述第二显卡的渲染线程从所述双向链表中获取待渲染的解码帧数据并执行渲染操作;
若不满足,则调用第一显卡从所述双向链表中获取待渲染的解码帧数据并执行渲染操作。
10.一种视频处理装置,其特征在于,应用于视频客户端,所述视频客户端配置有第一显卡和第二显卡;所述装置包括:
获取单元,用于获取待处理的视频帧;
处理单元,用于通过所述第一显卡的解码线程对所述待处理的视频帧进行解码处理,得到解码帧数据;
存储单元,用于将所述解码帧数据存储至解码输出缓存中,所述解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许所述解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
所述获取单元,还用于从所述双向链表中获取待渲染的解码帧数据;
所述处理单元,用于通过所述渲染线程对所述待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
11.一种计算机设备,其特征在于,包括:
处理器,适于执行计算机程序;
计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被所述处理器执行时,实现如权利要求1-9任一项所述的视频处理方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-9任一项所述的视频处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211741956.8A CN115955590A (zh) | 2022-12-30 | 2022-12-30 | 视频处理方法、装置、计算机设备、介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211741956.8A CN115955590A (zh) | 2022-12-30 | 2022-12-30 | 视频处理方法、装置、计算机设备、介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115955590A true CN115955590A (zh) | 2023-04-11 |
Family
ID=87287465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211741956.8A Pending CN115955590A (zh) | 2022-12-30 | 2022-12-30 | 视频处理方法、装置、计算机设备、介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115955590A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117076226A (zh) * | 2023-10-16 | 2023-11-17 | 北京麟卓信息科技有限公司 | 一种基于图像纹理差异的图形***渲染正确性验证方法 |
CN117475013A (zh) * | 2023-12-21 | 2024-01-30 | 杭州海康威视数字技术股份有限公司 | 一种计算机设备和视频数据处理方法 |
-
2022
- 2022-12-30 CN CN202211741956.8A patent/CN115955590A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117076226A (zh) * | 2023-10-16 | 2023-11-17 | 北京麟卓信息科技有限公司 | 一种基于图像纹理差异的图形***渲染正确性验证方法 |
CN117076226B (zh) * | 2023-10-16 | 2023-12-29 | 北京麟卓信息科技有限公司 | 一种基于图像纹理差异的图形***渲染正确性验证方法 |
CN117475013A (zh) * | 2023-12-21 | 2024-01-30 | 杭州海康威视数字技术股份有限公司 | 一种计算机设备和视频数据处理方法 |
CN117475013B (zh) * | 2023-12-21 | 2024-05-31 | 杭州海康威视数字技术股份有限公司 | 一种计算机设备和视频数据处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4122568A1 (en) | Data processing method and device and storage medium | |
CN111767503B (zh) | 一种游戏数据处理方法、装置、计算机及可读存储介质 | |
CN115955590A (zh) | 视频处理方法、装置、计算机设备、介质 | |
CN113457160B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN113423018A (zh) | 一种游戏数据处理方法、装置及存储介质 | |
WO2022257699A1 (zh) | 图像画面显示方法、装置、设备、存储介质及程序产品 | |
CN111654720B (zh) | 视频编码方法、装置、设备及可读存储介质 | |
US20230096900A1 (en) | Cloud gaming processing method, apparatus, and device, and storage medium | |
CN109309842B (zh) | 直播数据处理方法和装置、计算机设备和存储介质 | |
CN112843676B (zh) | 数据处理方法、装置、终端、服务器及存储介质 | |
CN114329298B (zh) | 一种页面呈现方法、装置、电子设备及存储介质 | |
US20230405455A1 (en) | Method and apparatus for processing cloud gaming resource data, computer device, and storage medium | |
KR102110195B1 (ko) | 응용 프로그램의 스트리밍 영상 제공 장치 및 방법 | |
WO2024066828A1 (zh) | 一种数据处理方法、装置、设备、计算机可读存储介质及计算机程序产品 | |
CN115065684B (zh) | 数据处理方法、装置、设备以及介质 | |
CN112023402B (zh) | 游戏数据处理方法、装置、设备以及介质 | |
CN116244231A (zh) | 一种数据传输方法、装置、***、电子设备及存储介质 | |
CN116966546A (zh) | 图像处理方法、装置、介质、设备和程序产品 | |
CN112861091A (zh) | 登录方法、装置、电子设备和存储介质 | |
EP2861313B1 (en) | Processing system, information processing apparatus, control method, program and storage medium | |
WO2024139724A1 (zh) | 图像处理方法、装置、计算机设备、计算机可读存储介质及计算机程序产品 | |
CN112245906A (zh) | 数据同步方法、装置、电子设备及存储介质 | |
WO2023020270A1 (zh) | 解码处理方法、装置、计算机设备及存储介质 | |
CN115065866B (zh) | 一种视频生成方法、装置、设备及存储介质 | |
US9674637B2 (en) | Object marshaling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40084593 Country of ref document: HK |