Übersicht über Multimedia

Aktualisiert: November 2007

In diesem Thema werden die Multimediafeatures von Windows Presentation Foundation (WPF) vorgestellt. Mit den Multimediafeatures können Sie in Ihren Anwendungen Sound und Video integrieren, um die Benutzerfreundlichkeit zu verbessern.

Dieses Thema enthält folgende Abschnitte.

  • Medien-API
  • Wiedergabemodi für Medien
  • MediaElement-Klasse
  • MediaPlayer-Klasse
  • Verwandte Abschnitte

Medien-API

Es werden sowohl MediaElement als auch MediaPlayer verwendet, um Audio, Video und Video mit Audioinhalt zu präsentieren. Beide Typen können interaktiv oder durch eine Uhr gesteuert werden. Für beide Typen steht mindestens Microsoft Windows Media Player 10 OCX für die Medienwiedergabe zur Verfügung. Die Verwendung dieser API zielt jedoch auf andere Szenarien ab.

MediaElement ist ein UIElement, das von Das Layoutsystem unterstützt wird und als Inhalt von vielen Steuerelementen verwendet werden kann. Es kann sowohl in Extensible Application Markup Language (XAML) als auch in Code verwendet werden. MediaPlayer ist andererseits für Drawing-Objekte vorgesehen und bietet keine Layoutunterstützung. Medien, die mit dem MediaPlayer geladen werden, können nur mithilfe von VideoDrawing oder durch direkte Interaktion mit einem DrawingContext angezeigt werden. MediaPlayer kann in XAML nicht verwendet werden.

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

Tipp

Wenn Sie Medien mit der Anwendung verteilen, können Sie eine Mediendatei nicht als Projektressource verwenden. Sie müssen stattdessen in der Projektdatei den Medientyp auf Content und CopyToOutputDirectory auf PreserveNewest oder Always festlegen.

Wiedergabemodi für Medien

Tipp

MediaElement und MediaPlayer verfügen über ähnliche Member. Die Links in diesem Abschnitt verweisen auf die MediaElement-Klassenmember. Wenn nicht ausdrücklich anders angegeben, sind Member, für die in der MediaElement-Klasse Verknüpfungen enthalten sind, auch in der MediaPlayer-Klasse enthalten.

Um die Medienwiedergabe in Windows Presentation Foundation (WPF) zu verstehen, sollten Sie mit den verschiedenen Modi vertraut sein, in denen Medien wiedergegeben werden können. Sowohl MediaElement als auch MediaPlayer können in zwei verschiedenen Medienmodi verwendet werden: im unabhängigen Modus oder im Uhrmodus. Der Medienmodus wird durch die Clock-Eigenschaft bestimmt. Wenn Clocknull ist, befindet sich das Medienobjekt im unabhängigen Modus. Wenn 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:

  • Der Uri von Medien kann direkt angegeben werden.

  • Die Medienwiedergabe kann direkt gesteuert werden.

  • Die Position-Eigenschaft und die SpeedRatio-Eigenschaft von Medien können geändert werden.

Medien werden geladen, indem entweder die Source-Eigenschaft des MediaElement-Objekts festgelegt oder die Open-Methode des MediaPlayer-Objekts aufgerufen wird.

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. Für MediaElement ist die interaktive Steuerung mit diesen Methoden nur verfügbar, wenn das LoadedBehavior auf Manual festgelegt wird. Diese Methoden sind nicht verfügbar, wenn sich das Medienobjekt im Uhrmodus befindet.

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

Uhrmodus

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

  • Der Uri von Medien wird indirekt durch eine MediaTimeline festgelegt.

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

  • Medien werden geladen, indem die Source-Eigenschaft eines MediaTimeline-Objekts festgelegt, die Uhr aus der Zeitachse erstellt und die Uhr dem Medienobjekt zugeordnet wird. Medien werden auch auf diese Weise geladen, wenn eine MediaTimeline in einem Storyboard auf ein MediaElement ausgerichtet ist.

Um die Medienwiedergabe im Uhrmodus zu steuern, müssen die ClockController-Steuerelementmethoden verwendet werden. Ein ClockController wird von der ClockController-Eigenschaft der MediaClock abgerufen. Wenn Sie versuchen, die Steuerelementmethoden eines MediaElement-Objekts oder eines MediaPlayer-Objekts zu verwenden, während es sich im Uhrmodus befindet, wird eine InvalidOperationException ausgelöst.

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

Ein Beispiel für den Uhrmodus finden Sie unter Gewusst wie: 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 Benutzeroberfläche (user interface, UI) 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. Im folgenden Beispiel wird eine einfache Verwendung von MediaElement in Extensible Application Markup Language (XAML) veranschaulicht.

<!-- 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>

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

MediaElement-Steuerung

Die LoadedBehavior-Eigenschaft bzw. die UnloadedBehavior-Eigenschaft steuert das MediaElement-Verhalten, wenn IsLoadedtrue bzw. false ist. Der MediaState, auf den die Eigenschaften festgelegt werden, beeinflusst das Verhalten der Medienwiedergabe. Beispielsweise ist LoadedBehavior standardmäßig Play, und UnloadedBehavior ist standardmäßig Close. Dies bedeutet, dass die Medien wiedergegeben werden, sobald das MediaElement geladen wird und der Vorlauf beendet ist. Sobald die Wiedergabe abgeschlossen ist, werden die Medien geschlossen und alle Medienressourcen freigegeben.

Es gibt auch andere Möglichkeiten, die Medienwiedergabe zu steuern, als mit der LoadedBehavior-Eigenschaft und der UnloadedBehavior-Eigenschaft. Im Uhrmodus kann die Uhr das MediaElement steuern, und die interaktiven Steuerelementmethoden übernehmen die Steuerung, wenn das LoadedBehaviorManual ist. MediaElement behandelt diese Konkurrenz bei der Steuerung, indem die folgenden Prioritäten ausgewertet werden.

  1. UnloadedBehavior. Vorhanden, wenn Medien entladen werden. Dies stellt sicher, dass alle Medienressourcen standardmäßig freigegeben werden, auch wenn eine MediaClock mit dem MediaElement verknüpft ist.

  2. MediaClock. Vorhanden, wenn Medien eine Clock haben. Wenn Medien entladen werden, ist die MediaClock wirksam, solange das UnloadedBehaviorManual ist. Der Uhrmodus überschreibt immer das LoadedBehavior für das MediaElement.

  3. LoadedBehavior. Vorhanden, wenn Medien geladen werden.

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

MediaElement-Anzeige

Um ein MediaElement anzuzeigen, muss dieses Element Inhalt besitzen, der gerendert werden kann. Die ActualWidth-Eigenschaft und die ActualHeight-Eigenschaft werden auf 0 (null) festgelegt, bis Inhalt geladen wird. Bei ausschließlichen Audioinhalten sind diese Eigenschaften immer 0 (null). Für Videoinhalte wird gleich nach dem Auslösen des MediaOpened-Ereignisses von ActualWidth und ActualHeight die Größe der geladenen Medien angegeben. Bis die Medien geladen sind, benötigt das MediaElement also keinen Speicherplatz in der Benutzeroberfläche (user interface, UI), es sei denn, die Width-Eigenschaft oder die Height-Eigenschaft wird festgelegt.

Wenn sowohl die Width-Eigenschaft als auch die Height-Eigenschaft festgelegt ist, werden die Medien gestreckt, sodass sie den Bereich ausfüllen, der für das MediaElement bereitgestellt wurde. Um das ursprüngliche Seitenverhältnis der Medien beizubehalten, legen Sie entweder die Width-Eigenschaft oder die Height-Eigenschaft fest, jedoch nicht beide Eigenschaften gleichzeitig. Wenn Sie sowohl die Width-Eigenschaft als auch die Height-Eigenschaft festlegen, werden die Medien in einem Element mit festgelegter Größe angezeigt. Dies ist u. U. nicht wünschenswert.

Um ein Element mit fester Größe zu vermeiden, kann Windows Presentation Foundation (WPF) einen Vorlauf für die Medien durchführen. Legen Sie hierzu das LoadedBehavior auf Play oder auf Pause fest. In einem Pause-Zustand wird für die Medien ein Vorlauf durchgeführt und der erste Frame angezeigt. In einem Play-Zustand wird für die Medien ein Vorlauf durchgeführt und die Wiedergabe gestartet.

MediaPlayer-Klasse

Während es sich bei der MediaElement-Klasse um ein Frameworkelement handelt, ist die MediaPlayer-Klasse auf die Verwendung in Drawing-Objekten ausgerichtet. Zeichnungsobjekte werden verwendet, wenn Sie zur Leistungsverbesserung Features auf Frameworkebene opfern können oder wenn Sie Freezable-Features benötigen. MediaPlayer ermöglicht Ihnen, diese Features zu nutzen, wenn Sie Medieninhalte in Ihren Anwendungen bereitstellen. Wie das MediaElement kann MediaPlayer im unabhängigen Modus oder im Uhrmodus verwendet werden, verfügt jedoch nicht über den entladenen oder geladenen Zustand des MediaElement-Objekts. Dies reduziert die Komplexität der Wiedergabesteuerelemente von MediaPlayer.

MediaPlayer-Steuerung

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

  1. Interaktive Steuerelementmethoden Im unabhängigen Modus vorhanden (nullClock-Eigenschaft).

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

MediaPlayer-Anzeige

Technisch gesehen kann MediaPlayer nicht angezeigt werden, da keine physische Darstellung vorhanden ist. MediaPlayer kann jedoch verwendet werden, um mithilfe der VideoDrawing-Klasse Medien in einer Drawing anzuzeigen. Im folgenden Beispiel wird veranschaulicht, wie mit einer VideoDrawing Medien angezeigt werden.

//
// 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 über Drawing-Objekte finden Sie unter Übersicht über Zeichnungsobjekte.

Siehe auch

Aufgaben

Videotextdemo

Schiebepuzzledemo

Konzepte

Das Layoutsystem

Referenz

DrawingGroup