掌桥专利:专业的专利平台
掌桥专利
首页

视频流解码方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 12:11:54


视频流解码方法、装置、计算机设备和存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种视频流解码方法、装置、计算机设备和存储介质。

背景技术

随着科学技术的发展,计算机视觉(ComputerVision,CV)在智慧零售领域有着广泛的应用,例如,在商场场景中,计算机设备可通过计算机视觉技术对摄像头采集的视频流进行图像解码,得到图像解码结果,并通过图像解码结果进行人脸人体检测,以获得人脸人体轨迹、进入商场的客流量等。

目前,可通过GPU对视频流进行图像解码处理,针对每一个待解码对象,GPU均需申请相应的显存,通过申请的显存对待解码对象进行解码处理,并在解码成功时释放所申请的显存。当待解码对象的规模增加时,就需频繁申请显存和频繁释放显存,然而频繁申请显存和频繁释放显存将造成性能下降,从而降低视频流解码效率。

发明内容

基于此,有必要针对上述技术问题,提供一种能够提升视频流解码效率的视频流解码方法、装置、计算机设备和存储介质。

一种视频流解码方法,所述方法包括:

获取待处理视频流,对所述待处理视频流进行预解码处理得到视频数据包;

基于图像处理器的第一负载信息和中央处理器的第二负载信息,从所述图像处理器和所述中央处理器中确定目标处理器;

通过所述目标处理器获取所述视频数据包的数据大小;

在预申请的显存池中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间;

通过所述目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

一种视频流解码装置,所述装置包括:

负载信息确定模块,用于获取待处理视频流,对所述待处理视频流进行预解码处理得到视频数据包;基于图像处理器的第一负载信息和中央处理器的第二负载信息,从所述图像处理器和所述中央处理器中确定目标处理器。

显存空间确定模块,用于通过所述目标处理器获取所述视频数据包的数据大小;在预申请的显存池中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间。

图像解码模块,用于通过所述目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

在一个实施例中,所述负载信息确定模块还包括预解码模块,用于获取待处理视频流;确定采集所述待处理视频流的视频采集设备的设备信息;当在设备信息库中查询到所述设备信息时,基于与所述设备信息相关联的取流解码线程,对所述待处理视频流进行预解码处理,得到视频数据包。

在一个实施例中,所述预解码模块还用于当在所述设备信息库未查询到所述设备信息时,创建与所述设备信息相对应的取流解码线程;将所述设备信息和创建的取流解码线程相关联,并将所述设备信息存储至所述设备信息库; 通过创建的取流解码线程对所述待处理视频流进行预解码处理,得到视频数据包。

在一个实施例中,所述负载信息确定模块还包括处理器确定模块,用于确定图像处理器的第一负载信息和中央处理器的第二负载信息;当基于所述第一负载信息确定所述图像处理器的负载小于或等于第一负载阈值时,确定所述图像处理器为目标处理器;当基于所述第一负载信息确定所述图像处理器的负载大于第一负载阈值、且基于所述第二负载信息确定所述中央处理器的负载小于或等于第二负载阈值时,确定所述中央处理器为目标处理器;当基于所述第一负载信息确定所述图像处理器的负载大于第一负载阈值、且基于所述第二负载信息确定所述中央处理器的负载大于第二负载阈值时,确定所述图像处理器为目标处理器。

在一个实施例中,所述空闲显存空间包括空闲显存块,所述显存空间确定模块显存链确定模块,用于获取预申请的显存池的显存池信息;所述预申请的显存池中包括至少一条的显存链;每条显存链包括多个显存块大小一致的显存块,各显存链对应于不同的显存块大小;根据所述显存池信息,从所述显存池中筛选出显存块大小与所述数据大小相匹配的目标显存链;根据所述目标显存链中各显存块的占用状态,确定所述目标显存链中的空闲显存块,并将所述视频数据包缓存至所述空闲显存块。

在一个实施例中,所述显存池信息包括显存块大小与显存链之间的对应关系,所述显存链确定模块还用于根据所述显存块大小与显存链之间的对应关系,从所述显存池中筛选出大于或等于所述数据大小的候选显存链;确定每个所述候选显存链各自对应的显存块大小与所述数据大小之间的差异,并将具有最小差异的候选显存链作为目标显存链。

在一个实施例中,所述显存链确定模块还用于确定所述目标显存链中各显存块的占用状态;所述占用状态包括已占用状态和未占用状态;根据各所述显存块的占用状态,将所述目标显存链中的其中一个处于未占用状态的显存块作为目标空闲显存块;将所述视频数据包缓存至所述目标空闲显存块,并将所述目标空闲显存块的占用状态从未占用状态更新为已占用状态。

在一个实施例中,所述显存池包括显存池块,所述显存空间确定模块包括显池块确定模块,用于确定所述显存池块的显存池块信息;所述显存池块信息包括空间使用信息;根据所述空间使用信息,确定所述显存池块中是否存在大于或等于所述数据大小的空闲显存空间;当所述显存池块中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间。

在一个实施例中,所述空间使用信息包括显存池块尾地址和已使用空间尾地址;所述显池块确定模块,用于将所述显存池块尾地址减去所述已使用空间尾地址,得到第一地址差;当所述第一地址差大于或等于所述数据大小时,确定所述显存池块中存在大于或等于所述数据大小的空闲显存空间;在将所述视频数据包缓存至所述空闲显存空间之后,基于缓存所述视频数据包所占用的显存空间,更新所述显存池块的已使用空间尾地址。

在一个实施例中,所述空间使用信息包括显存池块首地址和已使用空间首地址;所述显池块确定模块还用于将所述已使用空间首地址减去所述显存池块首地址,得到第二地址差;当所述第二地址差大于或等于所述数据大小时,确定所述显存池块中存在大于或等于所述数据大小的空闲显存空间;在将所述视频数据包缓存至所述显存池块的空闲显存空间之后,基于缓存所述视频数据包所占用的显存空间,更新所述已使用空间首地址。

在一个实施例中,所述空间使用信息包括已使用空间首地址和已使用空间尾地址;所述显池块确定模块还用于将所述已使用空间首地址减去所述已使用空间尾地址,得到第三地址差;当所述第三地址差大于或等于所述数据大小时,确定所述显存池块中存在大于或等于所述数据大小的空闲显存空间;在将所述视频数据包缓存至所述显存池块的空闲显存空间之后,基于缓存所述视频数据包所占用的显存空间,更新所述已使用空间首地址和所述已使用空间尾地址中的至少一种。

在一个实施例中,所述待处理视频流为对目标场景进行监控的其中一个视频采集设备所采集的视频流,所述预解码处理和所述图像解码处理,均通过与采集所述视频流的图像采集设备相对应的取流解码线程执行,所述视频流解码装置还用于,当获取得到目标任务时,确定与所述目标任务相对应的目标视频采集设备的目标设备信息;确定与所述目标设备信息相关联的目标取流解码线程;获取基于所述目标取流解码线程输出的图像解码结果,并根据获取的图像解码结果执行所述目标任务;其中,所述目标任务至少包括人脸检测任务、动作识别任务、人体检测任务、轨迹识别任务、及目标场地的客流信息确定任务中的一种。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取待处理视频流,对所述待处理视频流进行预解码处理得到视频数据包;

基于图像处理器的第一负载信息和中央处理器的第二负载信息,从所述图像处理器和所述中央处理器中确定目标处理器;

通过所述目标处理器获取所述视频数据包的数据大小;

在预申请的显存池中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间;

通过所述目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

获取待处理视频流,对所述待处理视频流进行预解码处理得到视频数据包;

基于图像处理器的第一负载信息和中央处理器的第二负载信息,从所述图像处理器和所述中央处理器中确定目标处理器;

通过所述目标处理器获取所述视频数据包的数据大小;

在预申请的显存池中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间;

通过所述目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上以下步骤:获取待处理视频流,对所述待处理视频流进行预解码处理得到视频数据包;基于图像处理器的第一负载信息和中央处理器的第二负载信息,从所述图像处理器和所述中央处理器中确定目标处理器;通过所述目标处理器获取所述视频数据包的数据大小;在预申请的显存池中存在大于或等于所述数据大小的空闲显存空间时,将所述视频数据包缓存至所述空闲显存空间;通过所述目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

上述视频流解码方法、装置、计算机设备、存储介质和计算机程序,通过获取待处理视频流,可对待处理视频流进行预解码处理,得到视频数据包。通过图像处理器的第一负载信息和中央处理器的第二负载信息,确定目标处理器,从而不仅实现了对图像解码任务的动态调度,而且提升了处理器的资源利用率。通过判断预申请的显存池中是否存在大于或等于数据大小的空闲显存空间,可在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,从而目标处理器可对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。由于可预先申请显存池,并在图像解码处理完成时清空所占用显存空间中的内容,而并不会释放对应的显存空间,后续在需要时又可直接使用。相比于传统的针对每一个待解码对象,均需申请相应的显存以及在解码完成时释放所申请的显存,本申请可显著地减少显存申请和释放的次数,从而提升视频流的解码效率。

附图说明

图1为一个实施例中视频流解码方法的应用环境图;

图2为一个实施例中视频流解码方法的流程示意图;

图3为一个实施例中解码任务动态调度的示意图;

图4为一个实施例中多个图像解码任务并行处理的示意图;

图5为一个实施例中图像解码的解码过程;

图6为一个实施例中显存池的示意图;

图7为一个实施例中视频数据缓存的流程示意图;

图8为另一个实施例中显存池的示意图;

图9为一个实施例中空间使用信息的示意图;

图10为一个实施例中视频数据缓存的流程示意图;

图11为具体一个实施例中视频流解码方法的流程示意图;

图12为另一个具体实施例中视频流解码方法的流程示意图;

图13为一个实施例中视频流解码装置的结构框图;

图14为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为一个实施例中描述视频流解码的应用环境图。参照图1,该视频流解码方法应用于视频流解码系统100。该视频流解码系统100包括视频采集设备102、终端104和服务器106。其中,终端104和服务器106均可单独用于执行本申请实施例中提供的视频流解码方法。终端104和服务器106也可协同用于执行本申请实施例中提供的视频流解码方法。以服务器106单独用于执行本申请实施例中提供的视频流解码方法为例进行说明,视频采集设备102用于采集目标区域内的视频流,例如采集商场入口处的视频流,并将采集得到的视频流发送至服务器104,以使服务器104对视频流进行解码处理,得到图像解码结果。

其中,视频采集设备102可以为枪机摄像机、球机摄像机等,并且可以部署多个。终端104可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、车载终端、智能电视等,但并不局限于此。服务器106可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

还需要说明的是,本申请还涉及计算机视觉技术,计算机视觉技术(ComputerVision, CV)计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取信息的人工智能系统。计算机视觉技术通常包括图像处理、图像识别、图像语义理解、图像检索、OCR、视频处理、视频语义理解、视频内容/行为识别、三维物体重建、3D技术、虚拟现实、增强现实、同步定位与地图构建、自动驾驶、智慧交通等技术,还包括常见的人脸识别、指纹识别等生物特征识别技术。

容易理解的,如本申请所公开的视频流解码方法,其中获取得到的视频流和图像解码结果均可保存于区块链上。

应该理解的是,本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。除非上下文另外清楚地指出,否则单数形式“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。

在一个实施例中,如图2所示,提供了一种视频流解码方法,以该方法应用于图1中的计算机设备为例进行说明,该计算机设备可以是上述图1中的终端104或服务器106。参照图2,该视频流解码方法具体包括以下步骤:

步骤S202,获取待处理视频流,对待处理视频流进行预解码处理得到视频数据包。

具体地,本申请实施例可应用于智慧零售领域中,例如,可在大型商场或者超市的目标场地中部署多个视频采集设备,通过多个视频采集设备实时拍摄顾客的行为信息,得到待处理视频流,从而后续可对视频流进行图像解码处理,得到图像解码结果,并基于图像解码结果进行如动作识别、人体轨迹识别的目标任务处理。其中,目标场地是需要进行视频采集的地理区域,可以是用一个虚拟的围栏在商场、影院或旅游景点等目标场所围出的一个虚拟地理边界,也可以是由商场、影院或办公大楼等目标场所的外立面围出的一个实体地理边界。

进一步地,视频采集设备可将采集得到的视频流发送至计算机设备,以使计算机设备对待处理视频流进行预解码处理,得到视频数据包,或者,计算机设备也可实时从视频采集设备中拉取待处理视频流。从而当获取得到待处理视频流时,计算机设备可将待处理视频流转换为压缩包,并对压缩包进行音视频分离处理,提取压缩包中的视频数据,得到视频数据包。其中,视频数据包指的是包括多张图像帧的文件包。容易理解地,视频数据包中的图像帧是从待处理视频流中提取的图像帧。

在一个实施例中,计算机设备可通过多媒体流处理工具来进行预解码处理,例如,可通过FFMpeg(Fast Forward Mpeg,一种多媒体流处理工具)进行预解码处理。计算机设备通过FFMpeg获取待处理视频流,通过FFMpeg进行解复用,以提取出待处理视频流中的视频数据,得到FFMpeg视频文件,并将FFMpeg视频文件进行格式转换,得到H264格式的视频数据,也即得到视频数据包。其中,H264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的高度压缩数字视频编解码器标准。

在一个实施例中,由于预解码处理的计算复杂度不高,进行预解码处理时所耗费的计算机资源较低,因此,可由计算机设备中的CPU(central processing unit,中央处理器)进行预解码处理。

步骤S204,基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器。

其中,图像处理器和中央处理器可以为GPU(Graphics Processing Unit,

图形处理器)和CPU(Central Processing Unit / Processor,中央处理器)。GPU又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器的正确显示,是连接显示器和个人电脑主板的重要元件,也是"人机对话"的重要设备之一。显卡作为电脑主机里的一个重要组成部分,承担输出显示图形的任务。CPU是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。电脑中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。

具体地,当获取得到视频数据包时,计算机设备还可通过图像处理器或者中央处理器对视频数据包进行图像解码处理,以实现视频流的解码。计算机设备可分别获取图像处理器的第一负载信息和中央处理器的第二负载信息,并根据第一负载信息和第二负载信息,从图像处理器和中央处理器中确定目标处理器,从而后续可通过目标处理器对视频数据包进行图像解码处理。其中,负载信息用于反映处理器的负载情况,负载指的是处理器在一定时间内同时处理的任务数量,例如,在一定时间内,处理器可以同时处理的任务数量可以为10个,实际处理的任务数量可以为4个,则当前处理器的负载可以为0.4。容易理解地,负载信息反映了处理器的处理繁忙状态,负载信息越高,则说明处理器越繁忙,相应地,负载信息越低,则说明处理器越空闲。

在一个实施例中,基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器,包括:确定图像处理器的第一负载信息和中央处理器的第二负载信息;当基于第一负载信息确定图像处理器的负载小于或等于第一负载阈值时,确定图像处理器为目标处理器;当基于第一负载信息确定图像处理器的负载大于第一负载阈值、且基于第二负载信息确定中央处理器的负载小于或等于第二负载阈值时,确定中央处理器为目标处理器;当基于第一负载信息确定图像处理器的负载大于第一负载阈值、且基于第二负载信息确定中央处理器的负载大于第二负载阈值时,确定图像处理器为目标处理器。

具体地,计算机设备获取预先设置的第一负载阈值和第二负载阈值。其中,第一负载阈值和第二负载阈值可根据需求进行自由设置,比如,可根据图像处理器的性能下降分界点设置第一负载信息,以及根据中央处理器的性能下降分界点设置第二负载信息。例如,当图像处理器的负载超过80%时,图像处理器的性能急剧下降,此时,即可将第一负载阈值设置为80%,同理,当中央处理器的负载超过85%时,中央处理器的性能急剧下降,此时,也可将第二负载阈值设置为85%。

进一步地,当获取得到第一负载信息时,计算机设备可将第一负载信息与第一负载阈值进行对比,以判断图像处理器的第一负载信息是否超过第一负载阈值。当基于第一负载信息确定图像处理器的负载小于或等于第一负载阈值时,可认为此时图像处理器的性能良好,能够较快地对视频数据包进行解码处理,从而计算机设备将图像处理器作为目标处理器,以使后续可通过目标处理器对视频数据包进行解码处理。当基于第一负载信息确定图像处理器的负载大于第一负载阈值时,可认为此时图像处理器的性能已急剧下降,已不具备足够的计算资源对视频数据包进行解码处理,从而计算机设备进一步判断中央处理器是否具有足够的计算资源对视频数据包进行解码处理。

当图像处理器的负载大于第一负载阈值时,计算机设备基于第二负载信息判断中央处理器的负载是否超出第二负载阈值,并在第二负载信息小于或等于第二负载阈值时,认为此时中央处理器的性能良好,能够较快地对视频数据包进行解码处理,从而此时计算机设备将中央处理器作为目标处理器。相应地,当第二负载信息大于第二负载阈值时,可认为此时中央处理器的性能已急剧下降,已不具备足够的计算资源对视频数据包进行解码处理,从而计算机设备将图像处理器为目标处理器。

在其中一个实施例中,计算机设备可通过图像处理器的使用率,确定第一负载信息,例如,将图像处理器的使用率作为第一负载信息。相应地,计算机设备也可通过中央处理器的使用率,确定第二负载信息。计算机设备还可通过统计时段内,处于可运行状态的进程数量和不可中断状态的进程数量,确定中央处理器的第二负载信息。

在其中一个实施例中,参考图3,S302当获取得到待处理视频流时,计算机设备可生成视频流处理任务,并将视频流处理任务划分为预解码任务和图像解码任务。S304,计算机设备可通过FFMpeg执行预解码任务,得到视频数据包。S306,计算机设备判断第一负载信息是否超出第一负载阈值。S308,当第一负载信息小于或等于第一负载阈值时,计算机设备通过图像处理单元执行图像解码任务。S310,当第一负载信息超出第一负载阈值时,计算机设备判断第二负载信息是否超出第二负载阈值。S312,当二负载信息小于或等于第二负载阈值时,计算机设备通过中央处理器执行图像解码任务。S314,当第二负载信息大于第二负载阈值时,计算机设备通过图像处理器执行图像解码任务。图3示出了一个实施例中解码任务动态调度的示意图。

在其中一个实施例中,参考图4,当需要同时对多个待处理视频流进行解码时,计算机设备可针对每个待处理视频流均生成相应的视频流处理任务,并对每个视频流处理任务均进行划分,得到预解码任务和图像解码任务。其中,预解码任务包括取流任务、格式转换任务。通过取流任务,计算机设备可获取待处理视频流。通过格式转换任务,计算机设备可从待处理视频流中提取出视频数据,并将提取出的视频数据转换为预设格式,得到视频数据包。

进一步地,计算机设备根据第一负载信息和第二负载信息,对每个待处理视频流各自对应的图像解码任务进行动态调度,从而基于动态调度的图像处理器或中央处理器执行相应的图像解码任务。图4示出了一个实施例中多个图像解码任务并行处理的示意图。

上述实施例中,现有技术中一般是通过GPU完成图像解码操作,因此在待处理视频流的数量增加的情况下,对GPU负载带来极大的挑战。而本申请实施例通过图像处理器的第一负载信息和中央处理器的第二负载信息,对图像解码任务进行动态调度,可以减少图像处理器和中央处理器中的其中一个处理器过载,而另一个处理器空闲的概率,从而大大提升了处理器资源的利用率。

步骤S206,通过目标处理器获取视频数据包的数据大小。

具体地,当获取得到视频数据包时,计算机设备可通过目标处理器确定视频数据包的数据大小。例如,计算机设备可判断该视频数据包中所包含的图像帧的数量,并将单张图像帧的大小乘以图像帧的数量,得到视频数据包的数据大小。又例如计算机设备可通过视频数据包在缓存中的占用空间大小,确定视频数据包的数据大小。

步骤S208,在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间。

其中,显存池指的是预先申请的显存空间的集合,计算机设备可预先申请至少一个的显存空间,并将所申请的显存空间的集合作为显存池。显存空间指的是显存中的存储空间,例如,显存空间具体可以为显存块。显存指的是显卡内存,也被称作帧缓存,其用于存储显卡芯片处理过或者即将提取的渲染数据,如同计算机的内存一样,显存可用于存储待处理的图形数据。

具体地,目标处理器可判断预申请的显存池中是否存在空闲显存空间,当预申请的显存池中存在空闲显存空间时,目标处理器确定空闲显存空间的空间大小,并判断视频数据包的大小是否超出空闲显存空间的空间大小。其中,空闲显存空间指的是未存储有数据的空间。当视频数据包的大小小于或等于空闲显存空间的空间大小时,可认为当前显存池中具备足够的空闲空间用以缓存视频数据包,此时目标处理器将视频数据包缓存至显存池中的空闲显存空间。当视频数据包的大小大于空闲显存空间的空间大小时,可认为当前显存池中不具备足够的空闲空间用以缓存视频数据包,此时目标处理器根据数据大小从显存中申请除显存池块之外的额外显存空间,并将视频数据包缓存至额外显存空间。

在其中一个实施例中,计算机设备可通过系统的调用,从操作系统中申请至少一个显存块,并将申请的全部显存块作为显存池。

步骤S210,通过目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

具体地,当将视频数据包缓存至显存空间时,目标处理器可对缓存的视频数据包进行图像解码处理,得到图像解码结果,并将图像解码结果进行缓存,以备后续目标任务的处理。当得到与视频数据包相对应的图像解码结果时,目标处理器可清空该视频数据包所占用的显存空间中的内容,从而后续目标处理器可将其他视频数据包存储至该显存空间中。比如,当得到与A视频数据包相对应的图像解码结果时,目标处理器可清空A视频数据包所占用的显存空间,以使目标处理器可将待处理的B视频数据包存储至该显存空间,从而实现显存空间的复用。

在其中一个实施例中,参考图5,当获取得到H264格式的视频数据包时,目标处理器可将H264格式的视频数据包缓存至空闲显存空间,并对缓存至空闲显存空间的视频数据包进行图像解码计算,得到包含有YUV格式的图像帧的帧数据包。其中,YUV(也称作YCrCb)是一种颜色编码方法,Y代表亮度分量、U和V均代表色度分量。进一步地,目标处理器清空该视频数据包所占用的显存空间中的内容,并确定相应帧数据包的大小,得到包大小。目标处理器确定预申请的显存池中是否存在大于或等于包大小的空闲显存空间,并在预申请的显存池中存在大于或等于包大小的空闲显存空间时,将包含有YUV格式的图像帧的帧数据包缓存至空闲显存空间,从而目标处理器可对缓存至空闲显存空间的帧数据包进行处理,得到图像解码结果,并清空该帧数据包所占用的显存空间中的内容。当预申请的显存池中不存在大于或等于包大小的空闲显存空间时,目标处理器根据包大小从显存中申请除显存池块之外的额外显存空间,并将该帧数据包缓存至额外显存空间。图5示出了一个实施例中图像解码的解码过程。

在一个实施例中,上述视频流解码方法还包括:当获取得到待处理视频流时,确定采集待处理视频流的视频采集设备的目标设备信息;当设备信息库中存在目标设备信息时,确定与目标设备信息相关联的目标取流解线程;通过目标取流解码线程对待处理视频流进行预解码处理得到视频数据包;基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器;通过目标处理器获取视频数据包的数据大小;在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间;通过目标处理器,并基于取流解码线程对缓存的视频数据包进行图像解码处理,得到图像解码结果,并将图像解码结果对应存储;在图像解码处理完成时清空所占用显存空间中的内容;其中,存储的图像解码结果用于执行相应的目标任务。通过将图像解码结果对应存储,使得后续在接收到目标处理任务时,可确定与该目标处理任务相关联的视频采集设备,并在存在与该视频采集设备相关联的目标取流解码线程时,从多个图像解码结果中筛选出目标取流解码线程输出的目标图像解码结果,如此,便实现了图像解码结果的复用,不仅减少了重复解码的概率,而且减少了有限解码资源被无需解码占用的概率。

上述视频流解码方法中,通过获取待处理视频流,可对待处理视频流进行预解码处理,得到视频数据包。通过图像处理器的第一负载信息和中央处理器的第二负载信息,确定目标处理器,从而不仅实现了对图像解码任务的动态调度,而且提升了处理器的资源利用率。通过判断预申请的显存池中是否存在大于或等于数据大小的空闲显存空间,可在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,从而目标处理器可对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。由于可预先申请显存池,并在图像解码处理完成时清空所占用显存空间中的内容,而并不会释放对应的显存空间,后续在需要时又可直接使用。相比于传统的针对每一个待解码对象,均需申请相应的显存以及在解码完成时释放所申请的显存,本申请可显著地减少显存申请和释放的次数,从而提升视频流的解码效率。

在一个实施例中,获取待处理视频流,对待处理视频流进行预解码处理得到视频数据包,包括:获取待处理视频流;确定采集待处理视频流的视频采集设备的设备信息;当在设备信息库中查询到设备信息时,基于与设备信息相关联的取流解码线程,对待处理视频流进行预解码处理,得到视频数据包。

具体地,计算机设备可获取多路视频采集设备所采集的视频流,并分别对多路视频流进行解码处理。当获取得到当前待处理视频流时,计算机设备确定采集当前待处理视频流的当前视频采集设备的设备信息。其中,设备信息可包括设备标识、设备规格等。设备标识指的是唯一标识一个视频采集设备的信息,例如,设备标识具体可以为设备ID。计算机设备查询设备信息库中是否包括采集当前待处理视频流的视频采集设备的设备信息,并在确定预设信息库中包括该设备信息时,认为已经创建针对当前视频采集设备的取流解码线程,此时计算机设备获取与该设备信息相关联的取流解码线程,并通过所获取的取流解码线程对当前待处理视频流进行预解码处理,得到视频数据包。

本实施例中,由于在设备信息库中查询到相应设备信息时,基于与设备信息相关联的取流解码线程,对所述待处理视频流进行预解码处理,相较于针对每一个待处理视频流均重新创建一个取流解码线程,本申请实施例可大大减少取流解码线程的创建次数,从而提升解码性能。此外,将视频采集设备与取流解码线程进行一一对应,使得同一路视频采集设备采集的视频流仅被一个取流解码线程进行处理,从而减少了同一路视频采集设备采集的视频流被多个取流解码线程进行重复解码的概率,进而提升了解码资源的利用率。

在一个实施例中,视频流解码方法还包括取流解码线程的创建过程,取流解码线程的创建过程包括:当在设备信息库未查询到设备信息时,创建与设备信息相对应的取流解码线程;将设备信息和创建的取流解码线程相关联,并将设备信息存储至设备信息库;通过创建的取流解码线程对待处理视频流进行预解码处理,得到视频数据包。

具体地,当在设备信息库中未查询到采集当前待处理视频流的当前视频采集设备的设备信息时,可以认为还未创建与该设备信息相关联的取流解码线程,此时计算机设备创建与该设备信息相关联的取流解码线程,基于所创建的取流解码线程对当前待处理视频流进行预解码处理,得到视频数据包。进一步地,计算机设备将当前视频采集设备的设备信息存储于设备信息库中,并建立该设备信息与创建的取流解码线程之间的关联关系。

本实施例中,在设备信息库中不存在相应的设备信息时,通过创建取流解码线程,可基于所创建的取流解码线程对待处理视频流进行预解码处理。

在一个实施例中,空闲显存空间包括空闲显存块,在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,包括:获取预申请的显存池的显存池信息;预申请的显存池中包括至少一条的显存链;每条显存链包括多个显存块大小一致的显存块,各显存链对应于不同的显存块大小;根据显存池信息,从显存池中筛选出显存块大小与数据大小相匹配的目标显存链;根据目标显存链中各显存块的占用状态,确定目标显存链中的空闲显存块,并将视频数据包缓存至空闲显存块。

具体地,计算机设备可预先创建显存池,其中,显存池中包括至少一条的显存链,每条显存链均包括多个显存块大小一致的显存块,每个显存链所包括的显存块大小不一致,也即不同显存链所对应的显存块大小不一致。当需要对视频数据包进行图像解码时,目标处理器可获取预先创建的显存池的显存池信息,并根据显存池信息确定显存池中的每个显存链各自对应的显存块大小。进一步地,目标处理器根据视频数据包的数据大小和各显存链各自对应的显存块大小,从显存池中筛选出目标显存链,并根据目标显存链中各显存块的占用状态,从目标显存链中筛选出空闲显存块,从而目标处理器可将视频数据包缓存至空闲显存块中。

在其中一个实施例中,计算机设备可预先创建多个具有不同显存块大小的显存块,并根据显存块大小对所创建的显存块进行聚类处理,得到至少一个聚类簇,其中,每个聚类簇所包括的显存块大小相同。对于至少一个聚类簇中的每个聚类簇,计算机设备均根据当前聚类簇所包括的显存块生成相应的显存链。参考图6,计算机设备可创建多个1KB大小的显存块、16KB大小的显存块、32KB大小的显存块以及64KB大小的显存块,并将由多个1KB大小的显存块构成的集合,作为与1KB大小相对应的显存链;将由多个16KB大小的显存块构成的集合,作为与16KB大小相对应的显存链;同理,将由多个64KB大小的显存块构成的集合,作为与64KB大小相对应的显存链。

在其中一个实施例中,可通过键值对(key-value)的形式存储显存池的显存池信息,其中,键(key)为相应显存链所对应的显存块大小,值(value)为显存链所包括的显存块的显存块标识。例如,参考图6,该显存池所对应的显存池信息可以为[1KB-[a,b,c,d],16KB-[e,f,g],32KB-[h,i,j,k],64KB-[m,n]],其中,1KB-[a,b,c,d]中的1KB代表该显存链所对应的显存块大小为1KB,[a,b,c,d]代表与1KB相对应的显存链中包括a、b、c、d四个显存块,其中,a、b、c、d分别为相应显存块的显存块标识。容易理解地,a、b、c、d四个显存块的显存块大小均为1KB。图6示出了一个实施例中显存池的示意图。

本实施例中,通过获取显存池的显存池信息,可以基于所获取的显存池信息快速确定相匹配的空闲显存块,从而基于快速确定的空闲显存块提升视频解码的解码速率。

在一个实施例中,显存池信息包括显存块大小与显存链之间的对应关系,根据显存池信息,从显存池中筛选出显存块大小与数据大小相匹配的目标显存链,包括:根据显存块大小与显存链之间的对应关系,从显存池中筛选出大于或等于数据大小的候选显存链;确定每个候选显存链各自对应的显存块大小与数据大小之间的差异,并将具有最小差异的候选显存链作为目标显存链。

具体地,显存池信息包括显存块大小与显存链之间的对应关系,例如,当显存池信息包括1KB-[a,b,c,d]时,其中,1KB即为显存块大小,[a,b,c,d]即为与该显存块大小相对应的显存链。当获取得到显存池信息时,目标处理器根据显存池信息中的显存块大小与显存链之间的对应关系,确定每个显存链各自对应的显存块大小。由于需要将视频数据包完整地缓存至显存链中的某个显存块中,因此,目标处理器根据各显存链各自对应的显存块大小,从显存池中筛选出大于或等于数据大小的候选显存链。容易理解地,筛选出的候选显存链所包含的显存块大小大于或等于数据大小。

进一步地,为了尽可能地节约显存资源,目标处理器计算每个显存链各自对应的显存块大小与数据大小之间的差异,并将具有最小差异的候选显存链作为目标显存链。例如,如图6所示,在视频数据包的数据大小为16KB时,目标处理器将对应于16KB的显存链作为目标显存链。

本实施例中,通过将具有最小差异的候选显存链作为目标显存链,使得后续可将视频数据包缓存至目标显存链所包括的显存块中,也即实现将视频数据包缓存至最为匹配的显存块中,如此,便提升了显存资源的利用率。

在一个实施例中,根据目标显存链中各显存块的占用状态,确定目标显存链中的空闲显存块,并将视频数据包缓存至空闲显存块,包括:确定目标显存链中各显存块的占用状态;占用状态包括已占用状态和未占用状态;根据各显存块的占用状态,将目标显存链中的其中一个处于未占用状态的显存块作为目标空闲显存块;将视频数据包缓存至目标空闲显存块,并将目标空闲显存块的占用状态从未占用状态更新为已占用状态。

具体地,为了确定各显存块的使用情况,可为显存链中的每个显存块均设置一个占用状态。其中,占用状态指的是用以表征显存块使用情况的信息,占用状态包括已占用状态和未占用状态,当显存块处于已占用状态时,可以认为该显存块已被占用,其已存储有视频数据;当显存块处于未占用状态时,可以认为该显存块还未被占用,其未存储有视频数据。

当获取得到目标显存链时,目标处理器确定目标显存链中各显存块的占用状态,并将目标显存链中的其中一个处于未占用状态的显存块作为目标空闲显存块,将视频数据包缓存至目标空闲显存块。与此同时,目标处理器将目标空闲显存块的占用状态从未占用状态更新为已占用状态。

在其中一个实施例中,可通过键值对(key-value)的形式设置显存块的占用状态。其中,键(key)可以为显存块标识,值(value)可为与该显存块标识相对应的占用状态。

在其中一个实施例中,参考图7,S702当需要对待处理视频流进行图像解码处理时,目标处理器可获取显存池信息,并根据显存池信息确定各显存链各自对应的显存块大小。S704目标处理器获取数据大小,S706并判断数据大小是否超出最大的显存块大小,S708在数据大小未超出最大显存块大小时,可以认为显存池中存在可以存储完整视频数据包的显存块,此时目标处理器遍历显存池,得到候选显存链。S710在数据大小超出最大的显存块大小时,可以认为显存池中不存在可以完整存储视频数据包的显存块,此时目标处理器根据数据大小申请额外显存块,并将视频数据包缓存至额外显存块中。S712当视频数据包处理完毕时,目标处理器可清空额外显存块中的内容,并释放额外显存块。

S714当获取得到候选显存链时,目标处理器判断候选显存链所包括的显存块是否均为已占用状态。S716当候选显存链中存在处于未占用状态的显存块时,目标处理器从候选显存链中筛选出包括有处于未占用状态的显存块的可用显存链,并计算各可用显存链所对应的显存块大小与数据大小之间的差异,将具有最小差异的可用显存链作为目标显存链,将目标显存链中的一个处于未占用状态的显存块作为目标空闲显存块,将视频数据包缓存至目标空闲显存块。S718当对视频数据包处理完毕时,目标处理器可清空目标空闲显存块中的视频数据包,并将目标空闲显存块的占用状态从已占用状态更新为未占用状态,从而实现显存块的复用。S720当候选显存链中不存在处于未占用状态的显存块时,目标处理器根据数据大小申请额外显存块,并将视频数据包缓存至额外显存块中。S722当视频数据包处理完毕时,目标处理器可清空额外显存块中的内容,并释放额外显存块。图7示出了一个实施例中视频数据缓存的流程示意图。

上述实施例中,通过设置占用状态,可以根据所设置的占用状态快速确定可用的目标空闲显存块,从而基于快速确定的目标空闲显存块提升视频数据的解码效率。此外,通过占用状态的更新,可以实现显存块的复用,从而减少了显存块频繁申请释放所带来的性能下降的概率。

在一个实施例中,显存池包括显存池块,在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,包括:确定显存池块的显存池块信息;显存池块信息包括空间使用信息;根据空间使用信息,确定显存池块中是否存在大于或等于数据大小的空闲显存空间;当显存池块中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间。

具体地,计算机设备可预先申请一个指定大小的显存块,并将该显存块作为显存池块存放于显存池中。也即,显存池中包括一个指定大小的显存池块,该显存池块的显存块大小可以根据需求自由设置。当需要对视频数据包进行图像解码处理时,目标处理器可获取显存池的显存池信息,并根据空间使用信息,判断显存池块中是否存在大于或等于数据大小的空闲显存空间。其中,显存池信息包括空间使用信息,空间使用信息指的是表征显存池块的存储空间使用情况的信息。空闲显存空间指的是未被占用的显存池块中的存储空间,比如,当显存池块为一个128KB的显存块时,空间使用信息可以为显存池块已被占用20%,剩余80%未被占,从而目标处理器可以确定显存池块中128KB*0.8的存储空间未被占用。

当根据空间使用信息确定显存池块中存在大于或等于数据大小的空闲显存空间时,目标处理器将视频数据包存储至空闲显存空间中。

在其中一个实施例中,参考图8,由于需要将多个数据缓存包缓存至同一显存池块中,因此,可预先申请一个大块的显存块,并将所申请的大块的显存块作为显存池块存放于显存池中。图8示出了一个实施例中显存池的示意图。

上述实施例中,通过预先创建显存池块,可以将视频数据包缓存至显存池块的空闲显存空间中,从而可对缓存至空闲显存空间中的视频数据包进行图像解码处理。

在一个实施例中,空间使用信息包括显存池块尾地址和已使用空间尾地址;根据空间使用信息,确定显存池块中是否存在大于或等于数据大小的空闲显存空间,包括:将显存池块尾地址减去已使用空间尾地址,得到第一地址差;当第一地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;上述视频流解码方法还包括:在将视频数据包缓存至空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新显存池块的已使用空间尾地址。

其中,空间使用信息还包括显存池块尾地址和已使用空间尾地址,其中,显存池块尾地址指的是显存池块的尾地址,已使用空间尾地址指的是显存池块中已占用的空间的尾地址。计算机设备可通过显存池块尾指针指向显存池块尾地址,可通过已使用空间尾指针指向已使用空间尾地址,例如,参考图9,E指针即为指向显存池块尾地址的显存池块尾指针,M指针即为指向已使用空间尾地址的已使用空间尾指针。图9示出了一个实施例中空间使用信息的示意图。

具体地,当获取得到空间使用信息时,目标处理器从空间使用信息中提取出显存池块尾地址和已使用空间尾地址,并将显存池块尾地址减去已使用空间尾地址,得到第一地址差。当第一地址差大于或等于数据大小时,则可以认为显存池块中存在大于或等于数据大小的空闲显存空间,此时目标处理器从显存池块尾地址起,将将数据缓存包缓存至空闲显存空间,并基于缓存视频数据包所占用的显存空间,更新显存池块的已使用空间尾地址。

比如,当显存池块如图9中的情况1时,也即当显存池块为空时,目标处理器可将E指针所指向的地址减去M指针所指向的地址,得到第一地址差,并在第一地址差大于或等于数据大小时,以M指针所指向的地址为起点,对视频数据包进行数据的存储,从而得到如图9中的情况2。

同理,当显存池块如图9中的情况2时,目标处理器也可将E指针所指向的地址减去M指针所指向的地址,得到第一地址差,并在第一地址差大于或等于数据大小时,以M指针所指向的地址为起点,对视频数据包进行数据的存储,也即将视频数据包存储至第二存储空间中,从而得到如图9中的情况3。

本实施例中,通过将显存池块尾地址减去已使用空间尾地址,可以得到第一地址差,从而可基于第一地址差准确得知显存池块中是否存在大于或等于数据大小的空闲显存空间。

在一个实施例中,空间使用信息包括显存池块首地址和已使用空间首地址;根据空间使用信息,确定显存池块中是否存在大于或等于数据大小的空闲显存空间,包括:将已使用空间首地址减去显存池块首地址,得到第二地址差;当第二地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;上述视频流解码方法还包括:在将视频数据包缓存至显存池块的空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址。

其中,空间使用信息还包括显存池块首地址和已使用空间首地址,其中,显存池块首地址指的是显存池块的首地址,已使用空间首地址指的是显存池块中已占用的空间的首地址。计算机设备可通过显存池块首指针指向显存池块首地址,可通过已使用空间首指针指向已使用空间首地址,例如,参考图9,H指针即为指向显存池块首地址的显存池块首指针,F指针即为指向已使用空间首地址的已使用空间首指针。

具体地,当获取得到空间使用信息时,目标处理器可从空间使用信息中提取出已使用空间首地址和显存池块首地址,并将已使用空间首地址减去显存池块首地址,得到第二地址差。目标处理器判断第二地址差是否超出视频数据包的数据大小,并在第二地址差大于或等于数据大小时,认为显存池块中存在大于或等于数据大小的空闲显存空间,此时目标处理器将视频数据包缓存至空闲显存空间中,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址。

比如,当显存池块如图9中的情况3时,目标处理器可在清空显存池块的第一存储空间时,修改F指针,从而得到如图9中的情况4。当需要将视频数据包缓存至情况4中的显存池块时,目标处理器可将F指针所指向的已使用空间首地址减去H指针所指向的显存池块首地址,得到第二地址差,并在第二地址差大于或等于数据大小时,以F指针所指向的已使用空间首地址为终点,对视频数据包进行缓存,也即将视频数据包缓存至第一存储空间中,并在缓存成功时,修改F指针,形成图9中的情况5。

本实施例中,通过将已使用空间首地址减去显存池块首地址,可以得到第二地址差,从而在第二地址差大于或等于数据大小的空闲显存空间,将视频数据包缓存至空闲显存空间中,如此,便提升了显存池块的空间使用率。

在一个实施例中,空间使用信息包括已使用空间首地址和已使用空间尾地址;根据空间使用信息,确定显存池块中是否存在大于或等于数据大小的空闲显存空间,包括:将已使用空间首地址减去已使用空间尾地址,得到第三地址差;当第三地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;上述视频流解码方法还包括:在将视频数据包缓存至显存池块的空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址和已使用空间尾地址中的至少一种。

具体地,当获取得到空间使用信息时,目标处理器可从空间使用信息中提取出已使用空间首地址和已使用空间尾地址,并将已使用空间首地址减去已使用空间尾地址,得到第三地址差。目标处理器判断第三地址差是否超出视频数据包的数据大小,并在第三地址差大于或等于数据大小时,认为显存池块中存在大于或等于数据大小的空闲显存空间,此时目标处理器将视频数据包缓存至空闲显存空间中,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址和已使用空间尾地址中的至少一种。

比如,当需要将视频数据包缓存至情况6中的显存池块时,目标处理器可将F指针所指向的已使用空间首地址减去M指针所指向的已使用空间尾地址,得到第三地址差,并在第三地址差大于或等于数据大小时,以F指针所指向的已使用空间首地址为终点,对视频数据包进行缓存,或者,以M指针所指向的已使用空间尾地址为起点,对视频数据包进行缓存。当以F指针所指向的已使用空间首地址为终点,对视频数据包进行缓存时,目标处理器根据缓存视频数据包所占用的显存空间,更新已使用空间首地址;当以M指针所指向的已使用空间尾地址为起点,对视频数据包进行缓存时,目标处理器根据缓存视频数据包所占用的显存空间,更新已使用空间尾地址。

在其中一个实时例中,参考图10,S1002当需要对当前视频数据包进行图像解码处理时,目标处理器获取显存池信息,S1004并获取当前视频数据包的数据大小。S1006目标处理器从显存池信息中提取池显存池块的显存块大小,并判断数据大小是否超出显存块大小。S1008当数据大小超出显存块大小时,目标处理器申请额外显存块,并将当前视频数据包缓存至额外显存块。S1010在当前视频数据包处理完毕时,目标处理器释放额外显存块。S1012当数据大小小于或等于显存块大小时,目标处理器确定显存池块中的空闲显存空间,并判断空闲显存的空间大小是否超出数据大小。S1014当空闲显存的空间大小大于或等于数据大小时,目标处理器将当前视频数据包缓存至空闲显存空间,并更新显存池块的空间使用信息。S1016当确定当前视频数据包处理完毕时,目标处理器释放当前视频数据包所占用的显存空间,并更新显存池块的空间使用信息。S1018当空闲显存的空间大小小于数据大小时,目标处理器对当前视频数据包进行限流等待处理,S1020并在等待超时时,申请额外显存块,将当前视频数据包缓存至额外显存块中。图10示出了一个实施例中视频数据缓存的流程示意图。

通过设置显存池块,并根据显存池块的占用情况,动态更新空间使用信息,可基于动态更新的空间使用情况将多个视频数据包进行连续空间的存储,从而提升了显存池块的空间资源利用率,减少了碎片化空间的出现概率。

在一个实施例中,待处理视频流为对目标场景进行监控的其中一个图像采集设备所采集的视频流,预解码处理和图像解码处理,均通过与采集视频流的视频采集设备相对应的取流解码线程执行,上述视频流解码方法还包括:当获取得到目标任务时,确定与目标任务相对应的目标视频采集设备的目标设备信息;确定与目标设备信息相关联的目标取流解码线程;获取基于目标取流解码线程输出的图像解码结果,并根据获取的图像解码结果执行目标任务;其中,目标任务至少包括人脸检测任务、动作识别任务、人体检测任务、轨迹识别任务、及目标场地的客流信息确定任务中的一种。

具体地,在智慧零售场景中,当获取得到目标任务时,例如当获取得到人脸检测任务或者动作识别任务时,计算机设备可根据目标任务与视频采集设备之间的对应关系,确定与该目标任务相对应的目标视频采集设备,并获取目标视频采集设备的目标设备信息。例如,当需要对A视频采集设备所采集的视频流进行人脸识别时,计算机设备在获取得到人脸检测任务时,可将A视频采集设备作为目标视频采集设备,并确定A视频采集设备的设备信息。

进一步地,计算机设备判断设备信息库中是否存在目标设备信息,并在设备信息库中存在目标设备信息时,根据设备信息与取流解码线程之间的对应关系,确定与该目标设备信息相关联的目标取流解码线程。计算机设备获取目标取流解码线程所输出的图像解码结果,并根据所获取的图像解码结果执行目标任务。例如,当目标任务为人脸检测任务时,计算机设备可根据图像解码结果对相应视频流中的人脸进行识别,从而得到人脸识别结果;当目标任务为动作识别任务时,计算机设备可根据图像解码结果对相应视频流中的人体动作进行识别,从而得到动作识别结果。

在其中一个实施例中,当需要对目标商场中的顾客运动轨迹进行识别时,计算机设备可生成轨迹识别任务,并将部署于目标商场中的视频采集设备作为目标视频采集设备。计算机设备确定每个目标视频采集设备各自对应的目标取流解码线程,根据各目标取流解码线程所出输出的图像解码结果,对目标商场内的顾客运动轨迹进行识别,得到轨迹识别结果。其中,目标取流解码线程输出图像解码结果的过程,具体可采用如步骤S202至步骤S210所描述的实施例。

在其中一个实施例中,当需要对目标商场中的客流量信息进行统计时,计算机设备可生成客流信息确定任务,并将部署于目标商场的场门处的视频采集设备作为目标视频采集设备。计算机设备确定与目标视频采集设备相关联的目标取流解码线程所输出的图像解码结果,并根据图像解码结果,对统计时段内进出目标商场的人流量进行统计,从而得到目标商场的客流量信息。

在其中一个实施例中,当获取得到当前取流解码线程输出的图像解码结果时,计算机设备可确定需要基于当前取流解码线程的图像解码结果进行任务处理的至少一个目标任务,并将当前取流解码线程输出的图像解码结果发送至用以执行目标任务的服务器中,以实现图像解码结果的复用。

在现有技术中,当多个待执行的目标任务均需使用同一视频采集设备所采集的视频流时,多个待执行的目标任务均会获取该视频采集设备所采集的视频流,并对所获取的视频流进行解码处理,如此,便导致了重复取流,以及重复解码处理,从而造成了解码资源的浪费。上述实施例中,通过对相同的视频采集设备所采集的视频流进行一次解码处理,以及将同一路视频采集设备所对应的图像解码结果进行复用,可以降低解码资源浪费概率。

本申请还提供一种应用场景,该应用场景应用上述的视频流解码方法。具体地,该视频流解码方法在该应用场景的应用如下:

在刷脸支付场景中,当用户需要进行刷脸支付时,可通过部署于刷脸支付设备中的视频采集设备进行人脸视频的采集,得到人脸视频,并将人脸视频发送值后台服务器。后台服务器确定与该刷脸支付设备相关联的目标取流解码线程,并通过目标取流解码线程对人脸视频进行解码处理,得到图像解码结果。后台服务器根据图像解码结果对人脸视频中的用户身份进行识别,并根据身份识别结果进行支付处理。

本申请还另外提供一种应用场景,该应用场景应用上述的视频流解码方法。具体地,该视频流解码方法在该应用场景的应用如下:

在监考场景中,当需要对考场中的考生进行动作识别时,可通过部署于考场中的视频采集设备进行视频采集,得到视频流,并将视频流发送至后台服务器,以使后台服务器确定与部署于考场中的视频采集设备相关联的目标取流解码线程,并通过目标取流解码线程对视频流进行解码处理,得到图像解码结果。后台服务器根据图像解码结果对考场中的考生进行动作识别,从而在考生做出不合规动作时,及时将告警信息下发至监考人员。

上述应用场景仅为示意性的说明,可以理解,本申请各实施例所提供的业务相关数据上报方法的应用不局限于上述场景。

在一个具体的实施例中,如图11所示,本申请提供的视频流解码方法包括以下步骤:

S1102,获取待处理视频流,并确定采集待处理视频流的视频采集设备的设备信息。

S1104,当在设备信息库中查询到设备信息时,基于与设备信息相关联的取流解码线程,对待处理视频流进行预解码处理,得到视频数据包。

S1106,基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器。

S1108,通过目标处理器获取视频数据包的数据大小,并获取预申请的显存池的显存池信息,预申请的显存池中包括至少一条的显存链,每条显存链包括多个显存块大小一致的显存块,各显存链对应于不同的显存块大小。

S1110,根据显存块大小与显存链之间的对应关系,从显存池中筛选出大于或等于数据大小的候选显存链。

S1112,确定每个候选显存链各自对应的显存块大小与数据大小之间的差异,并将具有最小差异的候选显存链作为目标显存链。

S1114,确定目标显存链中各显存块的占用状态,并根据各显存块的占用状态,将目标显存链中的其中一个处于未占用状态的显存块作为目标空闲显存块;占用状态包括已占用状态和未占用状态。

S1116,将视频数据包缓存至目标空闲显存块,并将目标空闲显存块的占用状态从未占用状态更新为已占用状态。

S1118,通过目标处理器对缓存的视频数据包进行图像解码处理,得到图像解码结果,并在图像解码处理完成时清空所占用显存空间中的内容。

S1120,当获取得到目标任务时,确定与目标任务相对应的目标视频采集设备的目标设备信息,并确定与目标设备信息相关联的目标取流解码线程。

S1122,获取基于目标取流解码线程输出的图像解码结果,,根据获取的图像解码结果执行目标任务;其中,目标任务至少包括人脸检测任务、动作识别任务、人体检测任务、轨迹识别任务、及目标场地的客流信息确定任务中的一种。

上述视频流解码方法,通过获取待处理视频流,可对待处理视频流进行预解码处理,得到视频数据包。通过确定图像处理器的第一负载信息和中央处理器的第二负载信息,可基于第一负载信息和第二负载信息确定目标处理器,从而不仅实现了对图像解码任务的动态调度,而且提升了处理器的资源利用率。通过判断预申请的显存池中是否存在大于或等于数据大小的空闲显存空间,可在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,从而目标处理器可对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。由于可预先申请显存池,并在图像解码处理完成时清空所占用显存空间中的内容,相比于传统的针对每一个待解码对象,均需申请相应的显存以及在解码完成时释放所申请的显存,本申请可减少显存申请和释放的次数,从而提升视频流的解码效率。

在一个具体的实施例中,如图12所示,本申请提供的视频流解码方法包括以下步骤:

S1202,获取待处理视频流,对待处理视频流进行预解码处理,得到视频数据包。

S1204,基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器,并通过目标处理器获取视频数据包的数据大小。

S1206,确定显存池块的显存池块信息;显存池块信息包括空间使用信息,空间使用信息包括显存池块尾地址、已使用空间尾地址、显存池块首地址和已使用空间首地址。

S1208,将显存池块尾地址减去已使用空间尾地址,得到第一地址差,将已使用空间首地址减去显存池块首地址,得到第二地址差,并将已使用空间首地址减去已使用空间尾地址,得到第三地址差。

S1210,当第一地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间。

S1212,当第二地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间。

S1214,当第三地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间。

S1216,当显存池块中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间,并更新已使用空间首地址和已使用空间尾地址中的至少一种。

S1218,通过目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

应该理解的是,虽然图2、图11-图12的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图11-图12中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图13所示,提供了一种视频流解码装置1300,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:负载信息确定模块1302、显存空间确定模块1304和图像解码模块1306,其中:

负载信息确定模块1302,用于获取待处理视频流,对待处理视频流进行预解码处理得到视频数据包;基于图像处理器的第一负载信息和中央处理器的第二负载信息,从图像处理器和中央处理器中确定目标处理器。

显存空间确定模块1304,用于通过目标处理器获取视频数据包的数据大小;在预申请的显存池中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间。

图像解码模块1306,用于通过目标处理器对缓存的视频数据包进行图像解码处理,并在图像解码处理完成时清空所占用显存空间中的内容。

在一个实施例中,负载信息确定模块1302还包括预解码模块1321,用于获取待处理视频流;确定采集待处理视频流的视频采集设备的设备信息;当在设备信息库中查询到设备信息时,基于与设备信息相关联的取流解码线程,对待处理视频流进行预解码处理,得到视频数据包。

在一个实施例中,预解码模块1321还用于当在设备信息库未查询到设备信息时,创建与设备信息相对应的取流解码线程;将设备信息和创建的取流解码线程相关联,并将设备信息存储至设备信息库; 通过创建的取流解码线程对待处理视频流进行预解码处理,得到视频数据包。

在一个实施例中,负载信息确定模块1302还包括处理器确定模块1322,用于确定图像处理器的第一负载信息和中央处理器的第二负载信息;当基于第一负载信息确定图像处理器的负载小于或等于第一负载阈值时,确定图像处理器为目标处理器;当基于第一负载信息确定图像处理器的负载大于第一负载阈值、且基于第二负载信息确定中央处理器的负载小于或等于第二负载阈值时,确定中央处理器为目标处理器;当基于第一负载信息确定图像处理器的负载大于第一负载阈值、且基于第二负载信息确定中央处理器的负载大于第二负载阈值时,确定图像处理器为目标处理器。

在一个实施例中,空闲显存空间包括空闲显存块,显存空间确定模块1304包括显存链确定模块1341,用于获取预申请的显存池的显存池信息;预申请的显存池中包括至少一条的显存链;每条显存链包括多个显存块大小一致的显存块,各显存链对应于不同的显存块大小;根据显存池信息,从显存池中筛选出显存块大小与数据大小相匹配的目标显存链;根据目标显存链中各显存块的占用状态,确定目标显存链中的空闲显存块,并将视频数据包缓存至空闲显存块。

在一个实施例中,显存池信息包括显存块大小与显存链之间的对应关系,显存链确定模块1341还用于根据显存块大小与显存链之间的对应关系,从显存池中筛选出大于或等于数据大小的候选显存链;确定每个候选显存链各自对应的显存块大小与数据大小之间的差异,并将具有最小差异的候选显存链作为目标显存链。

在一个实施例中,显存链确定模块1341还用于确定目标显存链中各显存块的占用状态;占用状态包括已占用状态和未占用状态;根据各显存块的占用状态,将目标显存链中的其中一个处于未占用状态的显存块作为目标空闲显存块;将视频数据包缓存至目标空闲显存块,并将目标空闲显存块的占用状态从未占用状态更新为已占用状态。

在一个实施例中,显存池包括显存池块,显存空间确定模块1304包括显池块确定模块1342,用于确定显存池块的显存池块信息;显存池块信息包括空间使用信息;根据空间使用信息,确定显存池块中是否存在大于或等于数据大小的空闲显存空间;当显存池块中存在大于或等于数据大小的空闲显存空间时,将视频数据包缓存至空闲显存空间。

在一个实施例中,空间使用信息包括显存池块尾地址和已使用空间尾地址;显池块确定模块1342还用于将显存池块尾地址减去已使用空间尾地址,得到第一地址差;当第一地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;在将视频数据包缓存至空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新显存池块的已使用空间尾地址。

在一个实施例中,空间使用信息包括显存池块首地址和已使用空间首地址;显池块确定模块1342还用于将已使用空间首地址减去显存池块首地址,得到第二地址差;当第二地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;在将视频数据包缓存至显存池块的空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址。

在一个实施例中,空间使用信息包括已使用空间首地址和已使用空间尾地址;显池块确定模块1342还用于将已使用空间首地址减去已使用空间尾地址,得到第三地址差;当第三地址差大于或等于数据大小时,确定显存池块中存在大于或等于数据大小的空闲显存空间;在将视频数据包缓存至显存池块的空闲显存空间之后,基于缓存视频数据包所占用的显存空间,更新已使用空间首地址和已使用空间尾地址中的至少一种。

在一个实施例中,待处理视频流为对目标场景进行监控的其中一个视频采集设备所采集的视频流,预解码处理和图像解码处理,均通过与采集视频流的图像采集设备相对应的取流解码线程执行,视频流解码装置1300还用于,当获取得到目标任务时,确定与目标任务相对应的目标视频采集设备的目标设备信息;确定与目标设备信息相关联的目标取流解码线程;获取基于目标取流解码线程输出的图像解码结果,并根据获取的图像解码结果执行目标任务;其中,目标任务至少包括人脸检测任务、动作识别任务、人体检测任务、轨迹识别任务、及目标场地的客流信息确定任务中的一种。

关于视频流解码装置的具体限定可以参见上文中对于视频流解码方法的限定,在此不再赘述。上述视频流解码装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图14所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储视频流解码数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种视频流解码方法。

本领域技术人员可以理解,图14中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

相关技术
  • 视频流解码方法、装置、计算机设备和存储介质
  • 视频流解码方法、装置、计算机设备和存储介质
技术分类

06120113207450