背景
项目中使用QT开发监控软件,集成海康、宇视、大华、华迈、以及网络流设备。品牌设备使用SDK控制,网络流设备自己使用FFmpeg库来解决。网络流设备如果同时解码多路播放,会出现CPU占用较高、操作卡顿的情况。如果视频流路数更多如16路,或解码更为复杂的如H265,那么CPU将无力支持,甚至异常崩溃也是很可能的。

问题分析
视频的播放是需要一定的计算能力支撑的。主要是体现在解码以及渲染两方面,默认FFmpeg是软件解码(软解),然后将解码出来的数据进行下格式转换,再通过QPainter渲染显示出来,都是使用CPU来计算。所以此种方式当路数增大,CPU资源占用不断提高,就会出现资源不足卡顿现象。
但此种现象是正常的,干的活多,CPU消耗的资源自然就会越多,所以要做的就是把CPU的任务分担出去给GPU,即硬件解码及渲染。
硬件解码
1.思路
GPU,图形处理器,可以先简单认为是各种核显,独立显卡。CPU能者多劳,但总有极限,GPU一般是专门进行图像相关的处理。那么就可以把音视频的解码以及渲染交给GPU来做,将极大解放CPU,当然不同的GPU也是能力大小不同的,所以GPU不能保证解码效果一定比CPU好(也不会太差),它主要是代替CPU分担解码的工作。
2.方式
如何使用硬解呢?百度一下,就会看到经常出现出现的几个词:DXVA2、 D3D11VA、QSV、libmfx、CUDA、VAAPI等。有必要先了解下DirectX(Windows系统提供的多媒体库接口),PC平台视频的硬件编解码、渲染等与此有关。总体看硬解方式还是比较多的,这里细节不展开介绍,我们来从使用角度来认识,具体可

本文针对使用FFmpeg处理多路视频流时CPU占用过高、操作卡顿的问题,提出利用GPU进行硬件解码和渲染的方法,有效降低CPU负载,大幅提升视频播放性能。

4269

被折叠的 条评论
为什么被折叠?



