我正在开发一个对视频文件进行分析的应用程序。
作为DirectShow的专家,我使用简单的代码进行分析
所有帧(SampleGrabber
,Callback
等)。
这适用于所有媒体文件,即使使用解码也是如此
VideoInfoHeader2
结构(虽然它不应该如所说的那样)。
问题在于抓住一个框架。
为此,我使用了IMediaDet
。如果只有VideoInfoHeader2
而没有VideoInfoHeader
,则无法执行此操作。
我尝试修改我的分析代码(OneShot,Seek),但它没有。 互联网上有关此问题的所有消息来源都不是很有用,因为它们指向不再可访问的SDK / DX示例,或者他们只是说修改会“简单”。 好吧,也许对于DX专家来说...... (但我需要使用汽车,而不是先制造它......; - )
随着事情变得越来越重要对我来说更重要的是我的“解决方法”是使用VideoInfoHeader2
重新编码所有视频,并使用VideoInfoHeader
保存这些视频,并对其进行分析/抓取。
非常耗费资源,与智能相反...... 任何帮助表示赞赏。
答案 0 :(得分:1)
您概述了必要的步骤仍然是最简单的解决方案(前提是您不要放弃并使用Windows API;使用第三方库可能比较容易,但这超出了此问题的范围)
示例Grabber和IMediaDet
是已弃用的DirectShow编辑服务的一部分,其开发很久以前就已停止。如果您对库存API不满意,则必须使用更灵活的替代品。例如,您可以从较旧的DirectX或Platform SDK获取类似Sample Grabber示例的源代码,并将其扩展为支持VIDEOINFOHEADER2
。
IMediaDet
只是COM类在内部构建自己的图,试图解码视频。它不灵活,几乎每次构建自己的图表都是更可靠的解决方案。
微软对这个问题的回答是 - 因为他们放弃了DirectShow开发 - 更新的API媒体基金会。但是有理由为什么这个"回答"不太好:有限的操作系统兼容性,对编解码器和格式的有限支持,与DirectShow几乎没有共同点的全新API,您需要重新设计您的应用程序。
总而言之,您必须使用一种流行的和解释过的方法(无论它们看起来没那么有用)找到Sample Grabber替换品,或者切换到另一个API或第三方库。或者,另一种可能的解决方案是使用能够解码为VIDEOINFOHEADER
格式化媒体类型的不同过滤器/编解码器。