Приложение для захвата видео не будет работать с DirectShow-совместимым устройством

Я разработал приложение для захвата видео на C ++ с Qt на Windows 7, используя библиотеку videoInput (которая использует DirectShow). Мое приложение отлично работает со всеми устройствами, которые я ранее пробовал (некоторые встроенные устройства захвата, веб-камеры, Pinnacle Dazzle DVC 100, Pinnacle Studio Movie Box и даже проблемный USB-гибрид PixelView PlayTV), но теперь я купил AVerMedia DarkCrystal HD Capture Станция (для поддержки захвата HD), и она просто не будет работать.

Согласно веб-сайту AVerMedia, он полностью совместим с DirectShow, и мне даже не нужно использовать его SDK. Я следовал инструкциям производителя по установке и могу снимать видео с помощью собственного программного обеспечения (TotalMedia Studio MV), поэтому я полагаю, что оно работает правильно.

Я попытался запустить свое приложение на основе videoInput, а также AmCap (образец DirectShow от Microsoft), и оба они ведут себя одинаково. Они могут найти устройство, получить его понятное имя, но не более того. AmCap говорит Error 80004002: Cannot find VCapture:IAMStreamConfig,

Я отлаживал AmCap и узнал ICaptureGraphBuilder2::FindInterface метод всегда возвращает E_NOINTERFACEто есть такой интерфейс не поддерживается, в таких строках:

hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, gcap.pVCap,
IID_IAMStreamConfig, (void **)&gcap.pVSC);

Вот, gcap.pBuilder это указатель на ICaptureGraphBuilder2, gcap.pVCap это указатель на IBaseFilter, а также gcap.pVSC это указатель на IAMStreamConfig и должен получить возвращаемое значение.

Я предполагаю, что есть какой-то обходной путь, который мог бы помочь мне захватить с этого устройства, так как я мог бы успешно извлечь имя устройства (используя ICreateDevEnum::CreateClassEnumerator метод, основанный на CLSID_VideoInputDeviceCategory идентификатор класса).

0

Решение

Устройство захвата видео, которое не реализует IAMStreamConfig это возможный сценарий, хотя это не что-то ожидаемое. На самом деле это больше похоже на ошибку на видеоустройстве или базовом драйвере, однако вы можете обновить свое приложение, чтобы использовать тип носителя по умолчанию в случае отсутствия IAMStreamConfig (вы все еще можете использовать GraphEdit для проверки работоспособности устройства).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]