Сбой DirectShow с черными рамками и 0x80070005 на Win7 / Win10 - PullRequest
0 голосов
/ 05 июля 2018

Я занимаюсь разработкой небольшой библиотеки видеозахвата поверх videoInput (тонкая оболочка для DirectShow), и в последнее время я столкнулся с сложной проблемой.

Библиотека захватывает и сохраняет видеокадры в своем внутреннем формате, используя следующий код:

if (VI->setupDevice(m_deviceIndex, width, height)) {
  //... checks for frame size etc
  //...
  auto pixels = VI->getPixels(m_deviceIndex, true, true);
}

Этот код был построен в VS 2017 с использованием vc140 / sdk8.1, и он отлично работал на различных машинах под управлением Windows 7, 8.1 и 10, которые включали типичные офисные настольные и портативные компьютеры, несколько машин для разработки, крайне ограниченное производство Гости рабочего стола и VirtualBox.

Затем мы обнаружили, что на одном компьютере с Windows 7 videoInput выдает черные рамки (нулевые пиксели), даже если сама камера правильно работает с другими приложениями. Мы протестировали несколько разных моделей камер с одинаковым эффектом.

Я собрал примеры DirectShow из официального репозитория Microsoft и обнаружил, что при запуске образцы терпят неудачу с ошибкой hr = 0x80070005 (доступ запрещен), независимо от запуска в режиме повышенных прав. Здесь , где происходит ошибка (amcap.cpp, строка 787).

Поскольку официальные образцы предположительно должны работать «из коробки», я подозревал, что в более поздних версиях SDK / MSVC может быть ошибка совместимости, и попытался скомпилировать с VS 2010, но это не помогло. Я также пробовал разные серверы захвата, используя пример Windows Media Foundation из того же хранилища, а также OpenCV с ffmpeg - все с тем же эффектом.

Затем мы обнаружили другую машину под управлением Windows 10, у которой была точно такая же проблема, указывая, что это не проблема обратной совместимости. Между тем, те же сборки работали нормально на моих тестовых машинах, а сторонние приложения, такие как Webcamoid , работали на проблемных ПК.

Мое предположение заключается в том, что должен быть предоставлен какой-либо флаг совместимости или разрешение, поскольку камера отлично работает со сторонним программным обеспечением, но я не знаю, где их искать, а Windows 7 не ' Начните с того, что у меня нет настроек разрешения камеры, если я не ошибаюсь.

Теперь, кто-нибудь знает, что на земле может быть не так? Буду очень признателен за любой совет.

Спасибо-х.

1 Ответ

0 голосов
/ 09 июля 2018

Проблема решена.

Проблема оказалась из-за Kaspersky Endpoint Security, который имеет возможность ограничить потоковое видео для неизвестных программ. Вот почему приложения камеры из Магазина работали нормально (им доверяли по умолчанию), а наше приложение - нет.

Предостережение emptor.

...