VideoInfoHeader2结构时抓取帧

时间:2016-07-12 15:22:38

标签: c++ windows directshow

我正在开发一个对视频文件进行分析的应用程序。 作为DirectShow的专家,我使用简单的代码进行分析 所有帧(SampleGrabberCallback等)。

这适用于所有媒体文件,即使使用解码也是如此 VideoInfoHeader2结构(虽然它不应该如所说的那样)。

问题在于抓住一个框架。 为此,我使用了IMediaDet。如果只有VideoInfoHeader2而没有VideoInfoHeader,则无法执行此操作。

我尝试修改我的分析代码(OneShot,Seek),但它没有。 互联网上有关此问题的所有消息来源都不是很有用,因为它们指向不再可访问的SDK / DX示例,或者他们只是说修改会“简单”。 好吧,也许对于DX专家来说...... (但我需要使用汽车,而不是先制造它......; - )

随着事情变得越来越重要对我来说更重要的是我的“解决方法”是使用VideoInfoHeader2重新编码所有视频,并使用VideoInfoHeader保存这些视频,并对其进行分析/抓取。

非常耗费资源,与智能相反...... 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您概述了必要的步骤仍然是最简单的解决方案(前提是您不要放弃并使用Windows API;使用第三方库可能比较容易,但这超出了此问题的范围)

示例Grabber和IMediaDet是已弃用的DirectShow编辑服务的一部分,其开发很久以前就已停止。如果您对库存API不满意,则必须使用更灵活的替代品。例如,您可以从较旧的DirectX或Platform SDK获取类似Sample Grabber示例的源代码,并将其扩展为支持VIDEOINFOHEADER2

IMediaDet只是COM类在内部构建自己的图,试图解码视频。它不灵活,几乎每次构建自己的图表都是更可靠的解决方案。

微软对这个问题的回答是 - 因为他们放弃了DirectShow开发 - 更新的API媒体基金会。但是有理由为什么这个"回答"不太好:有限的操作系统兼容性,对编解码器和格式的有限支持,与DirectShow几乎没有共同点的全新API,您需要重新设计您的应用程序。

总而言之,您必须使用一种流行的和解释过的方法(无论它们看起来没那么有用)找到Sample Grabber替换品,或者切换到另一个API或第三方库。或者,另一种可能的解决方案是使用能够解码为VIDEOINFOHEADER格式化媒体类型的不同过滤器/编解码器。

相关问题