Hikvision HCNetSDK Ошибка 3: NET_DVR_NOINIT — SDK не инициализирован
- Любой вызов API SDK (Login, Play, Config) мгновенно возвращает ошибку
3. - Приложение завершается аварийно при старте первого сетевого потока.
- В логах фиксируется
SDK is not initialized or NET_DVR_Cleanup was already called.
1. Корректный жизненный цикл инициализации SDK
Функция NET_DVR_Init должна вызываться ровно один раз при старте процесса до любых других обращений к библиотеке:
// 1. Инициализация SDK
if (!NET_DVR_Init()) {
printf("NET_DVR_Init failed! Error: %d\n", NET_DVR_GetLastError());
return -1;
}
// 2. Установка времени ожидания сетевых операций
NET_DVR_SetConnectTime(3000, 3);
NET_DVR_SetReconnect(10000, true);
// 3. Указание пути к зависимым компонентам HCNetSDKCom (Критично!)
NET_DVR_LOCAL_SDK_PATH struPath = { 0 };
strncpy(struPath.sPath, "/opt/hikvision/sdk/HCNetSDKCom/", sizeof(struPath.sPath));
NET_DVR_SetSDKPath(&struPath);2. Проверка наличия вспомогательных модулей HCNetSDKCom
Библиотека HCNetSDK.dll (или libhcnetsdk.so) загружает вспомогательные библиотеки кодеков и сетевых протоколов из подпапки HCNetSDKCom/. Если эта папка отсутствует рядом с исполняемым файлом, NET_DVR_Init завершится фиктивным успехом, но дальнейшие вызовы вернут код 3.
3. Исключение преждевременного вызова NET_DVR_Cleanup
Убедитесь, что ни один параллельный поток или деструктор синглтона не вызвал NET_DVR_Cleanup() во время работы других рабочих потоков.
Частые вопросы (FAQ)
Почему NET_DVR_Init возвращает TRUE, но первый же вызов Login дает ошибку 3?
Это происходит, если путь к подпапке HCNetSDKCom не зарегистрирован через NET_DVR_SetSDKInitCfg или системную переменную PATH/LD_LIBRARY_PATH, из-за чего модули авторизации не смогли загрузиться в адресное пространство процесса.
Можно ли вызывать NET_DVR_Init повторно в каждом потоке?
Нет, функция NET_DVR_Init не является потокобезопасной для множественного вызова. Она должна вызываться один раз в главном потоке программы.
Как настроить логирование ядра HCNetSDK для отладки инициализации?
Используйте функцию NET_DVR_SetLogToFile(3, "./sdk_log/", true) сразу после вызова NET_DVR_Init.
Что делать, если в Linux приложение выдает ошибку 3 при запуске под non-root пользователем?
Проверьте права на чтение и исполнение (.so) файлов SDK и подкаталога HCNetSDKCom: chmod -R 755 /opt/hikvision/sdk/.