Общие сведения о мультимедиа
Обновлен: Ноябрь 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.
Примечание. |
---|
При распространении мультимедиа с приложением, нельзя использовать файл мультимедиа в качестве ресурса проекта. Вместо этого в файле проекта необходимо задать для типа мультимедиа значение 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, 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 обрабатывает эту конкуренцию управления, вычисляя следующие приоритеты.
UnloadedBehavior. В случае выгрузки мультимедиа. Гарантирует, что все ресурсы мультимедиа освобождаются по умолчанию, даже если MediaClock сопоставлен с MediaElement.
MediaClock. В случае, когда мультимедиа имеет Clock. Если мультимедиа выгружен, то MediaClock будет иметь эффект, пока UnloadedBehavior имеет значение Manual. Режим часов всегда переопределяет загруженное поведение MediaElement.
LoadedBehavior. В случае загрузки мультимедиа.
Интерактивные управляющие методы. В случае, если 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 не имеет определенного состояния, существуют только два способа управления воспроизведением мультимедиа.
Интерактивные управляющие методы. Доступны в независимом режиме (свойство nullClock).
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.
См. также
Задачи
Пример наложения текста на видео