我正在考虑更新目前使用DirectShow进行视频捕获的程序。虽然DirectShow似乎运行良好,但我想知道是否有更强大或最新的SDK或API,我应该研究。一些有用的功能将是:
我调查了LeadTools Multimedia Capture SDK和VisioForge Capture SDK以及Microsoft Media Foundation,但我想知道其他人在将时间或金钱用于其中一种替代方案之前已经成功使用了什么。我不在乎这是商业产品还是开源产品。
编辑:虽然我很欣赏尝试解决我的特定问题,但这个问题应该是关于DirectShow的替代方案。所以,我删除了所有对我特定问题的引用。解决这个问题需要等待另一个问题。答案 0 :(得分:1)
所有捕获板都有自己的定时器。
您可以尝试查询IReferenceClock
的源过滤器,并使用自己的定时器,该定时器通常比PC的定时器更准确。
如果您使用ISampleGrabber
,那么从Sample Grabber的输入引脚调用Receive
时,回调函数被称为微秒,它们只有几行之外源代码。
您的帧源定时似乎不准确(不是IMediaSample
中设置的时序,而是帧的交付时间)。
生成帧的源过滤器是什么?
答案 1 :(得分:1)
DirectShow API非常好,我在Windows平台上找不到更好的东西。 DirectShow已被Media Foundation取代,后者仅为Vista(及更高版本)操作系统。
在人们使用Media Foundation开始大规模开发之前,我们将不得不等待XP死亡......
我可以问你为什么要寻找DirectShow的替代方案 - 它是一个非常受支持的API - 在MSDN上有很好的文档记录,并且在MSDN上有一个非常活跃的friendly forum用于DirectShow开发。
答案 2 :(得分:0)
问题可能只是您用于计时的方法。您使用的是high performance timer API吗?
答案 3 :(得分:0)
VideoLan可能是您的选择。
答案 4 :(得分:0)
LeadTools和VisioForge SDK只是DirectShow +它们的一些自定义过滤器的包装器! DirectShow没有真正的替代方案可以在Windows PC上捕获。也许在使用MediaFoundation的Win8上?一些硬件供应商有自己的捕获程序,但大多数只使用DirectShow。
我认为你的问题不是DirectShow。你的回叫有多长时间了?因为如果你对图像做一些分析,那么你需要快速做到这一点。回调中的时间不是重要的,而是你得到的mediasample中的演示时间!这应该是预览样本+ 33毫秒。
答案 5 :(得分:0)
FFmpeg可以接收directshow输入并操纵它,它是免费的。也许AviSynth ......