FFmpeg的软、硬解码方式梳理

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

背景

项目中使用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平台视频的硬件编解码、渲染等与此有关。总体看硬解方式还是比较多的,这里细节不展开介绍,我们来从使用角度来认识,具体可

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁国周公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值