视频编解码硬件方案最早是在嵌入式领域中广泛存在,如采用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
2)FFMPEG方案
ffmpeg对厂家SDK进行封装和集成,实现部分的硬件编解码
NVIDIA
AMD
INTEL
编码器
xxx_nvenc
xxx_amf
xxxx_qsv
解码器
xxx_ cuvid
暂未实现
xxxx_qsv
其中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的硬件平台
3)gstreamer方案
gst-msdk
gst-vaapi
gst-d3d11
编码器
msdkxxxenc
vaapixxxenc
无
解码器
msdkxxxdec
vaapixxxdec
d3d11xxxdec
应用场景
仅限intel gpu
仅限intel gpu的linux系统
仅限Windows D3D加速,跨硬件平台
其中xxx标识编码类型,如h264,h265,mpeg2,vp8,vp9等。在Linux关于gst-msdk和gst-vaapi的差异如下:
gst-msdk和gst-vaapi插件区别
以上是关于视频在PC上的硬解硬编的常见方案。获取源代码或了解更多信息请关注微信公众号:AV_Chat