2009-08-28 11 views
16

Tengo una aplicación WPF con un MediaElement que utilizo para ejecutar un video. No quiero que el video se reproduzca automáticamente cuando se carga, por lo que configuro LoadedBehavior en Manual.Mostrar el primer cuadro de video en WPF MediaElement

<MediaElement LoadedBehavior="Manual" 
       Source="foo.wmv" 
       MediaOpened="videoElement_MediaOpened" /> 

Sin embargo; Quiero que el elemento muestre el primer fotograma del video cuando se carga. ¿Hay alguna forma mágica de hacer esto?

Respuesta

21

también necesita

ScrubbingEnabled="True" 

asentando después de un evento de carga

Loaded="Video1_Loaded" 

En el método Video1_Load agregar lo siguiente:

Video1.Play(); 
Video1.Pause(); 

Ninguno de los contenidos de vídeo se hace antes el método de juego se llama. Así que incluso si establece la posición más allá del primer fotograma, no obtendrá ningún dato.

Creo que el MediaElement.ScrubbingEnabled La propiedad es la clave.

Obtiene o establece un valor que indica si el MediaElement actualizará marcos para buscar operaciones mientras pausa. Es una propiedad de dependencia.

Probé el mismo enfoque sin ScrubbingEnabled pero encontré que el primer fotograma no se renderizaría. No estoy seguro si es solo el hardware que estoy usando para esto. El otro elemento a recalcar es que la manera en que funciona MediaElement, una vez que llames a Play() no puedes Pausa() en el primer cuadro exactamente, por lo que es posible que quieras reducir el volumen en la transmisión antes de llamar a Play y reiniciar después de llamar Pausa.

+1

Thx - esto funciona! Debo decir que no me siento cómodo con la ejecución Play() Pausa(). Ví a alguien más sugiriendo también, pero encontró el enfoque un poco "hacky". Pero si esta es la única forma, creo que tendremos que vivir con eso. ScrubbingEnabled es una propiedad agradable, pero no parece tener nada que ver con mostrar el primer fotograma de video en el inicio. – stiank81

8

Usted no tiene que crear un evento, véase la siguiente

<MediaElement Source="foo.wmv" 
       MediaOpened="videoElement_MediaOpened" 
       LoadedBehavior="Pause" ScrubbingEnabled="True" /> 
+0

no puede controlar MediaElement con play, detener ... Por lo tanto, debe establecer LoadedBehavior en manual. si lo configuraste en pausa, ¿cómo lo comenzarías a tocar? –

+0

@AlexanderZwitbaum: ¿Llamar al método 'Play' basado en algún otro evento, sin relación con los botones integrados? –

1

que no puedo comentar, así que aquí está mi respuesta: desplazamiento consiste en la actualización de la imagen renderizada cuando se detiene MediaElement.

//Todo: Set your source 

//if not stated in the xmal, you can still set this here. 
Player.LoadedBehavior = MediaState.Manual; 

//Turn scrubbing on 
Player.ScrubbingEnabled = true; 

Player.Pause(); 

Player.Position = TimeSpan.FromTicks(1); 

¡Gracias por la punta de fregado!

Cuestiones relacionadas