Это все еще известная проблема в .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;
}
}
Однако это не использует графический процессор и графическую память и может замедлить воспроизведение видео.
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 Media Foundation
Загрузите инструмент «Win7DSFilterTweaker», чтобы отключить воспроизведение Media Foundation «MP4».Установите другой кодек MP4, например, ffshow.