【问题标题】:Switching from EVR to VMR with GMFBridge使用 GMFBridge 从 EVR 切换到 VMR
【发布时间】:2014-05-02 23:12:10
【问题描述】:

我正在使用 GMFBridge 来实现视频之间的平滑过渡。我的测试有两台显示器,我使用 EVR 播放在所有显示器上拉伸的视频,并使用两个 VMR 在每台显示器上显示不同的视频。

VMR 到 VMR 以及 EVR 到 EVR 之间的过渡运行非常顺利。问题是当我播放 EVR 并且需要更改为两个 VMR 时。如果我不停止 EVR,它会继续显示在屏幕上,即使在调用 GmfBridgeController.BridgeGraphs(null, null) 之后也是如此。

从 VMR 切换到 EVR 时,我不必停止渲染器,但我在开始时有 1 秒的闪烁。

我该如何解决这个问题?

【问题讨论】:

    标签: c# directshow directshow.net ms-media-foundation


    【解决方案1】:

    在某些时候,视频渲染器会在硬件上分配资源,尤其是。 Direct3D 设备,并且这种初始化不是即时的,并且会导致一些延迟或闪烁。当你桥接时,你的策略应该是保留视频渲染器和它的托管图,并在它后面切换东西。这使您的操作流畅且无闪烁。

    将 VMR 切换到 EVR(原因?)不太可能一帆风顺。或者,让两者始终运行,并根据需要将一个放在另一个前面。

    【讨论】:

    • 根据我的测试,我在 VMR 和 EVR 之间切换的原因是因为(如果我错了,请纠正我)VMR 在三个不同的显示器上播放三个不同的视频时具有更好的性能。但是,EVR 可以在三台显示​​器上播放一段视频,这是 VMR 无法做到的。我试图让两者都运行,但我不知道如何“隐藏”一位演示者。用 IntPtr.Zero 尝试了 SetVideoWindow,但它给了我一个例外。
    • 有道理。您可以通过隐藏承载它的表单/控件来隐藏渲染器。您可能会发现通过专用控件托管它很方便,该控件又集成到应用程序 UI 中。然后显示/隐藏控件应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多