【发布时间】: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