gpt4 book ai didi

wpf - 为什么WPF MediaElement在辅助监视器上不起作用?

转载 作者:行者123 更新时间:2023-12-03 12:42:50 25 4
gpt4 key购买 nike

我的应用程序使用WPF MediaElement播放视频(MOV文件)。在主监视器上播放时,此方法效果很好,但当窗口移至辅助监视器时,此方法将冻结。

我尝试了以下操作但未成功:

  • 在辅助监视器
  • 上启动应用程序
  • 交换主监视器和辅助监视器(问题转移到新的辅助监视器)

  • 当应用程序窗口跨越两个监视器时,它可以正常工作,但是一旦它完全位于辅助监视器中,视频就会冻结。一旦处于此状态,将应用程序移回主监视器将无济于事(加载新视频也无济于事)。

    监视器的排列方式使坐标始终为正(两个监视器均为1920x1080,辅助监视器原点为1920,0)。

    是否还有其他人看到此问题和/或找到了解决方法?

    编辑

    是否有人将WPF MediaElement与多个监视器一起使用???

    最佳答案

    这仍然是 .NET Framework 4.0 中的一个已知问题,MS描述为“当显示更改发生时,当WPF和基础WMP控件之间的同步必须重新同步时,就会发生此问题。”它发生在H.264编解码器视频文件上。

    这是3个解决方法。

    1。对包含MediaElement控件的窗口使用软件渲染

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
    var hwndSource = PresentationSource.FromVisual(this) as HwndSource;
    if (hwndSource != null)
    {
    var hwndTarget = hwndSource.CompositionTarget;
    if (hwndTarget != null) hwndTarget.RenderMode = RenderMode.SoftwareOnly;
    }
    }

    但是,这没有利用GPU和图形内存,可能会减慢视频播放速度。

    2.在主显示屏上重叠至少1个像素

    例如,假设主屏幕位于左侧,而MediaElement填充了整个窗口。在窗口的构造函数中,假设Rect边界代表辅助监视器边界,请使用
    this.Left = bounds.Left - 1;
    this.Width = bounds.Width;
    this.Top = bounds.Top;
    this.Height = bounds.Height;

    因此MediaElement在主监视器上重叠了1像素宽,因此可以正常播放H.264视频文件。

    3.使用MS的Media Foundation编解码器以外的其他MP4编解码器

    下载工具“Win7DSFilterTweaker”以禁用Media Foundation“MP4”播放。
    例如,安装另一个MP4编解码器ffshow。

    关于wpf - 为什么WPF MediaElement在辅助监视器上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189660/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com