我是DirectShow和MediaFoundation的新手,所以如果明显在我面前,请耐心等待。我的首选语言是C#,我正在使用直接显示构建视频播放器,我有一个由这些过滤器组成的图表(我只描述视频路径):
LAV source fiter -> LAV video decoder -> Enhanced Video Renderer
除了将视频从一个视频更改为下一个视频(在此播放播放列表)之外,所有内容都工作得非常漂亮。我在视频之间会出现黑框,导致屏幕闪烁。然而,当使用此图表时,性能非常出色,除非在视频之间进行转换,否则CPU大多保持在0%。
现在,为了摆脱黑框,我尝试将EVR与自定义演示者一起使用。我尝试了v6.1 SDK(<RootDrive>\ProgramFiles\Microsoft SDKs\ Windows\v6.1\Samples\ Multimedia\MediaFoundation\EVRPresenter
)中的自定义evr presenter示例以及codeproject中的.NET实现 - https://www.codeproject.com/Articles/419286/EVR-Presenter-in-pure-Csharp-with-Direct-D-Video-R
两者都工作得很好,但是我测试的机器上的1080p视频的CPU消耗大约为30-40%。通过注释掉代码来完成3D渲染并没有带来任何改进CPU消耗,这似乎是正确的硬件加速,这使我认为图中的其他组件 - 即视频解码器,也许EVR混音器不使用自定义演示器从GetService方法返回的IDirect3DDeviceManager9设备管理器(这实际上被方式调用。)
所以,问题是,为了让所有组件都使用硬件加速并达到与使用默认演示者的EVR时相同的性能水平,我该怎么做?
非常感谢,
约努茨