Показать первый кадр видео в WPF MediaElement - PullRequest
16 голосов
/ 28 августа 2009

У меня есть WPF-приложение с MediaElement, которое я использую для запуска видео. Я не хочу, чтобы видео загружалось автоматически при загрузке, поэтому я установил для LoadedBehavior значение Manual.

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

Тем не менее, Я хочу, чтобы элемент показывал первый кадр видео при загрузке. Есть ли волшебный способ сделать это?

Ответы [ 3 ]

23 голосов
/ 29 августа 2009

Вам также нужно

ScrubbingEnabled="True"

Затем установите событие на Load

Loaded="Video1_Loaded"

В методе Video1_Load добавьте следующее:

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

Ни один из видеоконтента не воспроизводится до вызова метода воспроизведения. Поэтому, даже если вы установите позицию после первого кадра, вы не получите никаких данных.

Я думаю, что MediaElement.ScrubbingEnabled Свойство является ключом.

Получает или задает значение, которое указывает обновится ли MediaElement кадры для операций поиска в то время как сделал паузу. Это свойство зависимости.

Я попробовал тот же подход без ScrubbingEnabled, но обнаружил, что первый кадр не рендерится. Не уверен, что это просто аппаратное обеспечение, которое я использую для этого. Еще один момент, который нужно помнить, заключается в том, что, как работает MediaElement, после того, как вы вызываете Play (), вы фактически не можете точно выполнять Pause () в первом кадре, поэтому вы можете уменьшить громкость в потоке перед вызовом Play и сбросить после вызова Пауза.

9 голосов
/ 06 января 2011

Вам не нужно создавать событие, см. Следующее

<MediaElement Source="foo.wmv" 
              MediaOpened="videoElement_MediaOpened" 
              LoadedBehavior="Pause" ScrubbingEnabled="True" />
1 голос
/ 29 июля 2014

Я не могу комментировать, поэтому вот мой ответ: Очистка относится к обновлению визуализированного изображения, когда 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);

Спасибо за чистящий наконечник!

...