gpt4 book ai didi

c++ - DirectShow 在 Win7/Win10 上出现黑帧和 0x80070005 失败

转载 作者:行者123 更新时间:2023-11-30 04:59:29 25 4
gpt4 key购买 nike

我正在 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 guest 。

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

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

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

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

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

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

谢谢。

最佳答案

问题已解决。

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

买者自负。

关于c++ - DirectShow 在 Win7/Win10 上出现黑帧和 0x80070005 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com