6

目前正在对需要播放高清 WMV 和 H264 视频的 Windows .NET 应用程序进行原型设计。我的测试文件是完整的 1080p。

目标硬件具有弱 Atom 处理器但强大的 NVidia 9400 图形。我知道图形是集成的,但我的理解是它们非常适合视频播放。

在 Windows 7 上测试,如果我在 WPF 中播放我的测试文件,使用 MediaElement 控件,我的 CPU 使用率为 0。

但是,目标操作系统是 Windows XP,我们可能没有 .NET 3.0。因此应用程序需要在 WinForms 中运行。由于各种原因,Windows Media Player ActiveX 不是一个选项。所以我们正在研究 DirectShow。

我使用 DirectShow.NET 组装了一个播放器,使用 VMR9 全屏播放视频。使用这种方法,我的 WMV 文件会消耗 20 - 30% 的 CPU。我必须安装一个 mp4 复用器/解复用器才能播放 H264 文件,然后它们消耗了 40 - 50% 的 CPU。

  • 我知道 Windows 7 支持 H264 开箱即用。但是,它似乎不是 DirectShow 过滤器?
  • 为什么我的视频使用 WPF 可以加速,但使用 DirectShow 时却不行?我的理解是 DirectShow 支持 DXvA。

tldr:如何在 WinForms 中实现硬件加速的 WMV 和 H264 视频播放?

谢谢!

4

3 回答 3

4

有许多商业硬件加速的 h264 directshow 过滤器可用。有些使用 DXVA,有些使用 Cuda。它们都不是免费的,但大多数并不昂贵。Ffdshow 和相关的 ffmpeg 项目很棒,但他们绝对不会在 Atom cpu 上做 HD h264。(如果有人可以证明并非如此,我很乐意听取您的意见。)

我一直在您描述的同一 Ion 平台上使用 XP 中的 DirectShow 进行高清 h264 播放。它在 1080p 的性能上处于临界状态,但如果您可以限制比特率并且不需要同时执行很多其他 CPU 或 GPU 工作,则可以管理它。720p 要舒服得多,特别是如果您可以使用 24 或 30 fps 而不是 60 fps。

在我的脑海中,在 Ion 上运行最好的 h264 编解码器是 MainConcept、CoreAVC 和 Cyber​​link。

如果您愿意,我还建议您尝试 VMR7 而不是 VMR9。一些 DXVA 编解码器更可靠,并且与 VMR7 一起具有更好的性能。

于 2010-01-27T03:19:38.377 回答
2

我已经对 Jeremiah Morill 推荐的 DXVA 实用程序进行了一些检查。

我对现在发生的事情有一个很好的了解......

  • 我认为 Windows 7 中的 H264 支持是由 MediaFoundation 提供的,这就解释了为什么我的 DirectShow 应用程序不能使用它!
  • 在 Windows 7 中使用 DirectShow 过滤器运行 WMV 视频可提供不同级别的性能,具体取决于渲染器(VMR7 / VMR9 / EVR)。VMR7 的处理器密集度最低(6 - 7% CPU)但质量最差,EVR(8 - 12% CPU)比 VMR9(12 - 13% CPU)效率高一点,但它们看起来相似。然而,最重要的是 MediaFoundation 过滤器——它显然是完全加速的并且使用了 0% 的 CPU。因此我猜想在 Windows 7 上,MediaElement 使用 MediaFoundation?

所以底线是我需要在带有 9400 图形的 Windows XP 机器上进行测试。看起来完全硬件加速是不可能的(因为我们没有 MediaFoundation,因此我们没有 DXvA2)......

再次感谢您的帮助!

于 2010-01-26T21:11:59.510 回答
2

没有直接的答案,但 DXVA 检查器实用程序过去曾帮助我调试 DXVA 问题。这是一个下载链接: http ://bluesky23.hp.infoseek.co.jp/en/index.html

于 2010-01-26T19:38:41.400 回答