【问题标题】:DirectShow fails with black frames and 0x80070005 on Win7/Win10DirectShow 在 Win7/Win10 上出现黑框和 0x80070005 失败
【发布时间】:2018-07-05 12:58:42
【问题描述】:

我正在videoInput(DirectShow 的薄包装)之上开发一个小型视频捕获库,最近遇到了一个棘手的问题。

该库捕获视频帧并将其保存为其内部格式,使用代码实现以下效果:

if (VI->setupDevice(m_deviceIndex, width, height)) {
  //... checks for frame size etc
  //...
  auto pixels = VI->getPixels(m_deviceIndex, true, true);
}

此代码是使用 vc140/sdk8.1 在 VS 2017 中构建的,它在运行 Windows 7、8.1 和 10 的一系列不同机器上运行良好,其中包括典型的办公室台式机和笔记本电脑、几台开发机器、高度限制的生产桌面和 VirtualBox 来宾。

然后我们发现在一台 Windows 7 计算机上 videoInput 会产生黑帧(空像素),即使相机本身可以与其他应用程序正常工作。我们测试了几种不同的相机型号以获得相同的效果。

我从官方Microsoft repository 构建了 DirectShow 示例,并发现在启动时示例失败并出现 hr=0x80070005 错误(访问被拒绝),无论在提升模式下运行。 Here's 发生错误的位置(amcap.cpp,第 787 行)。

由于官方示例应该开箱即用,我怀疑在更高版本的 SDK/MSVC 中可能存在兼容性错误,并尝试使用 VS 2010 进行编译,但这没有帮助。我还尝试了不同的捕获后端,使用来自同一存储库的Windows Media Foundation example,以及带有 ffmpeg 的 OpenCV - 效果相同。

然后我们发现另一台运行 Windows 10 的机器也出现了完全相同的问题,说明这不是向后兼容的问题。同时,相同的构建在我的测试机器上运行良好,而像 Webcamoid 这样的第三方应用程序在有问题的 PC 上运行良好。

我最好的猜测是必须授予某种兼容性标志或许可,因为相机可以很好地与第三方软件配合使用,但我不知道在哪里可以找到它们,而 Windows 7 没有如果我没记错的话,一开始就没有相机权限设置。

现在,有人知道地球上可能出了什么问题吗?我将不胜感激任何建议。

谢谢。

【问题讨论】:

    标签: c++ camera video-capture directshow ms-media-foundation


    【解决方案1】:

    问题已解决。

    这个问题原来是由 Kaspersky Endpoint Security 引起的,它有一个选项可以限制未知应用程序的视频流。这就是商店中的相机应用运行良好的原因(默认情况下它们是受信任的),而我们的应用却没有。

    告诫购买者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 2018-10-15
      相关资源
      最近更新 更多