windows上进行视频播放通常有两种选择,一个是借助于vlc等开源播放器,直接写成一个播放器;另外一个选择就是使用开源的ffmpeg库(libav)来完成视频的读取和解码,然后利用sdl或者dx等渲染组件进行渲染播放。咱们今天的主角就是ffmpeg,为什么说是ffmpeg呢?不是dxva吗?其实ffmpeg已经集成了dxva的支持,可以很方便的调用以便用来进行视频解码。下面我们来看一下"DXVA"是什么?

opencv4 硬解码 ffmpeg硬解码_帧率

以上来自于“百度百科”的介绍。从上面可以看到dxva功能还是非常强大的,它既可以做解码,也可以做编码,甚至还可以做图像算法处理,简直是强大到无与伦比。我们今天要介绍的是它的硬解码功能。话不多说,先来看几张效果图:

opencv4 硬解码 ffmpeg硬解码_opencv4 硬解码_02

这个是一个17路(有一路隐藏在后面,看不到)视频解码播放Demo(本地1080p视频文件)。所有视频均按照40帧的帧率(为了测试效率,估计调高了帧率)进行解码播放,渲染用的是D3D。可以看到此时CPU使用率还是非常之底的,整个系统还是可以进一步增加视频播放路数的。“这么强悍,那你的硬件配置一定很高吧”?我想肯定有人会这么问的,下面我贴一下我的系统配置:

opencv4 硬解码 ffmpeg硬解码_视频解码_03

内存是8G。我系统上没有装“鲁大师”之类的软件,所以只能贴这张图。I5的CPU不算差,但是也不算好,GTX 950这张卡也就8~9百块钱,也不贵吧。

ps:    顺道说一下,即便使用I5和核显来解码和播放,也可以显示到12路左右,比一些4~5百块钱的显卡还强悍,所以在有些方便独显不一定比核显强。

看到这,是不是心里痒痒的?到底怎样实现呢?下面我们来结合代码一步一步的介绍如何实现的。