我正在使用回调机制来抓取媒体应用程序中的网络摄像头帧。它起作用,但由于在回调本身内执行了某些额外的缓冲区功能,因此速度很慢。
现在我正在尝试另一种获取帧的方法。也就是说,调用方法并抓取帧(而不是回调)。我在CodeProject中使用了一个使用IVMRWindowlessControl9 :: GetCurrentImage的示例。
我遇到了以下问题。
我怀疑的是,VMR特定功能是否依赖于不同平台上的摄像头驱动程序?否则,这种差异怎么会发生?
这是应用程序设置的值还是VMR操作的驱动程序设置?这是如何配置的? 最后,哪个是抓住网络摄像头帧的最佳方法?回调方法?还是直接的方法?
提前致谢,
答案 0 :(得分:2)
IVMRWindowlessControl9::GetCurrentImage
适用于偶尔的快照,而非常规图像抓取。
来自MSDN:
无论过滤器处于什么状态,都可以随时调用此方法 无论是跑步,停止还是暂停。 然而,经常打电话给 此方法会降低视频播放性能。
此方法从视频内存中读取,这首先是缓慢的。此方法会对RGB色彩空间进行转换(即再次缓慢),因为此格式最适合非流式应用,并且兼容性问题较少。
总而言之,你可以用它来定期抓图像,但这不是你应该做的。要以流速捕获,您需要在管道中使用过滤器,或使用带回调的Sample Grabber。