Dahua NetSDK Ошибка 13: NET_DEC_CLOSE_ERROR — Решение и траблшутинг
При попытке остановить воспроизведение или освободить ресурсы декодера через NetSDK/PlaySDK возникают следующие симптомы:
- Функция
CLIENT_StopRealPlayили функции PlaySDK (например,PLAY_Stop,PLAY_CloseStream) возвращают отрицательный статус, аCLIENT_GetLastError()возвращает код13. - Утечка дескрипторов портов воспроизведения (Channel/Port Handles).
- Зависание интерфейса видеостены или клиентского ПО при переключении раскладок камер.
- Процесс видеосервера аварийно завершается при попытке повторного открытия закрываемого канала.
Ошибка NET_DEC_CLOSE_ERROR (13) возникает в тех случаях, когда подсистема декодирования не может штатно остановить конвейер рендеринга, буферизации или освободить поток декодера (DirectX/OpenGL/Software Decoder).
1. Проверка последовательности завершения сессии
Нарушение строгого порядка дерегистрации вызовов — главная причина ошибки. Остановка должна производиться в следующем порядке:
- Остановка приема сетевого потока:
CLIENT_StopRealPlayEx(hPlayHandle). - Остановка отрисовки кадра:
PLAY_Stop(nPort). - Закрытие потока декодера:
PLAY_CloseStream(nPort). - Освобождение порта PlaySDK:
PLAY_FreePort(nPort).
2. Пример безопасного освобождения ресурсов на C++
void SafeCloseDecoderStream(LLONG hRealHandle, LONG nPort) {
if (hRealHandle != 0) {
if (!CLIENT_StopRealPlayEx(hRealHandle)) {
DWORD dwErr = CLIENT_GetLastError();
// Логирование ошибки NetSDK
}
}
if (nPort >= 0) {
PLAY_Stop(nPort);
if (!PLAY_CloseStream(nPort)) {
// Ошибка закрытия потока декодера
}
PLAY_FreePort(nPort);
}
}3. Проверка видеодрайвера и графического контекста
Если декодер инициализирован в режиме аппаратного ускорения (DXVA2, D3D11, NVDEC):
- Обновите драйверы видеокарты на сервере декодирования.
- Проверьте, не уничтожен ли родительский дескриптор окна
HWNDдо вызоваPLAY_Stop. Если окно уничтожается раньше закрытия потока, декодер пытается адресоваться к невалидному графическому контексту.
Частые вопросы (FAQ)
Что конкретно означает код ошибки 13 (NET_DEC_CLOSE_ERROR)?
Код указывает на аппаратный или программный сбой при попытке закрыть канал/поток встроенного декодера видеопотока.
Может ли ошибка возникать из-за неправильного дескриптора окна HWND?
Да, если связанное окно интерфейса Windows/Linux было разрушено до вызова функций PLAY_CloseStream и CLIENT_StopRealPlay, рендерер выдаст сбой при освобождении ресурсов.
Как избежать утечки портов PlaySDK при ошибке 13?
Всегда вызывайте PLAY_FreePort в блоке очистки (cleanup/finally), даже если PLAY_CloseStream вернул ошибку, чтобы вернуть индекс порта в пул доступных.
Влияет ли версия dahua PlaySDK на данную ошибку?
Да, устаревшие версии библиотеки playx.dll имеют известные проблемы дедлока при закрытии H.265 (HEVC) потоков высокого разрешения 4K.