【问题标题】:Creating custom video DShow codec创建自定义视频 DShow 编解码器
【发布时间】:2011-12-29 20:27:49
【问题描述】:

我已经搜索过(谷歌和论坛),但我仍然找不到答案。我通过这个帖子接近了这个网站,

Custom File Format And Codec?

但这并不能直接回答我的问题。

基本上,我想创建一个自定义视频编解码器,用作 DShow 过滤器。我不是在问如何对视频进行编码和解码,我需要/想知道如何设置我的过滤器以与媒体播放器(如 WMP)正确交互。

平台:Windows 7 64 位

媒体播放器:任何。如果将自定义编解码器与其他播放器连接起来更容易,请务必推荐该播放器。

语言:C++

我的理解是,如果我以 .ax 或 .dll 的形式创建 DShow 过滤器,我只需使用 regsvr32 将其注册到 Windows,然后 WMP 将能够使用该编解码器打开文件。在这种情况下,我将只使用一个 AVI 容器来容纳我的编解码器。

我之前为 DAW 制作过 VST 插件,并且对程序的结构有一些要求。它需要包含主机程序(逻辑、专业工具等)用来处理音频数据的某些功能(具有特定名称)。比如有process和processReplacing方法,都是必须的。

我一直在尝试找出视频编解码器的结构,以便我可以与标准播放器正确连接,但无济于事。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: video directshow codec


    【解决方案1】:

    在 DirectShow 中,您选择新的/唯一的视频子类型标识符(GUID,因此您可以真正获得唯一的标识符),创建编码器和解码器过滤器,使用 DirectShow Intelligent Connect 正确注册它们,一切顺利.

    编码器和解码器过滤器是注册用于对视频数据进行特定转换的 COM 对象。 MSDN 在Writing Transform Filters 中对其进行了描述,但假设您熟悉 DirectShow 概念。

    如果您希望能够将数据存储到 AVI 容器中,您的子类型标识符仅限于 32 位“四字符代码”(FourCC),它将使用预定义的映射转换为子类型 GUID。

    借助 DirectShow 的智能连接,支持 DiectShow 的应用程序将能够自动定位和安装您的解码器,以便播放数据。 WMP 在播放文件时使用 DirectShow 作为第二个更改 API,因此 WMP 也将能够接受在内部使用您的编解码器的文件。

    另外,突然编写 DirectShow 过滤器可能是一件复杂的事情。由于您只对视频编码器/解码器过滤器感兴趣,因此您可能更喜欢编写 DirectX Media Object (DMO)。标准 DMO Wrapper Filter 会将您的 DMO 包装到 DirectShow 过滤器中。写一个 DMO 肯定更容易,包括你可以使用ATL 作为 COM 基础。

    【讨论】:

    • 哇。这份文档是如何避开我的 Google 搜索的?
    • 无论如何,感谢您提供的信息。我会浏览这些文章,看看我能做些什么。
    • @RomanR。您链接的那个 DMO 页面说 DMO 已被 MFT 取代。您对此有何看法?如果要开始一个新项目,您会推荐 MFT 还是 DMO?我担心的是,有时微软有时会用新的协议层取代协议层,但它从未被完全采用并最终处于“边缘”状态。如果答案是 MFT,是否有与 DMO Wrapper Filter 等效的功能,还是 MFT 不需要?
    • MFT 与 Media Foundation API 隔离。这是一个较新的——是的——但你应该有理由使用它,因为它的覆盖范围比 DirectShow 更差。 FYI、DMO 和 MFT 接口也很相似,微软甚至提供了双 DMO/MFT 对象。
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2016-06-08
    • 2011-06-16
    • 2020-06-27
    • 2017-06-28
    相关资源
    最近更新 更多