gpt4 book ai didi

c++ - VideoInfoHeader2结构时抓帧

转载 作者:行者123 更新时间:2023-11-28 05:35:45 24 4
gpt4 key购买 nike

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

这适用于所有媒体文件,即使使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com