【问题标题】:"NVENC Feature not available for current license key type" error from nvEncoder samplenvEncoder 示例中的“NVENC 功能不适用于当前许可证密钥类型”错误
【发布时间】:2013-05-13 21:11:59
【问题描述】:

当我尝试运行 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 设备 具有 Compute SM 3.0,NVENC 可用] >> InitCUDA() 检测到 1 个支持 CUDA 的 GPU 设备 具有 Compute SM 3.0,可用 NVENC ] >> 选择 GPU #0 - 支持 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。

有人遇到了同样的问题here 并通过使用免费试用密钥解决了它。它似乎已包含在 SDK 的 2.0 beta 版本中,现已不再可用。

我还尝试安装驱动程序 311.06、312.07 和 314.22,但均未成功。我有一个 GeForce GTX 670。

有解决办法吗?

【问题讨论】:

    标签: sdk licensing gpu nvidia video-encoding


    【解决方案1】:

    不幸的是,我无法在任何地方找到 SDK 的 beta 版本,只能找到最终版本。唯一的方法可能是找到下载测试版的人。

    另一种方法是尝试对 NVIDIA 的驱动程序(尤其是“Shadowplay”和 SHIELD 都使用 NVENC)或已获准在 Geforce 卡上使用 NVENC 的现有编码工具进行逆向工程,以找到兼容的密钥。

    我一直在关注的另一个潜在解决方案是将卡简单地修改为 Quadro/Tesla/GRID,您应该可以在 670 上执行此操作(但不幸的是,没有人在 Titan 上尝试过) :http://www.eevblog.com/forum/projects/hacking-nvidia-cards-into-their-professional-counterparts/

    令人讨厌的是,在 GTX 680 推出时,NVIDIA 将 NVENC 宣传为消费级 Kepler 卡的一项功能,但他们已经放弃了这一点,使其成为专业版独有的功能。它甚至不适用于我的“专业消费者”$ 1k GTX Titans。具有讽刺意味的是,我什至不想长期使用 Titans。即使使用 NVENC,Grid K1 或 K2 也会更适合我的项目。在扩大规模(并购买大量 NVIDIA GPU ......)之前让我的工作站/游戏设备上运行一些东西会很棒,而不是把更多的钱花在 GPU 上......猜猜它可能会更好AMD/OpenCL 路线与他们的开放视频编码引擎相反,除了 GNU/Linux 上的 Catalyst 不支持它。呃。

    【讨论】:

    • 您能否说,如果我使用 Quadro K4000,我需要钥匙吗?从哪里获得?
    【解决方案2】:

    你需要一个许可证密钥,可以通过询问 Nvidia(祝你好运!)获得,或者通过反汇编共享库找到,或者使用 gdb 的 rwatch 和捆绑的示例代码。抱歉,我没有比这更有帮助的了。

    【讨论】:

      【解决方案3】:

      从 GeForce 334.67 驱动程序开始,NVENC 不再需要许可证密钥才能在 GeForce 卡上使用。

      【讨论】:

      • 好消息!是否有任何新卡不需要 NVENC 的许可证密钥?
      • @Alex 是的。许可限制适用于所有 GeForce 硬件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2011-02-02
      • 1970-01-01
      • 2020-07-15
      • 2010-09-20
      • 2018-09-01
      • 2020-03-18
      相关资源
      最近更新 更多