视频捕获应用程序无法与DirectShow兼容设备一起使用

时间:2013-04-10 22:17:20

标签: c++ directshow video-capture

我使用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类标识符)。

1 个答案:

答案 0 :(得分:0)

未实现IAMStreamConfig的视频捕获设备是一种可能的情况,尽管它不是预期的。实际上它看起来更像是视频设备或底层驱动程序上的错误,但您可能希望更新您的应用程序以使用默认媒体类型以防丢失IAMStreamConfig(您仍然可以使用GraphEdit来检查设备是否正常运行)