【问题标题】:Video capture application won't work with DirectShow-compatible device视频捕获应用程序无法与 DirectShow 兼容的设备一起使用
【发布时间】:2013-04-02 23:32:31
【问题描述】:

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

【问题讨论】:

    标签: c++ directshow video-capture


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      相关资源
      最近更新 更多