Übersicht über Multimedia

Die Multimediafunktionen in Windows Presentation Foundation (WPF) ermöglichen Ihnen die Integration von Audio- und Videoinhalten in Ihre Anwendungen, um die Benutzerfreundlichkeit zu verbessern. In diesem Thema werden die Multimediafunktionen von WPF vorgestellt.

Medien-API

Die MediaElement- und MediaPlayer-Klassen werden verwendet, um Audio- oder Videoinhalte zu präsentieren. Diese Klassen können interaktiv oder durch eine Uhr gesteuert werden. Die Klassen können für das Microsoft Windows Media Player 10-Steuerelement zur Medienwiedergabe verwendet werden. Welche Klasse Sie verwenden, hängt vom Szenario ab.

MediaElement ist ein UIElement, das vom Layout unterstützt wird und als Inhalt vieler Steuerelemente verwendet werden kann. Es kann auch in Extensible Application Markup Language (XAML) sowie Code verwendet werden. MediaPlayer, hingegen ist für Drawing-Objekte konzipiert und bietet keine Unterstützung für das Layout. Medien, die mit einem MediaPlayer geladen wurden, können nur mit einem VideoDrawing oder durch direkte Interaktion mit einem DrawingContext präsentiert werden. MediaPlayer kann nicht in XAML verwendet werden.

Weitere Informationen zu Zeichnungsobjekten und zum Zeichnungskontext finden Sie unter Übersicht über Zeichnungsobjekte.

Hinweis

Wenn Sie Medien mit der Anwendung verteilen, ist es nicht möglich, eine Mediendatei als Projektressource zu verwenden. In der Projektdatei müssen Sie stattdessen den Medientyp auf Content festlegen, und CopyToOutputDirectory auf PreserveNewest oder Always.

Wiedergabemodi für Medien

Hinweis

MediaElement und MediaPlayer haben ähnliche Member. Die Links in diesem Abschnitt beziehen sich auf die Members der MediaElement-Klasse. Sofern nicht ausdrücklich vermerkt, sind die Member, auf die in der MediaElement-Klasse verwiesen wird, auch in der MediaPlayer-Klasse zu finden.

Um die Medienwiedergabe in Windows Presentation Foundation (WPF) zu verstehen, müssen Sie die verschiedenen Modi kennen, in denen Medien wiedergegeben werden können. MediaElement und MediaPlayer können in zwei verschiedenen Medienmodi verwendet werden, im unabhängigen Modus und im Taktmodus. Der Medien-Modus wird mithilfe der Clock -Eigenschaft bestimmt. Wenn Clocknull ist, befindet sich die Mediathek im unabhängigen Modus. Wenn der Clock nicht Null ist, befindet sich das Medienobjekt im Uhrmodus. Standardmäßig befinden sich Medienobjekte im unabhängigen Modus.

Unabhängiger Modus

Im unabhängigen Modus steuert der Medieninhalt die Medienwiedergabe. Im unabhängigen Modus sind die folgenden Optionen aktiviert:

  • Die Uri der Medien können direkt angegeben werden.

  • Die Medienwiedergabe kann direkt gesteuert werden.

  • Die Position- und SpeedRatio-Eigenschaften der Medien können geändert werden.

Medien werden entweder durch Festlegen der Eigenschaft des MediaElement Objekts oder durch Aufrufen der Source Methode des MediaPlayer Objekts Open geladen.

Die Steuerelementmethoden des Medienobjekts können verwendet werden, um die Medienwiedergabe im unabhängigen Modus zu steuern. Die verfügbaren Steuerelementmethoden sind Play, Pause, Close und Stop. Bei MediaElement ist die interaktive Steuerung mit diesen Methoden nur verfügbar, wenn der LoadedBehavior auf Manual gesetzt ist. Diese Methoden sind nicht verfügbar, sich wenn das Medienobjekt im Uhrmodus befindet.

Ein Beispiel für den unabhängigen Modus finden Sie unter Steuern eines MediaElement (Wiedergeben, Anhalten, Beenden, Lautstärke und Geschwindigkeit).

Uhrmodus

Im Uhrzeitmodus steuert ein MediaTimeline die Medienwiedergabe. Der Uhrmodus weist folgende Merkmale auf:

  • Uri der Medien wird indirekt über eine MediaTimeline gesendet.

  • Die Medienwiedergabe kann von der Uhr gesteuert werden. Die Steuerelementmethoden des Medienobjekts können nicht verwendet werden.

  • Medien werden geladen, indem Sie die Source-Eigenschaft eines MediaTimeline-Objekts festlegen, die Uhr in der Zeitleiste erstellen und die Uhr dem Medienobjekt zuweisen. Medien werden auch auf diese Weise geladen, wenn ein MediaTimeline innerhalb von Storyboard auf MediaElement zielt.

Um die Medienwiedergabe im Uhrmodus zu steuern, müssen die ClockController-Steuerungsmethoden verwendet werden. Eine ClockController wird aus der ClockController Eigenschaft des MediaClock. Wenn Sie versuchen, die Steuermethoden von einem MediaElement- oder MediaPlayer-Objekt zu verwenden, während Sie sich im Uhrmodus befinden, wird ein InvalidOperationException ausgelöst.

Weitere Informationen zu Uhren und Zeitachsen finden Sie unter Übersicht über Animationen.

Ein Beispiel für den Uhrmodus finden Sie unter Steuern eines MediaElement mit einem Storyboard.

MediaElement-Klasse

Wenn Sie Medien zu einer Anwendung hinzufügen möchten, müssen Sie lediglich ein MediaElement-Steuerelement zur der Anwendung hinzufügen und einen Uri für die Medien bereitstellen, die Sie aufnehmen möchten. Alle von Microsoft Windows Media Player 10 unterstützten Medientypen werden in Windows Presentation Foundation (WPF) unterstützt. Das folgende Beispiel zeigt eine einfache Verwendung der MediaElement In Extensible Application Markup Language (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>

In diesem Beispiel werden Medien automatisch wiedergegeben, sobald sie geladen werden. Sobald die Medienwiedergabe abgeschlossen ist, werden die Medium geschlossen und alle Medienressourcen freigegeben (einschließlich Videospeicher). Dies ist das Standardverhalten des Objekts und wird von den MediaElement und LoadedBehavior den UnloadedBehavior Eigenschaften gesteuert.

Steuern eines MediaElement

Die LoadedBehavior Eigenschaften UnloadedBehavior steuern das Verhalten des MediaElement Zeitpunkts IsLoadedtrue oder der falsejeweiligen Eigenschaften. Die MediaState-Eigenschaften werden so eingestellt, dass sie das Verhalten der Medienwiedergabe beeinflussen. Die Standardeinstellung lautet z. B. und der Standardwert LoadedBehaviorPlay ist UnloadedBehavior.Close Dies bedeutet, dass die Medien wiedergegeben werden, sobald das MediaElement geladen wird und der Vorlauf abgeschlossen ist. Nach Abschluss der Wiedergabe werden die Medien geschlossen und alle Medienressourcen freigegeben.

Die LoadedBehavior Eigenschaften UnloadedBehavior sind nicht die einzige Möglichkeit, die Medienwiedergabe zu steuern. Im Uhrmodus kann die Uhr die MediaElement und die interaktiven Steuerungsmethoden steuern, wenn dies istLoadedBehaviorManual. MediaElement behandelt diese Konkurrenz bei der Steuerung, indem die folgenden Prioritäten ausgewertet werden.

  1. UnloadedBehavior. Vorhanden, wenn Medien entladen werden. Dadurch wird sichergestellt, dass alle Medienressourcen standardmäßig freigegeben werden, auch wenn ein MediaClock mit dem MediaElement verbunden ist.

  2. MediaClock Vorhanden, wenn Medien einen Clock haben. Wenn der Datenträger entladen wird, wird die MediaClock solange wirksam, wie der UnloadedBehaviorManual ist. Der Taktmodus überschreibt immer das geladene Verhalten des MediaElement.

  3. LoadedBehavior Vorhanden, wenn Medien entladen werden.

  4. Interaktive Steuerelementmethoden. Vorhanden, wenn LoadedBehaviorManual ist. Die verfügbaren Steuerelementmethoden sind Play, Pause, Close und Stop.

Anzeigen eines MediaElement

Um eine MediaElement zu zeigen, muss diese einen Inhalt haben, der gerendert werden soll, und ihre ActualWidth- und ActualHeight-Eigenschaften werden auf Null gesetzt, bis der Inhalt geladen ist. Bei ausschließlichen Audioinhalten sind diese Eigenschaften immer null. Bei Videoinhalten melden das ActualWidth und ActualHeight, sobald das MediaOpened-Ereignis ausgelöst wurde, die Größe der geladenen Medien. Das bedeutet, dass die MediaElement keinen physischen Platz in der Benutzeroberfläche (UI) einnehmen, bis die Medien geladen werden, es sei denn, die Width- oder Height-Eigenschaften sind festgelegt.

Wenn Sie die beiden Width- und Height-Eigenschaften und einstellen, wird das Medium so gedehnt, dass es den für das MediaElement vorgesehenen Bereich ausfüllt. Um das ursprüngliche Seitenverhältnis des Mediums beizubehalten, sollte entweder die Width- oder Height-Eigenschaft gesetzt werden, aber nicht beide. Wenn Sie die beiden Width- und Height-Eigenschaften und einstellen, werden die Medien in einer festen Elementgröße angezeigt, was möglicherweise nicht wünschenswert ist.

Um zu vermeiden, dass ein Element eine feste Größe hat, kann die Windows Presentation Foundation (WPF) die Medien vorrollen. Dies erfolgt durch Festlegen der Einstellung auf LoadedBehavior entweder Play oder Pause. In einem Pause-Zustand wird das Medium vorgerollt und zeigt das erste Bild an. In einem Play-Zustand werden die Medien vorgerollt und beginnen zu spielen.

MediaPlayer-Klasse

Während die MediaElement-Klasse ein Framework-Element ist, ist die MediaPlayer-Klasse für die Verwendung in Drawing-Objekten vorgesehen. Zeichnungsobjekte werden verwendet, wenn Sie zur Leistungsverbesserung Features auf Frameworkebene opfern können oder wenn Sie Freezable-Features benötigen. Das MediaPlayer ermöglicht Ihnen, diese Features zu nutzen, wenn Sie Medieninhalte in Ihren Anwendungen bereitstellen. Wie MediaElement kann MediaPlayer im unabhängigen oder getakteten Modus verwendet werden, verfügt aber nicht über den entladenen und geladenen Zustand des Objekts MediaElement. Dies reduziert die Komplexität der Wiedergabesteuerung des MediaPlayer.

Steuern des MediaPlayer

Da MediaPlayer statusfrei ist, gibt es nur zwei Möglichkeiten, die Medienwiedergabe zu steuern.

  1. Interaktive Steuerelementmethoden. An Ort und Stelle, wenn Sie sich im unabhängigen Modus befinden (nullClock Eigenschaft).

  2. MediaClock. Vorhanden, wenn Medien einen Clock haben.

Anzeigen eines MediaElement

Technisch gesehen kann MediaPlayer nicht angezeigt werden, da keine physische Darstellung vorhanden ist. Sie kann jedoch zur Präsentation von Medien in einer Drawing mit der VideoDrawing-Klasse verwendet werden. Das folgende Beispiel veranschaulicht die Verwendung von 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();

Weitere Informationen zu -Objekten finden Sie unter Übersicht über ZeichnungsobjekteDrawing.

Weitere Informationen