0

我正在使用回调机制来获取媒体应用程序中的网络摄像头帧。它可以工作,但由于在回调本身中执行了某些额外的缓冲区功能,所以速度很慢。

现在我正在尝试另一种获取帧的方法。也就是说,调用一个方法并抓取帧(而不是回调)。我在 CodeProject 中使用了一个使用 IVMRWindowlessControl9::GetCurrentImage 的示例。

我遇到了以下问题。

  1. 在 Microsoft 网络摄像头中,预览版在 Windows 7 上没有呈现(仅黑屏)。但同一个摄像头在 XP 上呈现了预览版。

我的疑问是,VMR 特定功能是否会依赖于不同平台上的相机驱动程序?否则,怎么会出现这种差异?

  1. 无论示例应用程序在哪里工作,我都观察到生成的 BITMAPINFOHEADER 结构的 biBitCount 成员是 32。

这是应用程序设置的值还是 VMR 操作的驱动程序设置?这是如何配置的?最后,获取网络摄像头帧的最佳方法是什么?回调方法?还是直接方法?

提前致谢,

4

1 回答 1

2

IVMRWindowlessControl9::GetCurrentImage旨在用于偶尔的快照,而不是用于常规图像抓取。

引用 MSDN:

无论过滤器处于什么状态,无论是运行、停止还是暂停,都可以随时调用此方法。但是,频繁调用此方法会降低视频播放性能。

这种方法从一开始很慢的视频内存中读回。这种方法会转换(即再次变慢)到 RGB 颜色空间,因为这种格式最适合非流式应用程序,并且兼容性问题较少。

总而言之,您可以将其用于定期图像抓取,但这不是您应该做的。要以流传输速率捕获,您需要在管道中使用过滤器,或使用带有回调的 Sample Grabber。

于 2012-05-17T07:14:46.513 回答