当系统接入了多个显示器,而我们的Window又位于非主屏幕,可能会出现MediaElement无法正常工作的情况(这个情况在windows7有,windows10已经修复了,windows8和8.1不太清楚)。大概的解决办法有下面几种:
1、使用CPU进行解码计算,代码如下
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;
}
}
2、让位于副屏幕的windows挪一下位置,在主屏幕上一个像素就行了,代码如下:
this.Left = bounds.Left - 1;
this.Width = bounds.Width;
this.Top = bounds.Top;
this.Height = bounds.Height;
3、使用其他播放器,比如vlc或者ffmpeg。关于vlc的播放器,可以使用这个开源的播放器框架:Meta.Vlc