0 背景
在《VPF:适用于 Python 的开源视频处理框架,加速视频任务、提高 GPU 利用率》一文中,我们介绍了硬件编解码的处理框架,底层用到的是 NVCODEC 相关组件,本文对该组件进行一个介绍。
官网:https://developer.nvidia.com/nvidia-video-codec-sdk
1 为什么选择 GPU 编解码
随着数字时代和互联网时代的到来,无论在电视上、PC上、还是手机上,我们所看到的视频基本都是数字信号。为了适应各种产品、各种平台的对视频的需求,视频需要在各种格式、码率、分辨率之间相互转换。例如,我们在网络视频平台或者直播平台上选择不同分辨率及清晰度的视频进行播放,观看视频就涉及到解码的过程,而在服务端就存在一个视频转码的需求。
在没有 GPU 的设备上,都采用的是软件编解码,即使用 CPU 进行处理,效率比较低,尤其是在多路视频流的情况下,容易出现 CPU 满负荷运行,并卡顿、花屏等异常,影响其它应用的正常运行。而如果使用 GPU 编解码的话,可以大大减少 CPU 资源利用,提高其它应用的性能。
对于 NVIDIA 的 GPU 来说,都代用硬件编解码的芯片,可以支持各种格式的视频编解码及格式转换,具体地,解码使用 NVDEC 芯片,编码使用 NVENC 芯片。从官网图中,我们可以看到,编解码芯片已经覆盖到我们常见的的视频格式。
2 硬件编码
从开普勒架构的 GPU 开始,便包含了 NVENC 硬件编码模块。编码使用的是 NVENC 的编码芯片,NVENC 编码器数量越多,编码性能就越高。
对于 H.264 编码来说,可以看到 T4 显卡最多支持 19 路 1080p/30fps 流编码,Bitrate saving 指标是基于 x264 medium 作为参考,具体含义不太清楚,看介绍说值越大越好
其它显卡的编码指标,如 P40,GV100等,可以参考官网图片,编码速度一般和图像质量成反比, 编码要求图像质量越好,编码的速度就会越慢。
3 硬件解码
对于 GPU 硬件解码的性能分析,可以看下图
可以看到,对于 1080p 分辨率的视频,T4 的解码性能最强, H264 最大支持到 1000 FPS 性能,即如果是 30 fps 的视频流,大概能同时解码 33 路视频,对于其他编码格式的视频,计算方法类似。
参考
转载:https://blog.csdn.net/zong596568821xp/article/details/116531122