Dahua NetSDK Ошибка 19: NET_NOT_SAVING — Ошибка остановки сохранения потока
Сбои при завершении записи потокового видео:
- Функция
CLIENT_StopSaveRealDataвозвращаетFALSEс кодом19. - Попытка остановить запись для канала, на котором сохранение не было запущено или уже завершилось.
- Ложные срабатывания сторожевых таймеров в коде управления записью.
Ошибка NET_NOT_SAVING (19) возникает, когда вызывается функция остановки записи CLIENT_StopSaveRealData для дескриптора видеопотока, на котором процесс сохранения данных не активен.
1. Внедрение конечного автомата состояний канала (State Machine)
Храните статус записи в структуре управления каналом:
enum ChannelState {
STATE_IDLE,
STATE_PLAYING,
STATE_RECORDING
};
struct ChannelContext {
LLONG lRealHandle;
bool bIsRecording;
};
void StopRecording(ChannelContext* pCtx) {
if (pCtx && pCtx->bIsRecording) {
if (CLIENT_StopSaveRealData(pCtx->lRealHandle)) {
pCtx->bIsRecording = false;
} else {
DWORD dwErr = CLIENT_GetLastError(); // Ошибка 19 исключена
}
}
}2. Проверка на автоматическую остановку записи
Если диск переполнился или произошла ошибка записи файла (Error 20), NetSDK автоматически переводит запись в остановленное состояние. Последующий вызов CLIENT_StopSaveRealData закономерно вернет ошибку 19.
Частые вопросы (FAQ)
Критична ли ошибка 19 для работы приложения?
Нет, ошибка 19 является чисто информационной (ID-статус) и сигнализирует о том, что файл уже закрыт.
Нужно ли вызывать CLIENT_StopSaveRealData при разрыве сетевого соединения?
При дисконнекте сокета NetSDK самостоятельно сбрасывает дескрипторы сохранения, поэтому данный вызов вернет ошибку 19.
Может ли ошибка возникать из-за передачи нулевого lRealHandle?
При нулевом хэндле SDK чаще возвращает код NET_INVALID_HANDLE или NET_ILLEGAL_PARAM, но при невалидном ненулевом значении возможен код 19.
Как сбросить внутренний флаг записи в SDK?
Флаг сбрасывается автоматически при успешном вызове CLIENT_StopSaveRealData либо при полном уничтожении потока CLIENT_StopRealPlay.