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

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

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

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

3 ответов


также необходимо

ScrubbingEnabled="True"

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

Loaded="Video1_Loaded"

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

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

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

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

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

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


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

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

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

Спасибо за наконечник для очистки!