SuperMan-Lfj / blog

Apache License 2.0
1 stars 0 forks source link

ffmpeg上使用Windows硬解 #58

Open SuperMan-Lfj opened 1 year ago

SuperMan-Lfj commented 1 year ago

最重要的参考:ffmpeg/doc/examples/hw_decode.c

Windows 上硬解的几种方式

ffmpeg对显卡厂家SDK进行封装和集成,实现部分的硬件编解码

  NVIDIA AMD INTEL
编码器 xxx_nvenc xxx_amf xxxx_qsv
解码器 xxx_ cuvid 暂未实现 xxxx_qsv

其中xxx标识编码类型,如h264,h265,mpeg2,vp8,vp9等。其次在ffmpeg中软件编解码器可以实现相关硬解加速。如在h264解码器中可以使用cuda 加速,qsv加速,dxva2 加速,d3d11va加速,opencl加速等。

  cuda qsv dxva2/d3d11va opencl
应用场景 适应NVIDIA显卡平台,但跨OS 适应Intel显卡平台,但跨OS 适用Windows OS,但跨硬件平台 仅仅支持opencl的硬件平台

核心代码

    //////////////////////////////////////////////////
    /// 硬件加速部分

    auto hw_type = AV_HWDEVICE_TYPE_DXVA2; //这里可以换成你想要的格式

    // 打印所有支持的硬件加速方式
    for (int i = 0;; i++)
    {
        auto config = avcodec_get_hw_config(codec, i);
        if (!config) break;
        if (config->device_type)
            cout << av_hwdevice_get_type_name(config->device_type) << endl;
    }

    // 初始化硬件加速上下文
    AVBufferRef* hw_ctx = nullptr;
    av_hwdevice_ctx_create(&hw_ctx, hw_type, nullptr, nullptr, 0);

    // 开启硬件加速
    c->hw_device_ctx = av_buffer_ref(hw_ctx);

参考文章:

  1. https://cloud.tencent.com/developer/article/2021911
  2. https://www.cnblogs.com/yongdaimi/p/15747294.html#autoid-1-0-0