Dahua NetSDK Ошибка 35: NET_RENDER_START_ERROR — сбой видеорендеринга
- Вызов
CLIENT_RealPlayExили функции декодированияPLAY_Playвозвращает ошибку35. - В GUI-приложении отображается черный экран вместо живого видеопотока.
- Приложение падает при попытке отрисовки видео в фоновом потоке или Windows-сервисе (Session 0 Isolation).
- В системных логах фиксируются ошибки Direct3D/DirectDraw Device Creation Failed.
1. Проверка дескриптора окна отрисовки (HWND)
Если передается невалидный HWND или компонент уничтожается раньше видеопотока, SDK не может привязать контекст DirectDraw:
// Если рендеринг GUI не требуется (например, headless backend сервер/аналитика):
// Установите hWnd = NULL и используйте callback декодирования данных
CLIENT_RealPlayEx(lLoginHandle, 0, RealPlayType_Realplay, NULL);
CLIENT_SetRealDataCallBackEx2(lRealHandle, RealDataCallBackEx, dwUser, REALDATA_FLAG_RAW_DATA);2. Проверка зависимостей библиотек PlaySDK
Dahua NetSDK делегирует рендеринг библиотекам декодера (dhplay.dll, play.dll или libdhplay.so под Linux). Убедитесь, что все библиотеки декодирования лежат в каталоге исполняемого файла:
# Linux: проверка линковки зависимостей декодера
ldd libdhplay.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dahua/sdk/lib3. Инициализация Direct3D в GUI приложениях (C# / WPF / WinForms)
При использовании WPF необходимо рендерить кадры через WriteableBitmap или компонент HwndHost, избегая кросс-поточных блокировок UI:
// Запрет аппаратного ускорения при сбоях видеодрайвера
PLAY_SetEngine(nPort, PLAY_ENGINE_GDI, 0); // Переключение на GDI программный рендер
PLAY_Play(nPort, (HWND)panelVideo.Handle);4. Настройка работы в Windows Service / Headless Linux
Службы Windows (Service Control Manager) изолированы от графической подсистемы (Session 0). Для серверного захвата потока никогда не передавайте Handle окна; обрабатывайте YUV/RGB фреймы через fDecCBFun.
Частые вопросы (FAQ)
Можно ли выполнять рендеринг видео в консольном приложении Linux?
В консольном приложении Linux без установленного X11 Server/Wayland рендеринг через HWND невозможен. Необходимо использовать callback fRealDataCallBack и декодировать поток через FFmpeg (libavcodec) самостоятельно.
Как переключить Dahua PlaySDK в режим программного декодирования?
Используйте функцию PLAY_SetEngine(nPort, PLAY_ENGINE_CPU, 0) до вызова PLAY_Play. Это отключит аппаратные вызовы DXVA2/D3D11.
Почему при смене разрешения камеры возникает ошибка 35?
При динамическом переключении разрешения с H.264 на H.265 или с 1080p на 4K буфер рендера переполняется. Необходимо вызвать PLAY_Stop(), затем сбросить буфер декодера PLAY_ResetBuffer() и перезапустить PLAY_Play().
Какая версия Visual C++ Redistributable требуется для корректной работы dhplay.dll?
Для стабильной работы Dahua NetSDK и PlaySDK требуются установленные пакеты Microsoft Visual C++ Redistributable 2010, 2015-2022 (x86 или x64 в зависимости от битности сборки приложения).