使用 PotPlayer 播放器查看软解和硬解 4K 高清视频时的 CPU 及 GPU 占用情况 | 主赛道
最近我们的软件在硬解播放 4K 分辨率高清视频时遇到了效率不够的问题,为了搞清楚原因,我们需要使用其他音视频软件做个比对测试,测试一下当前 PC 的 CPU 和 GPU 能力。我们选择了视频播放器软件 PotPlayer,看看该播放器分别软解和硬解 4K 高清视频时的资源占用情况,下面就概说一下测试过程,以供参考。
1、问题说明
在测试过程中发现,我们的软件在硬解播放远端传过来的 4K 高清视频时会发生错误,然后自动切换到软解,切换到软解之后效率明显跟不上,视频出现了明显的卡顿(解码的速度很慢,导致视频播放有明显的延时)。
为了大概摸排这个解码的问题,我们需要找一个音视频软件去对比测试一下在解码播放 4K 分辨率的视频时对 CPU 及 GPU 的占用情况,看看当前的 CPU 及 GPU 的性能能否满足当前的解码需求。当前我们的软件只涉及到视频的解码播放,不涉及视频编码,所以我们找一个视频播放器就可以了。
我们之前使用过 PotPlayer 视频播放器,功能很强大,支持软解和硬解的切换,可以查看到详细的解码统计信息,对音视频开发人员非常有用。于是到网上下载一段 4K 分辨率的测试视频,使用 PotPlayer 播放器播放这个视频,看看对 CPU 和 GPU 占用情况。
2、PotPlayer 播放器介绍
很多做音视频开发的朋友,应该都听说过或使用过 PotPlayer 播放器。
PotPlayer 播放器是一款来自韩国的全能视频播放器,是 KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的新一代作品。它不仅继承了 KMPlayer 的滤镜以及管理系统,而且 Daum 公司实现了 KMPlayer 没有实现的 DXVA 硬件解码(DXVA 的全称为 DirectX Video Acceleration,视频硬件加速)和多线程解码功能,使 PotPlayer 可以更加流畅地播放高清电影。
其中,DXVA 的全称是 DirectX Video Acceleration,视频硬件加速。DXVA 是微软公司专门定制的视频加速规范,它共有两个版本,分别是 DXVA 1.0 和 DXVA 2.0。DXVA 规范不仅仅是在视频播放过程中的解码计算规范,其还有与视频后期处理息息相关,例如反交错、色彩空间转换或图像缩放等等。对于视频播放时 CPU 利用率影响最大的,通常也是我们最关心的,非视频解码莫属,尤其是 HD 视频的解码(硬件解码),对于 CPU 较弱的系统来说,让显卡来完成解码是不二之选。
Potplayer 在相对小巧的体积下,实现了支持绝大多数视频格式的功能。普通用户无需安装第三方解码器即可播放主流格式的视频文件,支持 BD 和 MKV 大视频文件的播放。Potplayer 程序中调用了修改过的 FFmpeg、MP3Lame 开源编解码器,并遵循其 LGPL 开源许可协议。
3、视频的软解与硬解
视频解码播放主要涉及到两个操作,先解码视频(视频数据是经过压缩的),然后再去播放视频,其中视频解码是比较消耗 CPU 或 GPU 资源的。
视频解码是对经过编码算法压缩的视频进行解码,分软解和硬解,软解则是使用 CPU 进行解码(使用 CPU 的计算能力),硬解则是使用 GPU 进行硬件解码,其中硬件解码的效率要更高一些。
软件终端如果需要将本端摄像头采集到的图像发送到服务端,则需要对摄像头采集机出来的图像进行编码,编码相对于解码,要消耗更多的 CPU(软解使用 CPU)或 GPU(硬解使用 GPU)资源。
对于 4K 这个高分辨率视频,要保证解码的效率以及较少延时,我们优先使用硬解,在硬解失败时再切换到软解,但软解 4K 高清视频,会占用很多的 CPU 资源,CPU 的压力会大很多。
除了解码,CPU 作为机器的主控芯片,还要运行其他软件和处理其他事务,如果系统 CPU 占用过高,则会导致系统出现明显的卡顿。
使用硬解时,主要占用 GPU 资源,可以有效地分担 CPU 处理数据的压力,有效地降低 CPU 的占用,从而不会影响当前系统中其他软件的运行。
4、使用 PotPlayer 查看 4K 高清视频软解和硬解时的 CPU 占用情况
PotPlayer 打开视频后,在主窗口下方的工具条中可以点击软解(SW-Software)/硬解(HW-Hardware)的按钮实现软件与硬解之间的切换,如下所示:
然后可以右键点击视频区域,在弹出的右键菜单中点击属性菜单项,在打开的属性窗口中查看当前解码使用的解码器类型。
4.1、使用软解时 CPU 和 GPU 占用情况
用 PotPlayer 打开视频时,默认使用的是软解,右键点击视频区域,在弹出的右键菜单中点击属性,查看到使用的解码器类型为 AVC1- 内置 FFmpeg 解码器(h264, Thread Frame),如下所示:
上图中还可以看到当前解码的帧率, 当加速视频播放(以几倍速播放)时播放器会自动提升解码的帧率,可以自行测试一下。
打开 Windows 任务管理器,查看到此时的 CPU 和 GPU 占用情况,如下所示:
从图中可以看出,当前 CPU 占用大概在 36%左右,GPU 3D 占用大概 48%, Video Decode 和 Video Processing 占用都是 0。这三部分占用解释如下:(注意,此处的视频播放其实包含两部分,视频解码和视频播放,要区分开来)
1)3D(视频播放):绘制视频时应该使用到了硬件加速,比如使用 D3D 绘图。2)Video Decode(视频硬解):对编码压缩的视频数据进行硬解。3)Video Processing(视频硬解):对硬解出来的视频进行缩放等操作。
因为当前使用的软解,没用到硬解,所以 Video Decode 和 Video Processing 两项的占比都为 0。
4.2、使用硬解时 CPU 和 GPU 占用情况
点击视频窗口下方的工具条中软解(SW-Software)/硬解(HW-Hardware)按钮,将当前的解码模式由软解切换到硬解,查看到使用的解码器类型为:AVC1 –Native D3D9 DXVA Decoder(VLD) - Intel(R) UHD Graphics 630,如下所示:
然后我们到任务管理中看一下 CPU 和 GPU 占用变化趋势,如下所示:
首先 CPU 占用比例降到 16%,因为硬解主要使用 GPU 硬解,所以 CPU 占用降低了。然后我们看到 Video Decode 和 Video Processing 两部分立马有了占用,其中 Video Decode 主要用于硬解视频数据,Video Processing 主要用于硬解后的缩放处理。
然后还看到两个明显的变化,一个是 3D 占用比例降低了,另一个是共享 GPU 内存升高了,从 0.5GB 升高到 0.9GB,说明如下:
1)3D 降低的原因:主要是绘制视频时使用了硬件加速,所以占用 3D 硬件加速资源。因为之前是软解,要将解码后的存在内存中的视频数据拷贝到 GPU 中绘制显示,这个拷贝的过程比较耗 3D 占用。而当前已经切换到硬解,视频数据硬解直接在 GPU 中处理,解码后的视频数据直接使用 GPU 绘制,省掉了视频数据拷贝的操作,所以 3D 占用下降了。2)GPU 共享内存升高了:使用 GPU 硬解出来的视频数据要存放到 GPU 共享内存中,所以 GPU 共享内存升高了 0.4 个 GB 左右。
使用 GPU 资源去做视频硬解,有效地分担了 CPU 处理数据的压力,有效地降低了 CPU 占用。在处理大分辨率的视频数据时,建议优先使用硬解。
5、最后
本文主要演示了如何使用 PotPlayer 视频播放器去观测视频软解和硬解时的 CPU 与 GPU 的占用情况,以供参考。
评论