我的任务是修改使用 DirectShow 进行视频渲染的应用程序。旧的应用程序工作正常,但它开始显示年龄。
由于我有游戏背景,我想我应该这样处理。在使用不同的技术制作了一堆原型之后,我很确定我可以提取视频到纹理的渲染并使用 DirectX 来满足所有客户的要求。
然而,我现在必须选择一种技术,我不能再迷失了……
- 直接秀
- 媒体基金会
- 媒体会话 (< Windows 8)
- 媒体引擎 (> 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