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