DirectShow,Media Foundation,DXVA,什么?

时间:2016-08-01 19:44:32

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

我的任务是修改使用DirectShow进行视频渲染的应用程序。旧的应用程序工作正常,但它开始显示年龄。

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

然而,我现在正处于一个必须选择技术的地步,我不能再迷失......

  • DirectShow的
  • 媒体基金会
    • 媒体会话(< Windows 8)
    • 媒体引擎(> Windows 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

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

媒体基金会已经推出了Windows Vista,并且在Windows 8之前有一个名为“媒体会话”的东西,之后他们推出了“媒体引擎”。 如果我是正确的编解码器被称为MFT?实际上有哪些网站可以像free-codecs.com一样提供这些网站?

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

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

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

如果有人能够以粗体回答我的问题,请纠正我的错误信息并指出我正确的方向(DirectX + Media Foundation + DXVA-无论如何),我将非常感激!它可以像“将Windows 7 SDK的这三个示例结合起来以获得您想要的内容”一样简单。

整个任务的目标是让应用程序再次成为顶级形式,我想绝对肯定我会选择像DirectShow已经拥有的技术,这将持续下一个十年:P

1 个答案:

答案 0 :(得分:7)

  

如果我正确的编解码器被称为MFT?实际上是否存在像free-codecs.com这样的网站?

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

MFT是Media Foundation的基础组件:编码器,解码器,效果器,缩放器,视频捕获设备 - 内部都有MFT,而更高级别的API就建立在它之上。

由于对媒体基金会的兴趣有限,整体第三方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上才有意义,但我无法找到任何关于如何的好例子使用Media Foundation来使用它。

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

  

...我想绝对肯定我会选择像DirectShow已经拥有的技术,这将持续下一个十年

DirectShow仍然是传统API,在样本,代码,公共信息,文档,第三方可扩展性方面提供更多慷慨的产品。媒体基金会是一个预期的替代品,它对它的兴趣非常有限。与DirectShow相比,它基本上没有提供太多东西,微软没有开发它以涵盖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年了。基类从一开始就以源代码形式发布。他们关心的程序员已经有超过20年的关注。这些问题很久以前就被解决了。

     

[...]

     

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