Ответ 1
Это все еще известная проблема в .NET Framework 4.0, которую MS описала как "Проблема возникает, когда синхронизация между WPF и базовым элементом управления WMP должна повторно синхронизироваться при изменении отображения". Это происходит с видеофайлами видео H.264.
Вот три способа обхода.
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 представляют собой границу вторичного монитора, используйте
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.