nvEncoder示例中的“NVENC功能不适用于当前许可证密钥类型”错误

时间:2013-05-19 00:43:46

标签: sdk licensing gpu nvidia video-encoding

当我尝试运行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
 -height=1080 -bitrate=6000000
> NVEncode configuration parameters for Encoder[0]
> GPU Device ID             = 0
> Input File                = ..\yuv\1080p\HeavyHandIdiot.3sec.yuv
> Output File               = HeavyHandIdiot.3sec.264
> Frames [000--01]          = 0 frames
> Multi-View Codec          = No
> Width,Height              = [1920,1080]
> Video Output Codec        = 4 - H.264 Codec
> Average Bitrate           = 6000000 (bps/sec)
> Peak Bitrate              = 24000000 (bps/sec)
> BufferSize                = 3000000
> Rate Control Mode         = 2 - CBR (Constant Bitrate)
> Frame Rate (Num/Denom)    = (30000/1001) 29.9700 fps
> GOP Length                = 30
> Set Initial RC      QP    = 0
> Initial RC QP (I,P,B)     = I(0), P(0), B(0)
> Number of B Frames        = 0
> Display Aspect Ratio X    = 1920
> Display Aspect Ratio Y    = 1080
> Number of B-Frames        = 0
> QP (All Frames)           = 26
> QP (I-Frames)             = 25
> QP (P-Frames)             = 28
> QP (B-Frames)             = 31
> Hiearchical P-Frames      = 0
> Hiearchical B-Frames      = 0
> SVC Temporal Scalability  = 0
> Number of Temporal Layers = 0
> Outband SPSPPS            = 0
> Video codec profile       = 100
> Stereo 3D Mode            = 0
> Stereo 3D Enable          = No
> Number slices per Frame   = 1
> Encoder Preset            = 3 - High Performance (HP) Preset
> Asynchronous Mode         = Yes
> YUV Input Format          = NV12 (Semi-Planar UV Interleaved) Pitch Linear
> NVENC API Interface       = 2 - CUDA
> Map Resource API Demo     = No
> Dynamic Resolution Change = 0
> Dynamic Bitrate Change    = 0
Input Filesize: 236390400 bytes
Input Filename: ..\yuv\1080p\HeavyHandIdiot.3sec.yuv
Auto-Detected (nvAppEncoderParams.endFrame = 76 frames)


>> GetNumberEncoders() has detected 1 CUDA capable GPU device(s) <<
  [ GPU #0 - < GeForce GTX 670 > has Compute SM 3.0, NVENC Available ]

>> InitCUDA() has detected 1 CUDA capable GPU device(s)<<
  [ GPU #0 - < GeForce GTX 670 > has Compute SM 3.0, Available NVENC ]

>> Select GPU #0 - < GeForce GTX 670 > supports SM 3.0 and NVENC
File: src\CNVEncoder.cpp, Line: 1380, nvEncOpenEncodeSessionEx() returned with e
rror 21
Note: GUID key may be invalid or incorrect.  Recommend to upgrade your drivers a
nd obtain a new key
NVENC error at src\CNVEncoder.cpp:1382 code=21(NVENC Feature not available for c
urrent license key type) "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。

有解决方案吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

另一种方法是尝试逆向工程NVIDIA的驱动程序(特别是“Shadowplay”和SHIELD都使用NVENC)或许可在Geforce卡上使用NVENC的现有编码工具来查找兼容密钥。

我一直在观察的另一个可能的解决方案是简单地将卡硬盘改成Quadro / Tesla / GRID,你应该可以在你的670上做(虽然不幸的是,没有人在泰坦上尝试过) :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路由使用Open Video Encode引擎,但GNU / Linux上的Catalyst不支持它。啊。

答案 2 :(得分:0)

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