Общие сведения о мультимедиа

Функции мультимедиа в Windows Presentation Foundation (WPF) позволяют интегрировать аудио и видео в приложения, чтобы улучшить взаимодействие с пользователем. В этом разделе представлены мультимедийные функции WPF.

API мультимедиа

Для представления аудио- и видео-содержимого используются классы MediaElement и MediaPlayer. Этими классами можно управлять в интерактивном режиме или с помощью часов. Эти классы можно использовать в элементе управления Проигрыватель мультимедиа Microsoft Windows 10 для воспроизведения мультимедиа. Выбор класса зависит от сценария.

MediaElement представляет собой UIElement, который поддерживается Макетом и может использоваться в качестве содержимого многих элементов управления. Он также может использоваться в расширяемом языке разметки приложений (XAML) и в коде. MediaPlayer, с другой стороны, разработан для объектов Drawing, и у него нет поддержки макета. Мультимедиа, загружаемое с помощью MediaPlayer, может быть представлено только с использованием VideoDrawing или путем непосредственного взаимодействия с DrawingContext. MediaPlayer не может использоваться в XAML.

Дополнительные сведения о графических объектах и контексте рисования см. в разделе Обзор объектов Drawing.

Примечание.

При распространении мультимедиа вместе с приложением файл мультимедиа нельзя использовать как ресурс проекта. Вместо этого в файле проекта необходимо задать тип мультимедиа как Content и установить CopyToOutputDirectory в значение PreserveNewest или Always.

Режимы воспроизведения мультимедиа

Примечание.

Как MediaElement, так и MediaPlayer имеют одинаковые элементы. Ссылки в этом разделе относятся к классу элементов MediaElement. Если это специально не оговорено, элементы, на которые ссылается класс MediaElement, можно также найти в классе MediaPlayer.

Чтобы понимать принципы воспроизведения мультимедиа в Windows Presentation Foundation (WPF), необходимо знание о различных режимах, в которых может воспроизводиться содержимое мультимедиа. Как MediaElement, так и MediaPlayer могут использоваться в двух разных режимах мультимедиа, в независимом режиме и в режиме тактовой синхронизации. Режим мультимедиа определяется свойством Clock. Если Clock имеет значение null, объект мультимедиа находится в независимом режиме. Если Clock отличен от нуля, объект мультимедиа находится в режиме тактовой синхронизации. По умолчанию объекты мультимедиа находятся в независимом режиме.

Независимый режим

В независимом режиме содержимое мультимедиа управляет своим воспроизведением. Независимый режим имеет следующие параметры.

  • Uri мультимедиа может быть прямо определен.

  • Воспроизведением мультимедиа можно управлять напрямую.

  • Свойства Position и SpeedRatio мультимедиа могут быть изменены.

Мультимедиа загружается путем задания для объекта MediaElement свойства Source или путем вызова для объекта MediaPlayer метода Open.

Для управления воспроизведением мультимедиа в независимом режиме можно использовать управляющие методы объекта мультимедиа. Доступные методы управления: Play, Pause, Close и Stop. Для MediaElement, интерактивный контроль с использованием этих методов доступен, только если для LoadedBehavior задано значение Manual. Эти методы недоступны, если объект мультимедиа находится в режиме часов.

Пример использования независимого режима см. в разделе Управление элементом MediaElement (воспроизведение, пауза, стоп, громкость и скорость).

Режим часов

MediaTimeline обеспечивает воспроизведение мультимедиа в режиме тактовой синхронизации. Режим часов имеет следующие характеристики.

  • Uri мультимедиа задается опосредованно через MediaTimeline.

  • Воспроизведением мультимедиа можно управлять с помощью часов. Нельзя использовать управляющие методы объекта мультимедиа.

  • Мультимедиа загружается путем задания для объекта MediaTimeline свойства Source, создания схемы синхронизации на основе временной шкалы и назначения схемы синхронизации объекту мультимедиа. Мультимедиа также загружается таким способом, если MediaTimeline в Storyboard ориентирована на MediaElement.

Для управления воспроизведением мультимедиа в режиме тактовой синхронизации используются методы управления ClockController. ClockController получается из свойства ClockControllerMediaClock. Если вы пытаетесь использовать методы управления объекта MediaElement или MediaPlayer режиме тактовой синхронизации, выдается InvalidOperationException.

Дополнительные сведения о часах и временных шкалах см. в разделе Общие сведения об эффектах анимации.

Пример использования режима часов см. в разделе Управление элементом MediaElement с помощью раскадровки.

Класс MediaElement

Добавить содержимое мультимедиа в приложение так же просто, как добавить элемент управления MediaElement в пользовательский интерфейс приложения и предоставить Uri для мультимедиа, которое нужно включить. Все типы носителей, поддерживаемые Проигрывателем мультимедиа Microsoft Windows 10, поддерживаются в Windows Presentation Foundation (WPF). В следующем примере показано простое использование MediaElement в XAML.

<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>

В этом примере содержимое мультимедиа воспроизводится автоматически по мере его загрузки. После завершения воспроизведения содержимое мультимедиа закрывается, а все ресурсы мультимедиа освобождаются (включая видеопамять). Это поведение объекта по умолчанию MediaElement, которое управляется свойствами LoadedBehavior и UnloadedBehavior.

Управление объектом MediaElement

Свойства LoadedBehavior и UnloadedBehavior управляют поведением MediaElement, когда IsLoaded имеет значение true или false, соответственно. Свойства MediaState задаются для определения поведения воспроизведения мультимедиа. Например, по умолчанию LoadedBehavior имеет состояние Play, а состояние UnloadedBehavior по умолчанию - Close. Это означает, что как только MediaElement загружен, и предварительная проба выполнена, начинается воспроизведение мультимедиа. После завершения воспроизведения содержимое мультимедиа закрывается и освобождаются все ресурсы мультимедиа.

Свойства LoadedBehavior и UnloadedBehavior - не единственный способ управления воспроизведением мультимедиа. В режиме тактовой синхронизации, синхронизация может управлять MediaElement, а также интерактивные методы управления действуют, когда LoadedBehavior находится в состоянии Manual. MediaElement контролирует эту «конкуренцию» за управление, оценивая следующие приоритеты.

  1. UnloadedBehavior. В случае, когда содержимое мультимедиа выгружается. Благодаря этому все ресурсы мультимедиа выпускаются по умолчанию, даже если MediaClock связана с MediaElement.

  2. MediaClock. Действует, когда у мультимедиа есть Clock. Если мультимедиа не загружено, MediaClock действует до тех пор, пока UnloadedBehavior находится в состоянии Manual. Режим тактовой синхронизации всегда переопределяет поведение MediaElement.

  3. LoadedBehavior. В случае, когда содержимое мультимедиа загружается.

  4. Интерактивные управляющие методы. Действует, когда LoadedBehavior находится в состоянии Manual. Доступные методы управления: Play, Pause, Close и Stop.

Отображение объекта MediaElement

Чтобы MediaElement отображался, в нем должно быть содержимое, которое будет преобразовано для просмотра, и его свойствам ActualWidth и ActualHeight должно быть задано значение «ноль» до загрузки содержимого. Для содержимого, в составе которого есть только звук, эти свойства всегда имеют нулевое значение. Для видео-содержимого, как только будет сгенерировано событие MediaOpened, ActualWidth и ActualHeight сообщат о размере загружаемого мультимедиа. Это значит, что, пока мультимедиа не загружено, MediaElement не сможет занять физическое место в пользовательском интерфейсе, если не заданы свойства Width или Height.

Когда заданы свойства Width и Height, мультимедиа растянется для заполнения области, предоставленной для MediaElement. Для сохранения оригинальных пропорций мультимедиа, должно быть задано свойство Width или Height, но не оба. Задание обоих свойств Width и Height приведет к тому, что мультимедиа будет представлено в фиксированном элементе, что может быть нежелательно.

Во избежание использования элемента фиксированного размера Windows Presentation Foundation (WPF) может выполнить предварительную пробу мультимедиа. Для этого необходимо задать свойству LoadedBehavior значение Play или Pause. В состоянии Pause будет выполнена предварительная проба мультимедиа, и оно представит первый кадр. В состоянии Play будет выполнена предварительная проба мультимедиа, и оно начнет воспроизводиться.

Класс MediaPlayer

Если класс MediaElement является элементом платформы, класс MediaPlayer разработан для использования в объектах Drawing. Объекты Drawing используются, когда можно пожертвовать возможностями уровня среды ради улучшения производительности, или если требуются функции Freezable. MediaPlayer позволяет использовать преимущества этих функций, предоставляя при этом мультимедийное содержимое для приложений. Как и MediaElement, MediaPlayer может использоваться в независимом режиме или в режиме тактовой синхронизации, но у него нет состояний незагруженного и загруженного объекта MediaElement. Это уменьшает сложность управления воспроизведением MediaPlayer.

Управление объектом MediaPlayer

Так как объект MediaPlayer не может хранить состояния, существуют только два способа управления воспроизведением содержимого мультимедиа.

  1. Интерактивные управляющие методы. Действуют в независимом режиме (свойство nullClock).

  2. MediaClock. Действует, когда у мультимедиа есть Clock.

Отображение объекта MediaPlayer

С технической точки зрения MediaPlayer невозможно отобразить, так как он не имеет физического представления. При этом он может использоваться для воспроизведения мультимедиа в Drawing, используя класс VideoDrawing. В следующем примере показано использование VideoDrawing для воспроизведения мультимедиа.

//
// Create a VideoDrawing.
//
MediaPlayer player = new MediaPlayer();

player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));

VideoDrawing aVideoDrawing = new VideoDrawing();

aVideoDrawing.Rect = new Rect(0, 0, 100, 100);

aVideoDrawing.Player = player;

// Play the video once.
player.Play();

Дополнительные сведения об объектах см. в статье Обзор объектов DrawingDrawing.

См. также