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

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

В этом разделе содержатся следующие подразделы.

  • Мультимедийный интерфейс API
  • Режимы воспроизведения объектов мультимедиа
  • Класс MediaElement
  • Класс MediaPlayer
  • Связанные разделы

Мультимедийный интерфейс API

Классы MediaElement и MediaPlayer используются для представления звукового и видеосодержимого. Управление этими классами может осуществляться интерактивно или с помощью часов. Эти классы могут использовать элемент управления Microsoft Windows Media Player 10 для воспроизведения мультимедиа. Используемый класс зависит от конкретного сценария.

Элемент управления MediaElement является элементом UIElement, который поддерживается Система макета и используется как содержимое многими элементами управления. Его также можно использовать в разметке Extensible Application Markup Language (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 имеет значение, отличное от NULL, то объект мультимедиа находится в режиме часов. По умолчанию объекты мультимедиа находятся в независимом режиме.

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

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

  • Класс Uri мультимедиа можно указывать непосредственно.

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

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

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

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

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

Режим часов

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

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

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

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

Для управления воспроизведением мультимедиа в режиме часов должны использоваться управляющие методы класса ClockController. ClockController берется из свойства ClockController элемента MediaClock. При попытке использовать управляющие методы объектов MediaElement или MediaPlayer в режиме часов будет вызвано InvalidOperationException.

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

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

Класс MediaElement

Добавить мультимедиа в приложение просто: нужно добавить элемент управления MediaElement в user interface (UI) приложения и предоставить Uri объекту мультимедиа, который требуется включить. Все типы объектов мультимедиа, поддерживаемые программой Microsoft Windows Media Player 10, поддерживаются и в Windows Presentation Foundation (WPF). В следующем примере показано простое использование элемента управления MediaElement в Extensible Application Markup Language (XAML).

<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://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 не повлияет на user interface (UI), так как не потребует физического пространства в нем, если только не заданы свойства Width или Height.

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

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

Класс MediaPlayer

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

Управление MediaPlayer

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

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

  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();        

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

См. также

Ссылки

DrawingGroup

Основные понятия

Система макета

Другие ресурсы

Разделы руководства, посвященные аудио и видео