我的应用程序使用WPF MediaElement播放视频(MOV文件)。这在主监视器上播放时效果很好,但在窗口移动到辅助监视器时冻结。
我尝试了以下但没有成功:
当应用程序窗口跨越两个监视器时,它可以正常工作,但只要它完全位于辅助监视器内,视频就会冻结。一旦处于此状态,将应用程序移回主监视器将无济于事(并且加载新视频也无济于事。)
安排监视器使坐标始终为正(两个监视器均为1920x1080,辅助监视器原点为1920,0)。
是否有其他人看到此问题和/或找到了修复程序?
修改
是否有人将WPF MediaElement与多个监视器一起使用???
答案 0 :(得分:25)
这仍是 .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。使用MS的Media Foundation编解码器以外的其他MP4编解码器
下载工具“Win7DSFilterTweaker”以禁用Media Foundation“MP4”播放。 例如,安装另一个MP4编解码器ffshow。
答案 1 :(得分:1)
检查是否仍有事件:MediaOpened,MediaEnded和MediaFailed。 我假设不是因为这是一个已知的问题,这个控件“忽略”第二个监视器。