当我尝试运行NV Encode SDK 2.0中包含的 nvEncoder 示例应用程序时,它无法打开编码会话。这是输出:
C:\Users\Timothy\Downloads\nvenc_2.0_pkg\Samples\nvEncodeApp>1080p_heavyhand_3se c.bat C:\Users\Timothy\Downloads\nvenc_2.0_pkg\Samples\nvEncodeApp>nvEncoder -infile=。 .\yuv\1080p\HeavyHandIdiot.3sec.yuv -outfile=HeavyHandIdiot.3sec.264 -width=1920 -高度=1080 -比特率=6000000 > Encoder[0] 的 NVEncode 配置参数 > GPU 设备 ID = 0 > 输入文件 = ..\yuv\1080p\HeavyHandIdiot.3sec.yuv > 输出文件 = HeavyHandIdiot.3sec.264 > 帧 [000--01] = 0 帧 > 多视图编解码器 = 否 > 宽度、高度 = [1920,1080] > 视频输出编解码器 = 4 - H.264 编解码器 > 平均比特率 = 6000000 (bps/sec) > 峰值比特率 = 24000000 (bps/sec) > 缓冲区大小 = 3000000 > 速率控制模式 = 2 - CBR(恒定比特率) > 帧速率 (Num/Denom) = (30000/1001) 29.9700 fps > GOP 长度 = 30 > 设置初始 RC QP = 0 > 初始 RC QP (I,P,B) = I(0), P(0), B(0) > B 帧数 = 0 > 显示纵横比 X = 1920 > 显示纵横比 Y = 1080 > B 帧数 = 0 > QP(所有帧)= 26 > QP(I 帧)= 25 > QP(P 帧)= 28 > QP(B 帧)= 31 > 分层 P 帧 = 0 > 分层 B 帧 = 0 > SVC 时间可扩展性 = 0 > 时间层数 = 0 > 带外 SPSPPS = 0 > 视频编解码器配置文件 = 100 > 立体 3D 模式 = 0 > 立体 3D 启用 = 否 > 每帧切片数 = 1 > 编码器预设 = 3 - 高性能 (HP) 预设 > 异步模式 = 是 > YUV 输入格式 = NV12(半平面 UV 交错)间距线性 > NVENC API 接口 = 2 - CUDA > 地图资源 API 演示 = 否 > 动态分辨率变化 = 0 > 动态比特率变化 = 0 输入文件大小:236390400 字节 输入文件名:..\yuv\1080p\HeavyHandIdiot.3sec.yuv 自动检测(nvAppEncoderParams.endFrame = 76 帧) >> GetNumberEncoders() 检测到 1 个支持 CUDA 的 GPU 设备 << [ GPU #0 - < GeForce GTX 670 > 具有 Compute SM 3.0,NVENC 可用] >> InitCUDA() 检测到 1 个支持 CUDA 的 GPU 设备<< [ GPU #0 - < GeForce GTX 670 > 具有 Compute SM 3.0,可用 NVENC ] >> 选择 GPU #0 - < GeForce GTX 670 > 支持 SM 3.0 和 NVENC 文件:src\CNVEncoder.cpp,行:1380,nvEncOpenEncodeSessionEx() 返回 e 错误 21 注意:GUID 密钥可能无效或不正确。建议升级您的驱动程序 nd 获取新密钥 src\CNVEncoder.cpp 处的 NVENC 错误:1382 代码=21(NVENC 功能不适用于 c 当前许可证密钥类型)“nvStatus”
API 说错误代码 21 是NV_ENC_ERR_INCOMPATIBLE_CLIENT_KEY
,并带有注释:
/**
* This indicates that the client is attempting to use a feature
* that is not available for the license type for the current system.
*/
编程指南说:
2. 设置硬件进行编码
2.1 打开编码会话
加载 NVENC 接口后,客户端应首先调用
NvEncOpenEncodeSession
以打开编码会话。NVENC 接口将为客户端提供一个编码会话句柄,该句柄必须用于当前会话中的所有进一步 API 调用。2.1.1 使用许可证客户端密钥 GUID:
客户端应传递指向已随此 SDK 交付或已作为许可证的一部分单独购买的密钥 GUID 的指针,如
NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS::clientKeyPtr
根据指南,示例代码无效,因为它没有设置NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS::clientKeyPtr
. 但 SDK 并未像指南所说的那样提供密钥 GUID。
有人在这里遇到了同样的问题,并通过使用免费试用密钥解决了它。它似乎已包含在 SDK 的 2.0 beta 版本中,该版本已不再可用。
我还尝试安装驱动程序 311.06、312.07 和 314.22,但均未成功。我有一个 GeForce GTX 670。
有解决办法吗?