1

当我尝试运行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。

有解决办法吗?

4

3 回答 3

2

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

于 2014-06-08T11:57:15.217 回答
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/

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

于 2013-05-27T16:03:05.023 回答
-1

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

于 2014-06-08T04:10:41.597 回答