Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NET_REAL_ALREADY_SAVING (18) IP-Телефония и СКУД

Dahua NetSDK Ошибка 18: NET_REAL_ALREADY_SAVING — Повторный запуск сохранения

Обновлено: 24.08.2026 · Официальная документация ↗

Проблемы при записи локального архива с потока Realplay:

  • Функция CLIENT_SaveRealData возвращает FALSE, а CLIENT_GetLastError() возвращает код 18.
  • Повторный запрос на сохранение одного и того же живого потока в файл вызывает сбой бизнес-логики.
  • Невозможность ротации файлов записи (роликов по 15/30 минут).

Ошибка NET_REAL_ALREADY_SAVING (18) генерируется, если для активного дескриптора живого видеопотока (lRealHandle) уже был вызван метод сохранения данных CLIENT_SaveRealData, и запись в файл не была предварительно остановлена.

1. Корректный алгоритм ротации файлов записи

Для регулярной нарезки архива на фрагменты обязательно останавливайте предыдущую запись перед стартом новой:

// 1. Проверяем флаг состояния записи
if (bIsSaving) {
    CLIENT_StopSaveRealData(lRealHandle);
    bIsSaving = FALSE;
}

// 2. Инициируем сохранение в новый файл
char szFileName[256] = "C:\\Recordings\\cam01_part2.dav";
if (CLIENT_SaveRealData(lRealHandle, szFileName)) {
    bIsSaving = TRUE;
} else {
    DWORD dwErr = CLIENT_GetLastError(); // Анализ ошибки
}

2. Проверка многопоточной синхронизации

Если запросы на запись вызываются по триггерам событий (например, детекция движения СКУД или датчик двери), используйте мьютексы (std::mutex), чтобы исключить параллельные вызовы CLIENT_SaveRealData для одного и того же хэндла потока.

💡 Практика специалистов: Для надежного VMS-решения рекомендуется не использовать встроенный CLIENT_SaveRealData, а получать фреймы через fRealDataCallBack и управлять записью через собственные очереди с асинхронной записью на NVMe/HDD.

Частые вопросы (FAQ)

Можно ли параллельно сохранять поток в два разных файла через CLIENT_SaveRealData?

Нет, один lRealHandle поддерживает только один активный выходной файл. Для записи в несколько мест используйте коллбэк CLIENT_SetRealDataCallBack и сохраняйте буферы вручную.

Какой формат файлов создает CLIENT_SaveRealData?

Создается нативный бинарный контейнер Dahua DAV (содержащий сырые H.264/H.265/AAC потоки с таймстемпами).

Повредится ли файл, если вызвать CLIENT_StopRealPlay без предварительного CLIENT_StopSaveRealData?

Да, файл может остаться незакрытым (missing file footer). Всегда вызывайте CLIENT_StopSaveRealData перед закрытием самого Realplay канала.

Влияет ли ошибка 18 на текущее отображение видео в UI?

Нет, рендеринг видеопотока продолжается штатно, сбой затрагивает исключительно подсистему записи на локальный диск.

Полезные материалы
Рекомендуем