我使用videoInput库(使用DirectShow)在Windows 7上使用Qt在C ++中开发了一个视频捕获应用程序。我的应用程序与我之前尝试的所有设备(一些内置捕获设备,网络摄像头,Pinnacle Dazzle DVC 100,Pinnacle Studio电影盒,甚至陷入困境的PixelView PlayTV USB Hybrid)都能很好地工作,但现在我买了一个AVerMedia DarkCrystal HD Capture站(为了支持高清捕捉),它根本不起作用。
根据AVerMedia网站,它完全兼容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
类标识符)。
答案 0 :(得分:0)
未实现IAMStreamConfig
的视频捕获设备是一种可能的情况,尽管它不是预期的。实际上它看起来更像是视频设备或底层驱动程序上的错误,但您可能希望更新您的应用程序以使用默认媒体类型以防丢失IAMStreamConfig
(您仍然可以使用GraphEdit来检查设备是否正常运行)