【发布时间】:2015-01-31 17:22:00
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
NVENC 不是 NVCUVENC,NVENC 与 CUDA 无关。这些问题不应使用 CUDA 标记。
-
@RobertCrovella 我完全同意关于特定问题的评论,但是“NVENC 与 CUDA 无关”的说法并不完全正确 - 您可以使用 CUDA 浮动上下文句柄初始化 NVENC(意味着在 NVENC 代码中涉及一些 CUDA API),用作 NVENC 输入的 Direct 3D 表面上的颜色转换可以使用 CUDA 完成。
-
用于 NVENC 的 GPU 硬件资源与用于 CUDA 的 GPU 硬件资源完全分开,并且 API 是正交的。是的,它们可以互操作,但是没有定义上操纵 NVENC 功能的 CUDA API,也没有定义上操纵 CUDA 功能的 NVENC API。无论如何,我的评论的重点是 NVENC 问题不应该自动标记为 CUDA,这就是这里的情况。 NVENC 不是 CUDA 的一部分。感谢您回答此用户的问题。