【问题标题】:DirectShow, Media Foundation, DXVA, what?DirectShow,媒体基金会,DXVA,什么?
【发布时间】:2016-08-01 19:44:32
【问题描述】:

我的任务是修改一个使用 DirectShow 进行视频渲染的应用程序。旧应用程序运行良好,但开始显示老化。

由于我有游戏背景,我想我应该这样处理。在使用不同的技术制作了一堆原型之后,我很确定我可以提取视频到纹理的渲染并使用 DirectX 来满足所有客户的要求。

但是,我现在必须选择一种技术来配合,我不能再迷失了......

  • 直接显示
  • 媒体基金会
    • 媒体会话(
    • 媒体引擎 (> Windows 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow 显然是最古老的,但仍然运行良好,这主要是因为可用的编解码器数量巨大。

Media Foundation 是随 Windows Vista 一起引入的,并且在 Windows 8 之前有一个叫做“Media Session”的东西,之后他们引入了“Media Engine”。 如果我是正确的编解码器称为 MFT?是否真的有类似 free-codecs.com 的网站提供这些功能?

除了这两种技术之外,还有 DXVA,它允许您将视频解码卸载到 GPU。目前,我遇到了 3 种不同的类型。 DXVA1 是自 XP 以来一直存在的实现,DXVA2 是较新的 API。 但是什么是 DXVA-HD?它比 DXVA2 更新还是同名?

我真的很想转向 Media Foundation,开箱即用的编解码器非常适合客户想要使用的格式。我所关心的是为它获取编解码器是多么容易... Windows 8+ 默认媒体播放器是否仍然同时具有 DirectShow 和 MF 渲染路径并即时交换它们,或者微软是否完全淘汰了 DirectShow?

我也不太明白 DXVA 应该如何工作。鉴于我想基本上在游戏中渲染视频,只有让所有渲染实际发生在 GPU 上并将应用程序逻辑保留在 CPU 上才有意义,但我真的找不到任何关于如何使用 Media 来利用它的好例子基础。这主要是因为我不知道 DXVA2 和 DXVA-HD 之间的区别。 Windows 7 SDK 附带了所有 3 个实现的示例...

如果有人能以粗体字回答我的问题,纠正我的错误信息,并指出正确示例的方向(DirectX + Media Foundation + DXVA-whatever),我将不胜感激!它可以很简单,就像“结合这 3 个 Windows 7 SDK 示例来获得你想要的东西)。

整个任务的目标是让应用程序再次处于一流的状态,我想绝对确定我会选择像 DirectShow 已经拥有的能够在未来十年持续使用的技术:P

【问题讨论】:

    标签: video directx directshow ms-media-foundation dxva


    【解决方案1】:

    如果我是正确的编解码器称为 MFT?是否真的有类似 free-codecs.com 的网站提供这些功能?

    编解码器通常是软件项目,可以从压缩格式解压缩为未压缩(解码器),反之亦然(编码器)。这两个 API 都不是完全使用编解码器,而是为具有输入和输出的组件定义通用接口,例如DirectShow、DirectX 媒体对象 (DMO) 或其演变 - 媒体基础转换 (MFT) 中的过滤器。

    MFT 是 Media Foundation 的基本组件:编码器、解码器、效果器、缩放器、视频捕获设备 - 都在内部具有 MFT,并且在此之上构建了更高级别的 API。

    由于对 Media Foundation 的兴趣有限,整体第三方 MFT 很少见。虽然您可以在 DirectShow 过滤器外形中找到几乎任何东西,但 Media Foundation 和 MFT 并非如此。

    但是什么是 DXVA-HD?是比 DXVA2 更新还是同名?

    DXVA-HD 是 DXVA 2.0 API 系列的一部分,涵盖硬件加速视频处理。它可作为公共低级接口提供,还集成在 DirectShow 和 Media Foundation 库存组件中。

    Windows 8+ 默认媒体播放器是否仍然同时具有 DirectShow 和 MF 渲染路径并即时交换它们,还是 Microsoft 正在完全淘汰 DirectShow?

    是的,WMP 12 仍然兼具两者。 Windows 10 影视播放器仅支持 MF。

    鉴于我想基本上在游戏中渲染视频,只有让所有渲染实际发生在 GPU 上并将应用程序逻辑保留在 CPU 上才有意义,但我真的找不到任何好的例子来说明如何利用它使用媒体基金会。

    DirectShow 和 Media Foundation 都提供支持 DXVA 的股票解码器(主要用于 H.264,但不仅限于)。我会说 DirectShow 实现相当不灵活,旨在与 EVR 一起使用。 Media Foundation 的实现更加灵活,可以在 MF 管道之外用作 MFT。然而,两者都是为了隐藏所有复杂性并在幕后自动利用 DXVA 解码。

    ...而且我想绝对确定我会选择像 DirectShow 已经拥有的能够在未来十年持续使用的技术

    DirectShow 作为一个遗留 API 仍然存在,在示例、代码、公共信息、文档、第三方可扩展性方面提供了更丰富的产品。媒体基金会是一个有意的替代品,对它的兴趣非常有限。与 DirectShow 相比,它基本上没有提供太多功能,Microsoft 没有开发它来涵盖 DirectShow 的功能集——通常期望从较新的 API 中获得的功能,不提供有用的开发人员工具。好像本来以为MF是新东西应该自己卖,结果还是没成功:

    ... The miracle of DirectShow is that, even though it was written in 1995, that original code still supports the many wild and varied multimedia formats that have been developed since. The latest baseclasses update I'm aware of is from 2009, in the Windows 7 SDK, but even that has only minor modifications from the original release.

    [...]

    但请记住,即使在 7 年前,DirectShow 已经 15 岁了。基类从一开始就以源代码形式发布。他们已经得到关心的程序员超过 2 年的关注。问题早就解决了。

    [...]

    现在,说了这么多,Redmond 的人确实认为 DirectShow 是一种死技术。他们已经转移到媒体基金会,原因完全让我无法理解。我还没有找到 Media Foundation 比 DirectShow 解决得更好的问题。它固有的局限性意味着它根本无法解决一些问题。我永远无法理解他们为什么选择重新开始,而不是修补他们在 DShow 中不喜欢的任何东西。尽管词汇不同,但基本概念完全相同。这只是浪费资源。

    2019 年 7 月更新

    我想在 DirectShow 相关问题上链接a comment from Microsoft's James Dailey,它还巧妙地概述了 DirectShow 2019 年的整体状态:

    请注意,虽然 DirectShow 在技术上仍受支持,但我们正在弃用这项传统技术。我们要求您尽快转移到 MediaFoundation。

    【讨论】:

    • 首先,感谢您如此广泛的回复,真的很有帮助! “然而,两者都是为了隐藏所有复杂性并在幕后自动利用 DXVA 解码。” > 我是否仍然需要告诉 MediaEngine 或其他任何东西来实际使用它,还是当解码器支持它时它会自动发生(如果是这样,出于好奇,我怎么能告诉它禁用它 - 我很难找到) ?至于你最后的评论:你建议坚持使用 DirectShow 并只进行渲染到纹理处理,还是仍然在 MF 上移动?
    • 1 这是自动的;使用 DirectShow,您可以使用 ICodecAPI 在解码器上禁用它,如记录的 here 和媒体基金会一样,类似的 MFT 属性记录在 there 2 以在硬件解码器的帮助下将 H.264 渲染为纹理,我将采用 Media Foundation。
    • 我的印象是,也可以在设备上设置一些创建参数以完全禁用(或启用)DXVA - 相关应用程序必须呈现多种类型,范围从H.264 MP4 转 WMV 和 AVI,我事先不知道?
    • 解码器使用或不使用DXVA,有时它是从其他地方控制的(example)。一切都没有全局设置。但是支持 DXVA 的格式也不多:AVI 是一个容器,如果是带有 H.264 视频的 AVI,则解码器与 MP4 H.264 的情况相同。
    • 在这个非常受欢迎和全面的回复中没有提到的一个比较点是只有 Windows Media Foundation——而且似乎不是 DirectShow,即使使用相同的 EVR --支持视频帧步进和改进的擦洗。后者可以在 DS 中相当容易地即兴发挥,但前者则不然。请参阅msdn.microsoft.com/en-us/library/windows/desktop/…,特别注意页面底部的最后一句话,这似乎是我们获得的单步文档的全部内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2017-06-10
    • 2019-08-02
    相关资源
    最近更新 更多