【发布时间】:2013-04-27 18:43:24
【问题描述】:
我们有一个对视频流执行处理的 c# 应用程序。这是一个低级应用程序,它接收位图格式的每一帧,所以基本上我们每秒需要 25 张图像。此应用程序已经在我们的一些媒体源上运行,但我们现在需要添加一个网络摄像头作为输入设备。
所以我们基本上需要从网络摄像头连续捕获位图图像,以便我们可以将所有这些帧作为“流”传递给我们的应用程序。
访问网络摄像头并直接从网络摄像头读取实际帧作为单个图像的最佳和最简单的方法是什么?我还在起步阶段。
有大量的库允许访问网络摄像头,在 Windows 面板上预览网络摄像头的内容,然后使用屏幕捕获再次捕获此图像。不幸的是,这在每秒捕获 25 帧时不会为我们提供必要的性能。 IVMRWindowlessControl9::GetCurrentImage 已被提及为另一种选择,但这似乎再次针对不频繁的快照而不是恒定的图像流。 Directshow.Net 被许多人认为是一个很好的候选者,但目前还不清楚如何简单地从网络摄像头中获取图像。此外,许多消息来源表示担心 Microsoft 不再支持 Directshow。此外,我见过的实现需要 ImageGrabber,它显然也是no longer supported。 MS 的新替代品似乎是 Media Foundation,但我的研究还没有找到任何关于如何实现它的工作示例(我不确定这是否会在旧版本的 Windows 上运行,例如 XP)。 DirectX.Capture 是一个很棒的库 (see a nice implementation),但似乎缺少直接获取视频图像的过滤器和方法。我也开始关注Filters and Filter Graphs,但这看起来非常复杂,感觉有点像“重新发明轮子”。
总的来说,上面简要提到的所有解决方案似乎都比较陈旧。有人可以指点我一步一步的指南,让网络摄像头在 C# 中工作并每秒从中抓取几张图像吗? (我们还必须在某些时候制作音频,因此不排除视频的解决方案将是最有帮助的)。
【问题讨论】:
标签: c# webcam directshow ms-media-foundation