- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个对视频文件进行分析的应用程序。作为 DirectShow 的专家,我使用简单的代码进行分析所有帧(SampleGrabber
、Callback
等)。
这适用于所有媒体文件,即使使用VideoInfoHeader2
结构(尽管它不应该,如各处所述)。
问题在于抓取单帧。为此,我使用了 IMediaDet
。如果只有 VideoInfoHeader2
而没有 VideoInfoHeader
,则不会这样做。
我尝试修改我的分析代码(OneShot、Seek),但没有成功。互联网上所有与此相关的资源都不是很有帮助,因为它们指向不再可访问的 SDK/DX 示例,或者它们只是说修改将“很容易”。好吧,也许对于 DX 专家...(但我需要使用这辆车,而不是先 build 它......;-)
随着事情对我变得越来越重要,我的“解决方法”是使用 VideoInfoHeader2
重新编码所有视频,使用 VideoInfoHeader
保存它们,然后进行分析/抓取
非常耗费资源,与智能相反...任何帮助表示赞赏。
最佳答案
您概述了仍然是最简单解决方案的必要步骤(前提是您不放弃并使用 Windows API;相比之下,使用第三方库可能更容易,但这超出了本问题的范围)。
Sample Grabber 和 IMediaDet
是已弃用的 DirectShow 编辑服务的一部分,其开发早已停止。如果您对库存 API 不满意,则必须使用更灵活的替代品。例如,您可以从较早的 DirectX 或 Platform SDK 中获取类似 Sample Grabber 示例的源代码,并将其扩展以支持 VIDEOINFOHEADER2
。
IMediaDet
只不过是 COM 类,它在内部构建自己的图来尝试解码视频。它不灵活,几乎每次构建自己的图都是更可靠的解决方案。
微软对这个问题的回答是——因为他们放弃了 DirectShow 开发——更新的 API Media Foundation。然而,这个“答案”不太好是有原因的:操作系统兼容性有限,对编解码器和格式的支持有限,全新的 API 与 DirectShow 几乎没有共同之处,您需要重新设计您的应用程序。
总而言之,您要么必须使用一种流行且经过解释的方法(无论它们看起来没有多大用处)找到 Sample Grabber 替代品,要么切换到另一个 API 或第三方库。或者,另一种可能的解决方案是使用能够解码为 VIDEOINFOHEADER
格式的媒体类型的不同过滤器/编解码器。
关于c++ - VideoInfoHeader2结构时抓帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333031/
我是一名优秀的程序员,十分优秀!