Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么WPF MediaElement不能在辅助监视器上工作?_Wpf_Mediaelement_Multiple Monitors - Fatal编程技术网

为什么WPF MediaElement不能在辅助监视器上工作?

为什么WPF MediaElement不能在辅助监视器上工作?,wpf,mediaelement,multiple-monitors,Wpf,Mediaelement,Multiple Monitors,我的应用程序使用WPF MediaElement播放视频(MOV文件)。当在主监视器上播放时,此功能正常工作,但当窗口移动到辅助监视器时,此功能会冻结 我尝试了以下方法,但没有成功: 在辅助监视器上启动应用程序 交换主监视器和辅助监视器(问题转移到新的辅助监视器) 当应用程序窗口跨越两个监视器时,它可以正常工作,但一旦它完全位于辅助监视器内,视频就会冻结。一旦处于这种状态,将应用程序移回主监视器也没有帮助(加载新视频也没有帮助) 监视器的布置应确保坐标始终为正(两个监视器均为1920x1080,

我的应用程序使用WPF MediaElement播放视频(MOV文件)。当在主监视器上播放时,此功能正常工作,但当窗口移动到辅助监视器时,此功能会冻结

我尝试了以下方法,但没有成功:

  • 在辅助监视器上启动应用程序
  • 交换主监视器和辅助监视器(问题转移到新的辅助监视器)
  • 当应用程序窗口跨越两个监视器时,它可以正常工作,但一旦它完全位于辅助监视器内,视频就会冻结。一旦处于这种状态,将应用程序移回主监视器也没有帮助(加载新视频也没有帮助)

    监视器的布置应确保坐标始终为正(两个监视器均为1920x1080,辅助监视器原点为1920,0)

    是否有其他人看到此问题和/或找到解决方案

    编辑


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

    检查事件:MediaOpen、MediaEnded和MediaFailed是否仍在引发。
    我假设此控件“忽略”第二个监视器不是一个已知问题。

    这仍然是.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 bounds表示辅助监视器边界,请使用

    this.Left = bounds.Left - 1;
    this.Width = bounds.Width;
    this.Top = bounds.Top;
    this.Height = bounds.Height;
    
    因此MediaElement在主监视器上有1个像素宽的重叠,然后它就可以正常播放H.264视频文件了。


    3。使用另一个MP4编解码器以外的MS的媒体基础编解码器< /强>

    下载一个工具“Wi7DSFieltT较弱”来禁用媒体基础“MP4”回放。
    例如,安装另一个MP4编解码器ffshow。

    可能是GPU没有加速辅助监视器吗?这在许多个人电脑上是一致的还是只在一台电脑上一致的?到目前为止只在一台笔记本电脑上试用过。我的正常配置中的辅助监视器是笔记本电脑屏幕。如果将外部监视器设置为辅助监视器,则问题仍然存在。顺便说一句,Windows Media Player可以在具有相同电影的主屏幕和辅助屏幕上正常工作。WPFMediaKit也可以在两台显示器上工作…找到另一台没有此问题的笔记本电脑。从未为我的笔记本电脑找到解决方案。我可以确认此错误。我正在使用MediaElement播放视频,它总是在辅助监视器上的窗口上冻结。在本文中,您引用了MS的一些内容。该引用的参考资料是什么?你知道这在.NET4.5.x中是否已经修复了吗?显然在.NET4.5.x中没有修复--我现在遇到了这个问题。