2016-08-01 105 views
5

我负责修改使用DirectShow进行视频渲染的应用程序。旧的应用程序工作正常,但它开始显示年龄。DirectShow,Media Foundation,DXVA,什么?

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

不过,我现在在我要挑一个技术一起去,我不能更失去了点...

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

DirectShow是明显的最古老的,但仍然非常有效,可用的编解码器的巨量也主要是因为。

Media Foundation已经与Windows Vista一起推出,并且在Windows 8之前有一些名为“媒体会话”的内容,之后他们推出了“媒体引擎”。 如果我是正确的编解码器被称为MFTs?实际上有哪些网站可以像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

回答

6

如果我是正确的编解码器被称为MFTs?实际上有哪些网站可以像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渲染路径并将它们即时交换,或者微软是否完全停用了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年历史了。基础类从一开始就以源代码形式发布。他们已经有超过二十年的关注程序员的关注。这些问题很久以前就被解决了。

[...]

现在,说了这么多,这是真的,在微软的乡亲考虑的DirectShow是一个死技术。他们已经转移到媒体基金会,原因完全逃脱了我。我还没有找到媒体基金会比DirectShow更好解决的问题。它固有的限制意味着它存在一些它无法解决的问题。我永远不会明白他们为什么选择重新开始,而不是在DShow中修补任何他们不喜欢的东西。基本概念是完全相同的,尽管词汇有所不同。这只是浪费资源。

+0

首先,感谢您的广泛答复,真的很有帮助! “然而,他们都隐藏了所有的复杂性,并在幕后自动利用DXVA解码。” >我是否还需要告诉MediaEngine或其他什么才能真正使用它,或者当解码器支持它时它是否会自动发生(如果是这样,很好奇,我怎么能告诉它禁用它 - 我很难找到它) ?至于你最后的评论:你是否建议坚持使用DirectShow,并只是给予渲染到纹理处理,还是继续移动到MF上? –

+0

'1'它是自动的;使用DirectShow在解码器上使用ICodecAPI将其禁用,如[文档](此处)(https://msdn.microsoft.com/en-us/library/windows/desktop/dd390679)和媒体基金会那里记录的那样, (https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815)'2'在硬件解码器的帮助下将H.264渲染到纹理中我将采用Media Foundation。 –

+0

我的印象是,它也有可能在设备上设置一些创建参数,以便完全禁用(或启用)DXVA--相关应用程序必须呈现大量类型,从H.264 MP4到WMV以及我不提前知道的AVI? –

相关问题