FFmpeg-使用硬件加速进行视频解码

时间:2018-10-11 17:29:52

标签: c++ c video ffmpeg

我有一个使用FFmpeg解码视频流的项目,我想在可用的情况下利用硬件解码。根据{{​​3}},较新的FFmpeg版本不建议使用ff_find_hwaccel和朋友。

答案表明ff_find_hwaccel已过时。我想知道分配硬件加速解码器的新方法如何工作。它是自动完成的吗?我是否可以仅将hwaccel作为第avcodec_open2条的第三个选项传递到AvDictionary中,还是要做更多的工作?

当前分配AVCodecContext的代码如下:

auto video_codec = avcodec_find_decoder(codec_id);
auto context = avcodec_alloc_context3(video_codec);
auto retcode = avcodec_open2(context, video_codec, nullptr);

当然有错误检查。

然后我使用avcodec_decode_video2将AVPackets推入解码器。

1 个答案:

答案 0 :(得分:1)

在当前版本的FFMPEG中,自动支持硬件加速(如果有)。这也是ff_find_hwaccel被弃用的原因。

取决于所使用的平台和视频编解码器,您是否支持视频解码的硬件加速。例如,使用H264_NVDEC解码器在Nvidia显卡上支持H264视频的硬件加速解码已有相当长的时间了,但是HEVC解码要求使用a fair bit newer的显卡。对于AMD显卡,情况是一样的,除了您通常使用here所述的DXVA2解码器。

简而言之:如果您的平台支持硬件加速,则FFMPEG应该自动使用它。您也可以在forcing a decoder之前进行其他测试。