视频编解码硬件方案最早是在嵌入式领域中广泛存在,如采用DSP,FPGA,ASIC等,用来弥补嵌入式系统CPU等资源能力不足问题,但随着视频分辨率越来越高(从CIF经历720P,1080P发展到4K,8K),编码算法越来越复杂(从mpeg2经历h264,发展到h265),PC的软件规模也越来越庞大,视频应用也越来也丰富,单独靠CPU来编解码已经显得勉为其难,一种集成在显卡中gpu用来参与编解码工作已经成为主流。
一) gpu存在的形式
gpu主要驻留在显卡上,配合显卡参与显示,绘图,编解码,并行计算等工作。常见形式有以下3类。
1) 独立显卡形式,如AMD和NVIDIA独立显卡。
独立显卡
2)集成在CPU中的核显,如intel的某些带核显处理器和AMD某些带核显处理器
带核显的处理器
3) 视频加速卡
专门用来在服务器端进行编解码使用,如Intel的 VCA卡等。
专用视频加速卡
二)gpu编解码的常用技术方案
1)厂家SDK方案
对应gpu编解码,硬件厂家都有相应SDK方案,应用开发者可以直接调用厂家的SDK 来完成编解码器工作。
NVIDIA | AMD | INTEL | |
编码器 | NVENC | UVD | 参考sample_encode |
解码器 | NVDEC | VCE | 参考sample_decode |
对应的SDK | Video_Codec_SDK | AMF SDK | Intel Media SDK |
硬件编解码SDK方案
2)FFMPEG方案
ffmpeg对厂家SDK进行封装和集成,实现部分的硬件编解码
NVIDIA | AMD | INTEL | |
编码器 | xxx_nvenc | xxx_amf | xxxx_qsv |
解码器 | xxx_ cuvid | 暂未实现 | xxxx_qsv |
ffmpeg硬解编解码应用
其中xxx标识编码类型,如h264,h265,mpeg2,vp8,vp9等。其次在ffmpeg中软件编解码器可以实现相关硬解加速。如在h264解码器中可以使用cuda 加速,qsv加速,dxva2 加速,d3d11va加速,opencl加速等。
cuda | qsv | dxva2/d3d11va | opencl | |
应用场景 | 适应NVIDIA显卡平台,但跨OS | 适应Intel显卡平台,但跨OS | 适用Windows OS,但跨硬件平台 | 仅仅支持opencl的硬件平台 |
ffmpeg硬解加速应用
3)gstreamer方案
gst-msdk | gst-vaapi | gst-d3d11 | |
编码器 | msdkxxxenc | vaapixxxenc | 无 |
解码器 | msdkxxxdec | vaapixxxdec | d3d11xxxdec |
应用场景 | 仅限intel gpu | 仅限intel gpu的linux系统 | 仅限Windows D3D加速,跨硬件平台 |
Gstreamer硬件加速编解码方案
其中xxx标识编码类型,如h264,h265,mpeg2,vp8,vp9等。
在Linux关于gst-msdk和gst-vaapi的差异如下:
以上是关于视频在PC上的硬解硬编的常见方案。