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

一种基于WebGPU提升Web播放器硬件解码能力的方法

文献发布时间:2024-04-18 19:58:26


一种基于WebGPU提升Web播放器硬件解码能力的方法

技术领域

本发明涉及码流解码技术领域,具体涉及一种基于WebGPU提升Web播放器硬件解码能力的方法。

背景技术

H.265视频已发展了十年,近5年芯片硬件厂家也基本推出了该标准下的方案。硬件厂商可以直接输出H.264/H.265二种视频格式,H.265相比H264可以保证视频质量的前提下节省一半传输带宽及存储空间。但是基于Web浏览器开发的相关应用软件未能快速适配H.265视频流的播放,是由于市面上大多数应用采用播放器进行软解码完成H.265视频流的播放。Web播放器使用软解码H.265视频时,无论是手机端还是桌面端的Web浏览器都会造成浏览器性能不够,从而出现视频流黑屏、浏览器崩溃等现象。另外随着网络视频、实时直播、智慧安防的普及,越来越多的用户开始使用在线视频服务。然而,由于网络带宽和硬件性能的限制,许多视频无法流畅播放。其中,H.265编码格式的视频如果参与软解码方式占用的带宽较大,需要更高的计算能力和更先进的硬件支持才能实现流畅播放和节约带宽。

目前基于WebAssembly的播放器对H265的视频解码技术还不够稳定,无法充分利用硬件资源处理计算任务和解码任务,而且性能相对较低,无法满足高质量视频播放的要求;H265的视频解码需要较高的计算资源,而WebAssembly技术的运行环境有一定的限制,无法充分利用硬件资源,导致解码速度较慢。

发明内容

本发明的目的在于提供一种基于WebGPU提升Web播放器硬件解码能力的方法,解决以下技术问题:

现有的码流解码技术,对H265的视频解码技术性能相对较低,无法充分利用硬件资源处理计算任务和解码任务,导致解码速度较慢。

本发明的目的可以通过以下技术方案实现:

一种基于WebGPU提升Web播放器硬件解码能力的方法,包括以下步骤:

S1:在Web平台上搭建WebGPU技术框架,开发WebGPU解码器,所述WebGPU解码器中设置H.265码流解码模块;

S2:通过对WebGPU解码器的H.265码流解码模块进行解析重构,所述H.265码流解码模块分解为帧数据单元、NAL单元、解码单元和计算单元,将H.265码流解码模块的帧数据、NAL单元和解码单元与WebGPU解码器的计算模块分离;

S3:所述WebGPU解码器的H.265码流解码模块通过GPU进行H.265码流解码时,WebGPU解码器通过WebGPU API获取GPU的负载情况,根据GPU的负载情况,动态调整计算任务和解码任务的分配方式。

作为本发明进一步的方案:所述步骤S1中,在Web平台上搭建WebGPU技术框架,开发WebGPU解码器,包括以下步骤:

在Web平台上搭建WebGPU技术框架,在WebGPU技术框架上构建WebGPU解码器,WebGPU解码器具有进度保存功能,同时,在渲染故障时,进行快速重启。

作为本发明进一步的方案:所述步骤S1中,在WebGPU技术框架上构建WebGPU解码器,WebGPU解码器具有进度保存功能,同时,在渲染故障时,进行快速重启,包括以下步骤:

构建WebGPU解码器时,将WebGPU解码器的解码过程划分为初始化阶段、数据解码阶段和渲染阶段,每个阶段都设置相应的状态变量保存进度;

渲染阶段设置为逐帧渲染,数据解码阶段每解码一帧数据后,渲染阶段立即渲染解码后的一帧数据,并在渲染阶段加入异常捕获机制;

若异常捕获机制检测到渲染故障时,立即捕获异常,保存当前数据解码阶段的解码进度,以及渲染阶段已完成的帧数据,并通过调用重启函数,将WebGPU解码器重置到初始状态,重新执行解码过程;

WebGPU解码器重启后,根据保存的解码进度,将解码器设置为恢复状态,继续解码未处理的数据。

作为本发明进一步的方案:所述步骤S2中,帧数据单元、NAL单元、解码单元和计算单元,包括:

计算单元:用于对来自数据传输单元的H.265码流进行解析,并提取出解析得到的H.265码流中的帧数据;

解码单元:用于将提取的帧数据进行解码,将帧数据还原为原始的视频的帧图像;

NAL单元:用于对解码后的帧图像进行块解析,将其细分为更小的帧块;

帧数据单元:在块解析后,对于每个处理的帧块,进行优化帧处理操作;其中,优化帧处理操作包括:滤波、去噪和增强。

作为本发明进一步的方案:所述步骤S2,将H.265码流解码模块的帧数据、NAL单元和解码单元与WebGPU解码器的计算模块分离,包括以下步骤:

对码流解码模块进行分析,将帧数据单元、NAL单元、解码单元分配到解码部分,并将计算单元分配到计算部分;

将码流解码模块的解码部分和计算部分进行拆分,并在解码部分和计算部分之间定义合适的接口和数据结构;其中,接口定义包括:输入输出参数、函数调用和返回值,数据结构包括:帧数据的格式、帧数据的存储方式和帧数据相关的元数据信息;

将H.265码流解码模块的解码部分分离出WebGPU解码器中的计算模块,H.265码流解码模块的计算部分保留在WebGPU解码器的计算模块中。

作为本发明进一步的方案:所述码流解码模块的计算单元在对输入的H.265码流进行解析的同时,将已解析并提取后的帧数据通过异步通信机制传输到WebGPU解码器的计算模块中的计算单元进行处理。

作为本发明进一步的方案:所述码流解码模块将已解析并提取后的帧数据通过异步通信机制传输到WebGPU解码器的计算模块中的计算单元进行处理,包括以下步骤:

将已解析并提取后的帧数据,根据WebGPU解码器计算模块的输入要求进行格式转换,将格式转换后的数据进行分割,并将分割后的数据打包成多个数据包存储在缓冲区对象中;

所述码流解码模块通过异步通信机制,将打包完成的多个数据包传输到WebGPU解码器的计算模块中的计算单元;

WebGPU解码器的计算模块中的计算单元对接收到的数据进行解包操作,还原成原始的帧数据。

作为本发明进一步的方案:所述WebGPU解码器通过数据传输单元从CPU获取H.265码流数据。

作为本发明进一步的方案:所述WebGPU解码器通过数据传输单元从CPU获取H.265码流数据,包括以下步骤:

在GPU端创建一个纹理对象,用于存储需要传输的H.265码流数据,并确保所述纹理对象与CPU端需要传输的H.265码流数据格式和大小匹配;

通过WebGPU API将CPU端的数据绑定到GPU端的纹理对象上;

通过纹理采样Sampling API在GPU端对纹理对象进行采样操作,获取所需数据。

作为本发明进一步的方案:所述步骤S3中,动态调整计算任务和解码任务的分配方式,包括以下步骤:

通过WebGPU API获取GPU的计算任务、解码任务、使用率和渲染队列中的绘制命令数量,实时监测GPU的负载情况;

若GPU的负载利用率大于60%,通过限制解码任务的实时渲染帧率为预设渲染帧率的70%,否则,按照预设的渲染帧率进行渲染;

若GPU的负载利用率大于80%,通过WebWorker技术,将WebGPU解码器的计算模块中的计算密集型的计算任务转移至后台线程中执行,否则,继续在WebGPU解码器的计算模块中执行。

本发明的有益效果:

本发明通过WebGPU技术,提升H.265码流解码能力,实现高效、快速的视频发布;同时将进行解码的部分和计算模块分离,在解码效率和解码支持度方面进行技术升级;进行解码的部分和计算模块分离,可以独立进行处理,避免了互相干扰和竞争资源的情况;这样可以提高系统的整体性能,使解码和计算能够同时进行,充分利用硬件资源。同时,将进行解码的部分和计算模块分离后,计算模块可以利用GPU多核处理器的并行计算能力,同时处理多个计算任务;解码任务不再受到计算任务的干扰,可以专注于解码数据。通过将H.265码流解码模块的计算单元保留在WebGPU解码器的计算模块中,便于通过GPU多核处理器的并行计算能力,快速且高效地进行复杂的计算任务,提升系统的响应速度和计算性能。

附图说明

下面结合附图对本发明作进一步的说明。

图1是本发明方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

请参阅图1所示,本发明为一种基于WebGPU提升Web播放器硬件解码能力的方法,包括以下步骤:

S1:在Web平台上搭建WebGPU技术框架,开发WebGPU解码器,WebGPU解码器中设置H.265码流解码模块;

S2:通过对WebGPU解码器的H.265码流解码模块进行解析重构,H.265码流解码模块分解为帧数据单元、NAL单元、解码单元和计算单元,将H.265码流解码模块的帧数据、NAL单元和解码单元与WebGPU解码器的计算模块分离;

S3:WebGPU解码器的H.265码流解码模块通过GPU进行H.265码流解码时,WebGPU解码器通过WebGPU API获取GPU的负载情况,根据GPU的负载情况,动态调整计算任务和解码任务的分配方式。

具体的,通过WebGPU技术,提升H.265码流解码能力,实现高效、快速的视频发布;同时将进行解码的部分和计算模块分离,在解码效率和解码支持度方面进行技术升级;进行解码的部分和计算模块分离,可以独立进行处理,避免了互相干扰和竞争资源的情况;这样可以提高系统的整体性能,使解码和计算能够同时进行,充分利用硬件资源。同时,将进行解码的部分和计算模块分离后,计算模块可以利用GPU多核处理器的并行计算能力,同时处理多个计算任务;解码任务不再受到计算任务的干扰,可以专注于解码数据。通过将H.265码流解码模块的计算单元保留在WebGPU解码器的计算模块中,便于通过GPU多核处理器的并行计算能力,快速且高效地进行复杂的计算任务,提升系统的响应速度和计算性能。

通过WebGPU解码器通过WebGPU API获取GPU的负载情况,根据GPU的负载情况,动态调整计算任务和解码任务的分配方式,实现GPU资源合理管理、细节操作优化,加快H265视频解码速度,使得Web播放器更加流畅。

在本发明其中一个实施例中,步骤S1中,在Web平台上搭建WebGPU技术框架,开发WebGPU解码器,包括以下步骤:

在Web平台上搭建WebGPU技术框架,在WebGPU技术框架上构建WebGPU解码器,WebGPU解码器具有进度保存功能,同时,在渲染故障时,进行快速重启。

具体的,通过将解码器设计为可重启的方式,并在渲染阶段实时监控渲染故障,可以快速地恢复解码器并继续解码过程,避免整个解码过程因为渲染故障而停止。这种方法可以保证解码器的鲁棒性和稳定性,并提高解码过程的可靠性和效率。

在本发明其中一个实施例中,步骤S1中,在WebGPU技术框架上构建WebGPU解码器,WebGPU解码器具有进度保存功能,同时,在渲染故障时,进行快速重启,包括以下步骤:

构建WebGPU解码器时,将WebGPU解码器的解码过程划分为初始化阶段、数据解码阶段和渲染阶段,每个阶段都设置相应的状态变量保存进度;

渲染阶段设置为逐帧渲染,数据解码阶段每解码一帧数据后,渲染阶段立即渲染解码后的一帧数据,并在渲染阶段加入异常捕获机制;

若异常捕获机制检测到渲染故障时,立即捕获异常,保存当前数据解码阶段的解码进度,以及渲染阶段已完成的帧数据,并通过调用重启函数,将WebGPU解码器重置到初始状态,重新执行解码过程;

WebGPU解码器重启后,根据保存的解码进度,将解码器设置为恢复状态,继续解码未处理的数据。

具体的,通过将WebGPU解码器设计为可重启的方式,并在渲染阶段实时监控渲染故障,可以快速地恢复WebGPU解码器并继续解码过程,避免整个解码过程因为渲染故障而停止。这种方法可以保证WebGPU解码器的鲁棒性和稳定性,并提高解码过程的可靠性和效率。

在本发明其中一个实施例中,步骤S2中,帧数据单元、NAL单元、解码单元和计算单元,包括:

计算单元:用于对来自数据传输单元的H.265码流进行解析,并提取出解析得到的H.265码流中的帧数据;

解码单元:用于将提取的帧数据进行解码,将帧数据还原为原始的视频的帧图像;

NAL单元:用于对解码后的帧图像进行块解析,将其细分为更小的帧块;

帧数据单元:在块解析后,对于每个处理的帧块,进行优化帧处理操作;其中,优化帧处理操作包括:滤波、去噪和增强。

具体的,H.265码流数据进行解码时,帧数据单元、NAL单元、解码单元完成解码任务,通过计算单元完成计算任务,

在本发明其中一个实施例中,步骤S2,将H.265码流解码模块的帧数据、NAL单元和解码单元与WebGPU解码器的计算模块分离,包括以下步骤:

对码流解码模块进行分析,将帧数据单元、NAL单元、解码单元分配到解码部分,并将计算单元分配到计算部分;

将码流解码模块的解码部分和计算部分进行拆分,并在解码部分和计算部分之间定义合适的接口和数据结构;其中,接口定义包括:输入输出参数、函数调用和返回值,数据结构包括:帧数据的格式、帧数据的存储方式和帧数据相关的元数据信息;

将H.265码流解码模块的解码部分分离出WebGPU解码器中的计算模块,H.265码流解码模块的计算部分保留在WebGPU解码器的计算模块中。

具体的,通过将H.265码流解码模块的计算单元保留在WebGPU解码器的计算模块中,便于通过GPU多核处理器的并行计算能力,快速且高效地进行复杂的计算任务,提升系统的响应速度和计算性能。

在本发明其中一个实施例中,码流解码模块的计算单元在对输入的H.265码流进行解析的同时,将已解析并提取后的帧数据通过异步通信机制传输到WebGPU解码器的计算模块中的计算单元进行处理。

在本发明其中一个实施例中,码流解码模块将已解析并提取后的帧数据通过异步通信机制传输到WebGPU解码器的计算模块中的计算单元进行处理,包括以下步骤:

将已解析并提取后的帧数据,根据WebGPU解码器计算模块的输入要求进行格式转换,将格式转换后的数据进行分割,并将分割后的数据打包成多个数据包存储在缓冲区对象中;

码流解码模块通过异步通信机制,将打包完成的多个数据包传输到WebGPU解码器的计算模块中的计算单元;

WebGPU解码器的计算模块中的计算单元对接收到的数据进行解包操作,还原成原始的帧数据。

具体的,将进行解码的部分和计算模块分离后,码流解码模块通过异步通信机制,将打包完成的多个数据包传输到WebGPU解码器的计算模块中的计算单元,计算模块可以利用GPU多核处理器的并行计算能力,同时处理多个计算任务;解码任务不再受到计算任务的干扰,可以专注于解码数据。通过将格式转换后的数据进行分割,可以快速且高效地进行复杂的计算任务,提升系统的响应速度和计算性能。

在本发明其中一个实施例中,WebGPU解码器通过数据传输单元从CPU获取H.265码流数据。

在本发明其中一个实施例中,WebGPU解码器通过数据传输单元从CPU获取H.265码流数据,包括以下步骤:

在GPU端创建一个纹理对象,用于存储需要传输的H.265码流数据,并确保纹理对象与CPU端需要传输的H.265码流数据格式和大小匹配;

通过WebGPU API将CPU端的数据绑定到GPU端的纹理对象上;

通过纹理采样Sampling API在GPU端对纹理对象进行采样操作,获取所需数据。

具体的,通过在GPU端创建一个纹理对象,WebGPU API将CPU端的数据绑定到GPU端的纹理对象上,利用通过纹理采样Sampling API在GPU端对纹理对象进行采样操作,可以避免在数据传输过程中进行不必要的复制操作,减少了数据传输次数,提高了传输效率,并能够直接在GPU端访问和处理数据,进一步加速计算过程。

在本发明其中一个实施例中,步骤S3中,动态调整计算任务和解码任务的分配方式,包括以下步骤:

通过WebGPU API获取GPU的计算任务、解码任务、使用率和渲染队列中的绘制命令数量,实时监测GPU的负载情况;

若GPU的负载利用率大于60%,通过限制解码任务的实时渲染帧率为预设渲染帧率的70%,否则,按照预设的渲染帧率进行渲染;

若GPU的负载利用率大于80%,通过WebWorker技术,将WebGPU解码器的计算模块中的计算密集型的计算任务转移至后台线程中执行,否则,继续在WebGPU解码器的计算模块中执行。

具体的,GPU的负载利用率大于60%时,通过限制解码任务的实时渲染帧率为预设渲染帧率的70%;GPU的负载利用率大于80%时,通过WebWorker技术,将WebGPU解码器的计算模块中的计算密集型的计算任务转移至后台线程中执行;循序渐进对GPU的负载利用率进行释放,便于使得GPU的负载处于一个动态平衡中,保证数据处理效率。

在本发明的描述中,需要理解的是,术语“上”、“下”、“左”、“右”等指示方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以及特定的方位构造和操作,因此,不能理解为对本发明的限制。此外,“第一”、“第二”仅由于描述目的,且不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。因此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者多个该特征。本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”“相连”“连接”等应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接连接,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

以上对本发明的一个实施例进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。

相关技术
  • 一种提升基于区块链技术实现的应用系统同城多园区部署灾备能力的方法
  • 一种基于虚拟化的硬件解码方法、解码设备及存储介质
  • 一种基于虚拟化的硬件解码方法、解码设备及存储介质
技术分类

06120116486048