Подтвердить что ты не робот

Показывать первый кадр видео в WPF MediaElement

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

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

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

4b9b3361

Ответ 1

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

ScrubbingEnabled="True"

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

Loaded="Video1_Loaded"

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Спасибо за скручивание!