在C++中使用媒体基础和Windows 8捕获时出现问题
Problems capturing with Media Foundation & Windows 8 in C++
这将是我在StackOverflow中寻找解释几天后的第一个问题。请对我的提问温柔一点,因为我知道我的问题作为一个普通问题有点奇怪。
我制作了一个MF捕获视频应用程序,基于Microsoft的示例"CaptureToFile"。它确实在Windows 7 x64上工作。我顺利升级到Visual Studio 2013。当我试图把所有的开发都放在Windows 8.1 x64机器上时,出现了问题。
该应用程序编译和执行没有错误,但在异步模式下使用m_pReader->ReadSample()无法捕获样本;只有前两个样本到达OnReadSample方法;并且必须有"控制"样本,因为IMFSample在所有样本中都为null。之后,该应用程序会被挂起等待数据。
我尝试过原始的MFCaptureToFile样本,结果也很糟糕。
当然,我认为硬件和软件是相似的(相同的捕获卡具有相同的驱动程序版本,都是台式电脑…)
你知道这种行为可能的原因吗?在Win7中,一切都完美无瑕!或者至少,如果你能让我了解一下寻找的新途径
提前感谢
更新:游戏中有另一个"玩家"。查看线程,我发现一个工作线程位于实时工作队列容器"RTWorkQ.dll"中,该容器仅适用于Windows 8。我将继续调查。在此期间,如果你有什么想法,有什么要分享的,我很乐意听你的。
更新2:我修改了示例MFCaptureToFile以同步获取视频示例,因为我认为问题可能是由于异步行为造成的;与队列相关。我不得不说,即使发生了这种变化,这个问题仍然存在。第二次尝试读取样本时,应用程序会被"挂起",等待一个永远不会到来的读取。
更新3:我尝试过使用另一种MF方式捕获视频的CaptureEngine示例应用程序(MFCaptureEngine)。它完美地构建和运行,但在启动"预览"时不会显示任何图像,也不会记录任何有用的、只能播放的文件。
更新4:我已经在Windows8PRO中安装了VisualStudio2010Ultimate。示例MFCaptureToFile在该示例中再次失败。它无法从帧抓取器读取第二个样本。我开始认为捕获卡(Datapath VisionRGB-E1S)和Windows 8 PRO之间可能不兼容,尽管驱动程序确保它在这个平台上运行良好,并且测试程序显示图像。明天我将用一个外部USB网络摄像头进行测试。
最后,我找到了这个问题的原因。
随着Windows 8.1的发布,微软推出了适用于Windows 8.1的新AVStream接口KS_FRAME_INFO结构中有一个很小但非常重要的更改,即新的FrameCompletionNumber成员。
已完成队列中帧的标识序列号。此编号用于验证帧顺序是否正确。当该值为0,帧被取消。此成员从开始可用Windows 8.1。
DirectShow不在乎这个数字。媒体基金会也很关心。
所以,你不能只在用户模式方面解决这个问题。制造开发人员必须发布更新。顺便说一句,我有两个网络摄像头-罗技C270和创意直播社交高清。罗技支持Metro,而创意则不支持。
我只使用了几行代码就成功地更新了我的驱动程序(以正确设置FrameCompletionNumber)。
UPD。相似螺纹http://www.osronline.com/showthread.cfm?link=255004
这一定是帧抓取器Datapath VisionRGB-E1S的问题。我试过使用全新的USB网络摄像头LifeCam Studio,一切都很好。
我将留给未来的其他线程,为什么Windows 8和Windows 7之间的这种不成对行为,但它可能与用户模式访问有关。。。
我遇到了同样的问题:
-
IMFSourceReader
成功获得 -
reader->SetCurrentMediaType()
未报告错误。 -
reader->ReadSample()
成功。
则只调用OnReadSample()
一次,hrStatus
自变量0x80070491
对我来说,问题是我修改了视频子类型IMFMediaType
,然后将其作为当前媒体类型应用于读取器。
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 父进程意外被子 cmd 杀死.exe运行 java jar 的进程 - WINDOWS 7 问题 - C++
- 在 Windows 服务中使用命名管道时出现问题
- 在 Windows 10 上安装 Boost 时遇到问题
- CMake Qt建立在Windows链接器问题之上
- C++ Windows.h 的问题,在 vs17 中非法声明匿名'struct'
- 在 Windows 问题上连接到企业 WiFi
- C++、Python 3.7.4、SWIG 4.0.0 和 Windows 10 的问题 - ModuleNotFoun
- Windows 凭据提示问题,CredUnPackAuthenticationBuffer 错误 50
- 使用 Bazel (Windows) 构建 Tensorflow 的问题 => 使用 Tensorflow C++ API
- 显示和隐藏Windows 10屏幕键盘(osk.exe)时遇到问题
- 在 Windows 上使用 Emscripten 和 CMake 编译 GLFM 的问题
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- 在 Visual Studio 的 Windows 上安装 MPIR 时遇到问题
- 将Qt Creator Projet移植到Windows时的z.lib问题
- 问题:Windows 10:QMYSQL驱动程序未加载
- 自旋控制位置问题(Windows)
- 通过无线互联网连接保持长期持续的套接字连接问题Windows
- 使用什么Qt GUI容器?还有相关的视频显示问题- Windows 7