Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Dahua NetSDK Ошибка 13: NET_DEC_CLOSE_ERROR — Решение и траблшутинг

Обновлено: 24.08.2026  ·  Официальная база знаний

При попытке остановить воспроизведение или освободить ресурсы декодера через 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. Проверка последовательности завершения сессии

Нарушение строгого порядка дерегистрации вызовов — главная причина ошибки. Остановка должна производиться в следующем порядке:

  1. Остановка приема сетевого потока: CLIENT_StopRealPlayEx(hPlayHandle).
  2. Остановка отрисовки кадра: PLAY_Stop(nPort).
  3. Закрытие потока декодера: PLAY_CloseStream(nPort).
  4. Освобождение порта 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. Если окно уничтожается раньше закрытия потока, декодер пытается адресоваться к невалидному графическому контексту.
Практический опыт инженера: Частая архитектурная ошибка — вызов CLIENT_StopRealPlay из вторичного потока обратного вызова (fRealDataCallBack). Сетевые вызовы закрытия должны выполняться исключительно в основном контексте управления.

Частые вопросы (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.