DirectShow / WinForms中的硬件加速视频

时间:2010-01-26 14:49:58

标签: winforms hardware directshow h.264 wmv

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

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

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

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

我使用DirectShow.NET整合了一个播放器,使用VMR9全屏播放视频。使用这种方法,我的WMV文件占用了20-30%的CPU。我不得不安装一个mp4 muxer / demuxer甚至可以播放H264文件,然后它们消耗了40-50%的CPU。

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

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

谢谢!

3 个答案:

答案 0 :(得分:4)

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

我在XP中使用DirectShow在您描述的同一个Ion平台上进行HD h264播放。它是1080p性能的边界,但如果你可以限制比特率并且不需要同时做很多其他CPU或GPU工作,它可以管理它。 720p更加舒适,特别是如果你可以使用24或30 fps而不是60 fps。

在我的脑海中,对于h264 Ion最有效的编解码器是MainConcept,CoreAVC和Cyber​​link。

我还建议尝试VMR7而不是VMR9,如果这是你的选择。一些DXVA编解码器更可靠,并且在VMR7上具有更好的性能。

答案 1 :(得分:2)

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

答案 2 :(得分: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)......

再次感谢您的帮助!