wpf mediaelement multiple-monitors

¿Por qué WPF MediaElement no funciona en un monitor secundario?



multiple-monitors (2)

Mi aplicación usa WPF MediaElement para reproducir video (archivos MOV). Esto funciona bien cuando se juega en el monitor principal, pero se congela cuando la ventana se mueve al monitor secundario.

He intentado lo siguiente sin éxito:

  1. Iniciando la aplicación en el monitor secundario.
  2. Cambio de los monitores primario y secundario (transferencias de problemas al nuevo monitor secundario)

Cuando la ventana de la aplicación abarca ambos monitores, funciona correctamente, pero tan pronto como se encuentra dentro del monitor secundario, el video se congela. Una vez en este estado, mover la aplicación de nuevo al monitor principal no ayuda (y cargar un nuevo video tampoco ayuda).

Los monitores están dispuestos de manera que las coordenadas sean siempre positivas (ambos monitores son 1920x1080 y el origen del monitor secundario es 1920,0).

¿Alguien más ha visto este problema y / o ha encontrado una solución?

EDITAR

¿Alguien usa WPF MediaElement con múltiples monitores?


Compruebe si los eventos: MediaOpened, MediaEnded y MediaFailed todavía se están activando. No asumo que este es un problema conocido que este control "ignora" el segundo monitor.


Este sigue siendo un problema conocido en .NET Framework 4.0 , que MS describe como "El problema ocurre cuando una sincronización entre WPF y el control WMP subyacente tiene que volver a sincronizarse cuando se producen los cambios en la pantalla". Sucede a los archivos de video codec H.264.

Aquí hay 3 soluciones.

1. Utilice la representación de software para la ventana que contiene el control 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; } }

Sin embargo, esto no está utilizando la GPU y la memoria de gráficos y podría ralentizar la reproducción del video.

2. Superponer al menos 1 píxel en la pantalla principal

Por ejemplo, supongamos que la pantalla principal se encuentra a la izquierda y MediaElement llena toda la ventana. En el constructor de la ventana, suponga que los límites de Rect representan el límite del monitor secundario, use

this.Left = bounds.Left - 1; this.Width = bounds.Width; this.Top = bounds.Top; this.Height = bounds.Height;

por lo tanto, MediaElement tiene 1 píxel de ancho superpuesto en el monitor principal, y luego puede reproducir archivos de video H.264 normalmente.

3. Utilice otro códec MP4 que no sea el códec de MS''s Media Foundation

Descargue una herramienta "Win7DSFilterTweaker" para deshabilitar la reproducción de Media Foundation "MP4". Instale otro codec MP4, ffshow, por ejemplo.