当我尝试运行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。
有解决方案吗?
答案 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和捆绑的示例代码来获得。对不起,我不能比这更有帮助。