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

Обновлен: Ноябрь 2007

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

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

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

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

И MediaElement, и MediaPlayer используются для представления аудио, видео и видео с аудио. Оба типа могут управляться в интерактивном режиме или в режиме часов. Обоим типам требуется минимум Проигрыватель Windows Media 10 OCX для воспроизведения мультимедиа. Однако API-интерфейс рассчитаны на применение в различных сценариях.

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

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

Aa970915.alert_note(ru-ru,VS.90).gifПримечание.

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

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

Aa970915.alert_note(ru-ru,VS.90).gifПримечание.

И MediaElement, и MediaPlayer содержат похожие члены. Ссылки в этом разделе относятся к членам класса MediaElement. Если не указано обратного, то члены, связанные в классе MediaElement, можно также найти и в классе MediaPlayer.

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

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

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

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

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

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

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

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

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

Режим часов

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

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

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

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

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

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

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

Класс MediaElement

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

<!-- 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>
<!-- 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, PauseClose и 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();        

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

См. также

Задачи

Пример наложения текста на видео

Пример Slide Puzzle

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

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

Ссылки

DrawingGroup