Управление видео с помощью WPF MediaElement в C#

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

Следующий код XAML определяет MediaElement, используемый в этом примере.

Большая часть этого кода не требует пояснений. Имя элемента управления minionPlayer. Когда он заканчивает открытие некоторых носителей, в этом случае видео MP4 с именем «minions.mp4.»

Во время разработки я добавил этот видеофайл в проект и установил его свойство «Копировать в выходной каталог» в «Копировать, если новый». Таким образом, видео доступно в исполняемом каталоге, чтобы программа могла загрузить его в MediaElement .

Вероятно, наименее очевидным свойством в этом коде XAML является ScrubbingEnabled. Это свойство имеет значение true, чтобы позволить контроллеру обновлять его отображение, если видео переустанавливается, когда видео не работает. (Я понятия не имею, почему это называется «ScrubbingEnabled».)

Свойство LoadedBehavior установлено на Manual, поэтому видео не запускается, как только элемент управления загружается.

При запуске программа выполняет следующий код для подготовки к запуску видео.

// Таймер для отображения местоположения видео.
private DispatcherTimer timerVideoTime;

// Создаем таймер и в противном случае готовьтесь.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    timerVideoTime = new DispatcherTimer();
    timerVideoTime.Interval = TimeSpan.FromSeconds(0.1);
    timerVideoTime.Tick += new EventHandler(timer_Tick);
    minionPlayer.Stop();
}

Этот код создает новый DispatcherTimer для отслеживания прогресса видео. Он заканчивается вызовом метода MediaElement элемента управления MediaElement. Это позволяет контролировать нагрузку на носитель, чтобы вы могли его видеть. Если вы опускаете это утверждение, элемент управления невидим, а полоса прокрутки программы не показывает какую-либо позицию.

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

private void minionPlayer_MediaOpened(object sender,
    RoutedEventArgs e)
{
    sbarPosition.Minimum = 0;
    sbarPosition.Maximum =
        minionPlayer.NaturalDuration.TimeSpan.TotalSeconds;
    sbarPosition.Visibility = Visibility.Visible;
}

Этот код устанавливает свойства ScrollBar управления Minimum и Maximum, чтобы он мог представлять полную продолжительность видео.

Программа использует два вспомогательных метода: ShowPosition и EnableButtons. Следующий код показывает метод ShowPosition.

// Показывать позицию воспроизведения в ScrollBar и TextBox.
private void ShowPosition()
{
    sbarPosition.Value = minionPlayer.Position.TotalSeconds;
    txtPosition.Text =
        minionPlayer.Position.TotalSeconds.ToString("0.0");
}
 // Показывать позицию воспроизведения в ScrollBar и TextBox.
private void ShowPosition ()
{
     sbarPosition.Value = minionPlayer.Position.TotalSeconds;
     txtPosition.Text =
         minionPlayer.Position.TotalSeconds.ToString ( "0.0");
}  

...

В следующем коде показан способ EnableButtons.

// Включить и отключить соответствующие кнопки.
private void EnableButtons(bool is_playing)
{
    if (is_playing)
    {
        btnPlay.IsEnabled = false;
        btnPause.IsEnabled = true;
        btnPlay.Opacity = 0.5;
        btnPause.Opacity = 1.0;
    }
    else
    {
        btnPlay.IsEnabled = true;
        btnPause.IsEnabled = false;
        btnPlay.Opacity = 1.0;
        btnPause.Opacity = 0.5;
    }
    timerVideoTime.IsEnabled = is_playing;
}

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

Код устанавливает кнопки Opacity на 1.0 для активированных кнопок (поэтому они появляются нормально) и 0,5 для отключенных кнопок (поэтому они отображаются серым цветом).

Обработчик событий Tick таймера, показанный в следующем коде, просто вызывает ShowPosition для обновления отображения позиции.

private void timer_Tick(object sender, EventArgs e)
{
    ShowPosition();
}

Следующий код показывает, как кнопки управляют элементом управления MediaElement.

private void btnPlay_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Play();
    EnableButtons(true);
}
private void btnPause_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Pause();
    EnableButtons(false);
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Stop();
    EnableButtons(false);
    ShowPosition();
}
private void btnRestart_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Stop();
    minionPlayer.Play();
    EnableButtons(true);
}
private void btnFaster_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.SpeedRatio *= 1.5;
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Position += TimeSpan.FromSeconds(10);
    ShowPosition();
}
private void btnSlower_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.SpeedRatio /= 1.5;
}
private void btnPrevious_Click(object sender, RoutedEventArgs e)
{
    minionPlayer.Position -= TimeSpan.FromSeconds(10);
    ShowPosition();
}

Код кнопок довольно понятен. Метод Play управления MediaElement запускает видео, его метод Pause останавливает его, а его метод Stop останавливает видео и перематывает начало.

Если видео не воспроизводится, вы можете ввести время в TextBox, а затем нажать кнопку Set Position. Когда вы это сделаете, выполняется следующий код.

private void btnSetPosition_Click(object sender, RoutedEventArgs e)
{
    TimeSpan timespan =
        TimeSpan.FromSeconds(double.Parse(txtPosition.Text));
    minionPlayer.Position = timespan;
    ShowPosition();
}

Этот код преобразует время, введенное в TimeSpan, и устанавливает для него свойство Position игрока. Затем он вызывает ShowPosition для обновления отображения позиции.

Вот и все. MediaPlayer предоставляет множество функций для управления видео.

Источник: http://csharphelper.com/blog/2015/10/control-a-video-with-the-wpf-mediaelement-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector