【问题标题】:Smooth Video Rendering in C#C# 中的平滑视频渲染
【发布时间】:2011-02-02 19:04:57
【问题描述】:

我正在尝试找到一种在 WPF 中呈现视频的方法,其 CPU 使用率低于 MediaElement。 目标是流畅和低 CPU 视频播放,与 C++ 编程中的 Direct3D/DirectDraw 视频渲染一样多。

我尝试使用 Direct2D(使用 WindowsAPICodePack)来渲染视频,结果是 CPU 使用率非常低,但问题是我无法流畅地渲染视频,因为没有像 DirectX 那样在准确时间更新视频的准确计时器在 C++ 中。

也许我需要回到 C++ 世界才能在本地使用 Direct3D 并在 C# WPF 窗口中使用 DirectX 窗口托管 C++。虽然我不知道会发生什么,但我想这可能值得一试。

如果大家有什么建议,请告诉我。

【问题讨论】:

    标签: c# video directx direct2d


    【解决方案1】:

    您可以尝试编写一个小的XNA 应用来渲染视频和embed that into your winform

    【讨论】:

    • 谢谢阿德里安,我根据您的建议尝试了一些。然后,最后我使用 Direct3D w/C++ 将视频渲染到 Win32 窗口并嵌入到 WPF 窗口中。它非常流畅且CPU使用率低。似乎没有办法在准确的时间更新每一帧以匹配 C# 中的实际帧速率。并且它使视频不流畅,因为与视频游戏等实时渲染图片不同,帧速率是固定的。再次感谢您的好建议。 =)
    • 我最终在托管代码 (p/invoke) 中使用 DirectShow.NET 和 BitBlt / CreateCompatibleDib 执行此操作,同时在单独的线程上进行渲染。这提供了出色的性能(以 200+ FPS 渲染 3000x1080)。 BitBlt 是至少从我遇到的情况中推送像素的最快方法。
    • 嗨丹尼斯,听起来很不错! CPU使用率如何?我想制作与叠加层(如 DDraw)相同的低光渲染器,因为我的渲染器将用于在执行时间关键任务时显示预览。然而,200+ FPS 的 3000x1080 确实令人印象深刻! =D
    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多