encode - 使用 nvenc 编码器时出现 "NV_ENC_ERR_INVALID_VERSION"错误

标签 encode nvidia

我正在使用 cuda nvenc 编码器对 YUV 帧进行编码。我想使用 RTSP 流传输编码的 h264 数据。我需要 SPSPPS 缓冲区来执行 RTSP 流。我正在使用“nvEncGetSequenceParams”来获取 spspps 缓冲区。我在按预期调用“nvEncInitializeEncoder”函数后调用了此函数。我收到“NV_ENC_ERR_INVALID_VERSION”错误,这意味着我向此函数传递了错误的结构。但我已经多次检查过我传递的结构是否正确。我认为这可能是驱动版本问题。我有 Quadro k5000 GPU。我已经在驱动程序版本 331.82 和 337.88 上尝试过此操作。以下是我正在使用的代码。

NVENCSTATUS CNvEncoderH264::GetSPSPPSBUffer(char *SPSPPSBuffer)
{

    NVENCSTATUS nvSta = NV_ENC_SUCCESS;
    uint32_t size = 0;

    //m_spspps is of type NV_ENC_SEQUENCE_PARAM_PAYLOAD
    m_spspps.inBufferSize = 512;
    m_spspps.outSPSPPSPayloadSize = &size;
    SET_VER(m_spspps, NV_ENC_INITIALIZE_PARAMS);

    m_spspps.spsppsBuffer = SPSPPSBuffer;

    nvSta = m_pEncodeAPI->nvEncGetSequenceParams(m_hEncoder,&m_spspps);
    return nvSta;
}

最佳答案

您正在为 SPS/PPS 结构设置错误的版本宏。我没有手工的 NVIDIA 代码,所以我会尝试 Google 正确的宏,但经验法则是每个结构都有一个特定版本的宏(并且您正在使用 NV_ENC_INITIALIZE_PARAMS 作为 SPS/PPS 结构,这绝对是不对。我假设 m_spspps 的类型是 NV_ENC_SEQUENCE_PARAM_PAYLOAD。所以你应该像这样初始化它:

 m_spspps.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;

关于encode - 使用 nvenc 编码器时出现 "NV_ENC_ERR_INVALID_VERSION"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27266767/

相关文章:

python - UnicodeEncodeError : 'charmap' codec can't encode character (in Python 3. 3)

file - Golang 与 ffmpeg 动态视频编码

Delphi、soap 和将值包装在 cdata 中

javascript - 在 JavaScript 中编码 URL?

c++ - 部分卡片上的 cuda 应用程序

java-8 - 无法使用 java.util.Base64 正确编码和解码

c++ - 在 nvidia cuda 内核中创建数组

ubuntu - 让 THEANO 与 GPU ubuntu 14.04 一起工作的问题

c - CUDA 中的 tex1Dfetch 和流

c++ - OpenCL:for 循环中的 CL_OUT_OF_RESOURCES