在C ++中使用Media Foundation和Windows 8捕获问题

维克

寻找几天的解释后,这将是我在StackOverflow中的第一个问题。求求你了,请问我要温柔些,因为我知道我的问题有点奇怪,这是一个普遍的问题。

我基于Microsoft示例“ CaptureToFile”制作了一个MF捕获视频应用程序。它确实可以在Windows 7 x64上运行。我没有问题地升级到了Visual Studio 2013。当我尝试将所有开发都放在Windows 8.1 x64计算机上时,出现了问题。

该应用程序可以编译并执行,没有错误,但是无法通过在异步模式下使用m_pReader-> ReadSample()来捕获样本仅前两个样本到达OnReadSample方法;并且必须有“控制”样本,因为IMFSample在所有样本中均为null。之后,该应用将“挂起”以等待数据。

我已经尝试了原始的MFCaptureToFile示例,但结果却相同。

当然,我认为硬件和软件是相似的(相同的采集卡和相同的驱动程序版本,都是台式机...)

您知道这种行为的任何可能原因吗?在Win7中,一切正常!或者至少,如果您能向我介绍一些新的途径来发现正在发生的事情

提前致谢

更新:游戏中还有另一个“玩家”。查看这些线程,我发现一个工作线程位于实时工作队列容器“ RTWorkQ.dll”中,仅适用于Windows8。我将继续进行调查。同时,如果您有任何想法要分享的东西,我很高兴听到您的声音。

更新2:我修改了示例MFCaptureToFile以同步获取视频样本,因为我认为问题可能是由于异步行为引起的。与队列有关。我必须说,即使进行了此更改,问题仍然存在。第二次尝试读取样本时,应用程序被“挂起”,等待永远不会到达的读数。

更新3:我已经尝试过使用另一种MF方式捕获视频(MFCaptureEngine)CaptureEngine示例应用程序。它可以完美地构建和运行,但是在启动“预览”时不显示任何图像,并且不记录任何有用的,只能播放的文件。

更新4:我已经在Windows 8 PRO中安装了Visual Studio 2010 Ultimate。在示例MFCaptureToFile示例再次失败。它无法从抓帧器中读取第二个样本。我开始认为这可能是捕获卡(Datapath VisionRGB-E1S)与Windows 8 PRO之间的不兼容,尽管驱动程序确保它在该平台上可以正常工作,并且测试程序可以显示图像。明天我将使用外部USB网络摄像头进行测试。

达兰伯

最后,我已经弄清楚了这个问题的原因。

在Windows 8.1版本中,Microsoft引入了Windows 8.1的新AVStream接口。KS_FRAME_INFO结构中有一个很小但非常重要的更改-新的FrameCompletionNumber成员。

已完成队列中帧的标识序列号。此数字用于验证正确的帧顺序。当该值为0时,该帧被取消。此成员从Windows 8.1开始可用。

DirectShow不在乎这个数字。和MediaFoundation关心。

因此,您不能仅在用户模式端解决此问题。制造商开发人员必须发布更新。顺便说一句,我有两个网络摄像头-Logitech C270和Creative Live Socialize HD。Logitech支持Metro,而Creative不支持。

我仅用几行代码就成功更新了驱动程序(以正确设置FrameCompletionNumber)。

UPD。类似线程http://www.osronline.com/showthread.cfm?link=255004

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用g ++ 8和c ++ 20的std :: async的编译问题

如何使用Qt在Windows和Linux上捕获Ctrl + C

使用C#和WPF阻止Windows上的屏幕捕获

在C问题中使用time()和clock()

如何在不具有拓扑的UWP中使用Windows Media Foundation

在c中使用'?? =','?? <'和'??>

C ++:lambda函数和捕获列表出现问题

在 Windows 10 中使用 FFMpeg 流式传输和捕获 HLS

如何在Windows中使用C ++输出和输入UTF8或UTF16 Unicode文本?

在C ++中使用cin的问题

在Python中使用正则表达式识别和捕获文本时遇到问题

Media Foundation捕获反转图像

在Rails 4中使用Foundation和Turbolinks时遇到问题

使用Media Foundation C#剪切视频剪辑

使用SinkWriter(Media Foundation)C时发生内存泄漏

在C#Windows Form和XML中使用GetElementsByTagName

C ++在虚拟方法中使用捕获lambda

在C#中使用.matches .Concat进行正则表达式和正确的捕获

如何在Windows Media Foundation中使用“ H.264 UVC 1.5摄像机编码器”

在C程序中使用_和__

使用 Visual Stuido 在 C 中使用 scan_s()、printl_s() 和 char 的问题

使用 phpmailer 时捕获和显示错误的问题

使用golang在Windows和Linux中捕获ctrl + c或任何其他终止信号的进程

在Windows 8 C#中使用Windows.Data.Json解析Json

编译C ++源以在Windows Store应用程序(Windows 8)中使用它们

在c ++和c中使用opencv

Windows Media Foundation:IMFSourceReader::SetCurrentMediaType 执行时间问题

从图像创建MPEG4视频时的分辨率问题(Windows Media Foundation)

在Linux机器中使用套接字发送和接收文件时出现C ++问题