我一直在寻找一种从当前硬件叠加层中的视频中获取帧的方法,而且我找不到任何可靠的内容。我发现的一切都是从你正在播放的视频中抓取帧(在你的应用程序中)或创建一个过滤器,我无法找到一个很好的例子,我将如何在我的应用程序中抓取帧(或者应用程序可以一个内存过滤器,不需要“安装”并在播放器中选择?)。
所以,我的问题是我该如何做到这一点?我知道有可能使用过滤器,我已经看到它完成了,我只是没有看到它是如何完成的。有一个很好的例子,如何在过滤器中抓取帧并将它们发送到我的应用程序? 或者是否有某种方式,挂钩进入一些过程调用并以某种方式从那里获取帧?
我已经看到为DirectX完成了所有DirectX信息的挂钩,但是,硬件覆盖不是DirectX,是吗?或者我可以挂钩到DirectX并从那里抓取前端缓冲区吗?
我一直在寻找有关这个问题的资源,但是我一直在圈子里,并且有人想要将叠加层放在DirectX表面上的事实无济于事,很多结果都是关于这个话题的
如果它是相关的,我更喜欢C ++中的解决方案(我的应用程序是C ++,目前使用“常规”方式从屏幕截取屏幕截图,其中黑色矩形用于硬件覆盖)。
答案 0 :(得分:0)
我知道如何使用directshow抓取帧有两种方法。第一个是使用SampleGrabber过滤器,互联网上有很多例子。第二个是使用您的自定义视频导入器,在这种情况下,您必须实现自己的过滤器,您可以使用平台sdk中的baceclasses项目,以便从cbasevideorenderer派生并实现您的渲染方法。
答案 1 :(得分:0)
如果您首先需要应用程序的图像并且硬件覆盖是获取快照的障碍,也许最简单的方法是创建一个简单的应用程序,通过覆盖开始视频播放(您不需要流式传输实际样本!只是暂停图表就足够了)并在运行您感兴趣的应用程序之前运行您的应用程序。
这样你就可以锁定叠加层,这通常是一种有限的资源,例如:每个视频适配器一个,感兴趣的应用程序将无法使用它。