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

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

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

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.

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