Hikvision HCNetSDK Ошибка 10: NET_DVR_NETWORK_RECV_TIMEOUT — таймаут приема
- Синхронные функции вызова конфигурации зависают на 3-5 секунд и завершаются с ошибкой
10. - Видеопоток RealPlay замирает, после чего соединение разрывается по таймауту.
- Сервис не может выгрузить большой список журналов тревог (Alarm Logs) за длительный период.
1. Увеличение времени ожидания ответа в SDK
По умолчанию таймаут ожидания данных составляет 3-5 секунд. При работе через спутниковые каналы, мобильные сети или при запросе тяжелых отчетов увеличьте параметры ожидания:
// Увеличение таймаута на получение данных (в миллисекундах)
NET_DVR_SetConnectTime(10000, 3); // 10 секунд на TCP коннект
// Настройка таймаута для подсистемы предпросмотра
NET_DVR_PREVIEWINFO previewInfo = { 0 };
previewInfo.lChannel = 1;
previewInfo.dwLinkMode = 0; // TCP
previewInfo.bBlocked = 0; // 0 - Неблокирующий вызов (асинхронно)2. Оптимизация поисковых запросов в базу данных NVR
Не запрашивайте журналы и логи за месяц одним вызовом. Ограничивайте интервалы поиска короткими отрезками (по 1-2 дня) с использованием пагинации:
NET_DVR_ALARM_LOG_SEARCH_PARAM logParam = { 0 };
logParam.dwSize = sizeof(logParam);
logParam.wSelectType = 0; // Все типы
// Задайте точные границы stStartTime / stEndTime (не более 24 часов)3. Проверка утилизации процессора (CPU Load) видеорегистратора
Проверьте загрузку оборудования через веб-интерфейс или ISAPI (System Status). При 100% загрузке процессора NVR не успевает сформировать SDK ответ до истечения таймера.
4. Перевод видеопотоков на протокол TCP
При использовании UDP (RTP/UDP) потеря ключевых кадров (I-Frames) приводит к замиранию картинки и последующему таймауту сессии. Всегда используйте dwLinkMode = 0 (TCP) в структуре NET_DVR_PREVIEWINFO.
Частые вопросы (FAQ)
Почему веб-интерфейс отвечает быстро, а SDK падает по таймауту (ошибка 10)?
Веб-интерфейс обращается к кэшированным данным через легковесный веб-сервер, а вызов SDK часто инициирует синхронное обращение к аппаратному контроллеру дисков или DSP матрице.
Как избежать блокировки основного потока UI при вызове медленных функций SDK?
Все сетевые вызовы SDK (Login, GetDVRConfig, FindFile) должны выполняться в отдельных фоновых потоках (Worker Threads / Task.Run в .NET) с использованием асинхронных флагов.
Что делать, если ошибка 10 возникает при экспорте видеозаписи?
Снизьте скорость скачивания или переключитесь на покадровое чтение через NET_DVR_GetFileByTime с предварительным поиском точных границ файлов.
Помогает ли увеличение NET_DVR_SetConnectTime при зависшем видеопотоке?
Увеличение таймаута предотвращает ложные разрывы при временных сетевых задержках (Bufferbloat/Jitter), но не решает проблему, если устройство полностью перестало генерировать поток.