我有一个使用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推入解码器。
答案 0 :(得分:1)
在当前版本的FFMPEG中,自动支持硬件加速(如果有)。这也是ff_find_hwaccel
被弃用的原因。
取决于所使用的平台和视频编解码器,您是否支持视频解码的硬件加速。例如,使用H264_NVDEC解码器在Nvidia显卡上支持H264视频的硬件加速解码已有相当长的时间了,但是HEVC解码要求使用a fair bit newer的显卡。对于AMD显卡,情况是一样的,除了您通常使用here所述的DXVA2解码器。
简而言之:如果您的平台支持硬件加速,则FFMPEG应该自动使用它。您也可以在forcing a decoder之前进行其他测试。