我使用 videoInput 库(使用 DirectShow)在 Windows 7 上使用 Qt 在 C++ 中开发了一个视频捕获应用程序。我的应用程序适用于我之前尝试过的所有设备(一些内置捕捉设备、网络摄像头、Pinnacle Dazzle DVC 100、Pinnacle Studio 电影盒,甚至是有问题的 PixelView PlayTV USB Hybrid),但现在我购买了 AVerMedia DarkCrystal HD Capture Station(为了支持高清拍摄),它根本无法工作。
根据圆刚网站的说法,它完全兼容 DirectShow,我什至不需要使用它的 SDK。我按照制造商的安装说明进行操作,并且可以使用它自己的捆绑软件(TotalMedia Studio MV)来捕捉视频,所以我想它工作正常。
我尝试运行基于 videoInput 的应用程序以及 AmCap(来自 Microsoft 的 DirectShow 示例),它们的行为方式相同。他们能够找到该设备,检索其友好名称,但没有别的。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
类标识符的方法)。