【问题标题】:FFmpeg + cpp, How to get list of my GPUs handling h264_nvenc?FFmpeg + cpp,如何获取处理 h264_nvenc 的 GPU 列表?
【发布时间】:2020-06-02 11:47:36
【问题描述】:

我正在编写要在具有多个 GPU 的 PC 上使用的应用程序,我正在尝试获取可以在 h264 中解码流的 GPU 索引列表,以便在所有可用 GPU 之间平均分配所有新视频源。

我已经找到如何在命令提示符下执行此操作,但我需要在 c++ 中编写属于它的行

ffmpeg -vsync 0 -i input.mp4 -c:v h264_nvenc -gpu list -f null –

我需要它动态地将它传递给 av_hwdevice_ctx_create(AVBufferRef**,char *int)

有人知道怎么做吗?

【问题讨论】:

    标签: c++ ffmpeg nvenc nvdec


    【解决方案1】:

    据我所知,您不需要将设备显式传递给

    av_hwdevice_ctx_create  (   
            AVBufferRef **  device_ctx,
            enum AVHWDeviceType     type,
            const char *    device,
            AVDictionary *  opts,
            int     flags 
    )   
    

    device_ctx 可以为 NULL,因为它是在此处创建的。你只需要知道你想要的类型。例如AV_HWDEVICE_TYPE_CUDA 。其余参数可以为 NULL 或 0。 至少在hw_decode example中是这样的:

    static AVBufferRef *hw_device_ctx = NULL;
    //...
    static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceType type)
    {
        int err = 0;
        if ((err = av_hwdevice_ctx_create(&hw_device_ctx, type,
                                      NULL, NULL, 0)) < 0) {
            fprintf(stderr, "Failed to create specified HW device.\n");
            return err;
        }
        ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);
        return err;
    }
    

    (注意:我自己没有使用过该功能。我只是根据示例中的操作方式来回答。)

    【讨论】:

    • 您好,感谢您的回答。关键是我正在编写要在具有多个 GPU 的 PC 上使用的应用程序,并且我想使用所有这些应用程序(其中一个用于每个要解码的新流)。您在上面写的命题导致每次都将在第一个 GPU 上开始解码。在 ffmpeg 示例中,我发现我可以通过使用正确的参数调用 av_hwdevice_ctx_create() 来设置正确的 GPU。这就是为什么我需要知道支持硬件解码的 GPU 列表。
    • 哦,好的,我明白了。不幸的是,文档没有提供有关设备参数的任何信息。我的第一个猜测是使用“0”和“1”等等。但很抱歉,我真的帮不了你。也许this 会有所帮助。
    猜你喜欢
    • 2016-07-18
    • 2020-05-15
    • 1970-01-01
    • 2017-11-14
    • 2021-02-22
    • 2012-10-12
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多