Multimediaübersicht
Mit den Multimediafeatures in Windows Presentation Foundation (WPF) können Sie Audio und Video in Ihre Anwendungen integrieren, um die Benutzererfahrung zu verbessern. In diesem Thema werden die Multimediafeatures von WPF vorgestellt.
Medien-API
Die klassen MediaElement und MediaPlayer werden verwendet, um Audio- oder Videoinhalte darzustellen. Diese Klassen können interaktiv oder von einer 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. Sie kann sowohl in XAML (Extensible Application Markup Language) als auch in Code verwendet werden. MediaPlayerdagegen ist für Drawing Objekte ausgelegt und bietet keine Unterstützung für Layouts. 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 in XAML nicht verwendet werden.
Weitere Informationen zu Zeichnungsobjekten und Zeichnungskontext finden Sie unter Drawing Objects Overview.
Anmerkung
Beim Verteilen von Medien mit Ihrer Anwendung können Sie keine Mediendatei als Projektressource verwenden. In der Projektdatei müssen Sie stattdessen den Medientyp auf Content
festlegen und CopyToOutputDirectory
auf PreserveNewest
oder Always
festlegen.
Medienwiedergabemodi
Anmerkung
Sowohl MediaElement als auch MediaPlayer haben ähnliche Mitglieder. Die Links in diesem Abschnitt beziehen sich auf die MediaElement-Klassenmitglieder. Sofern nicht ausdrücklich angegeben, können Mitglieder, die mit der MediaElement Klasse verknüpft sind, auch in der MediaPlayer Klasse gefunden werden.
Um die Medienwiedergabe in Windows Presentation Foundation (WPF) zu verstehen, müssen Sie sich mit den verschiedenen Modi vertraut machen, in denen Medien wiedergegeben werden können. MediaElement und MediaPlayer können in zwei verschiedenen Medienmodi verwendet werden (unabhängiger Modus und getakteter Modus). Der Medienmodus wird durch die eigenschaft Clock bestimmt. Wenn Clock null
ist, befindet sich die Mediathek im unabhängigen Modus. Wenn der Clock nicht NULL ist, befindet sich das Medienobjekt im getakteten Modus. Medienobjekte befinden sich standardmäßig im unabhängigen Modus.
Unabhängiger Modus
Im unabhängigen Modus steuert der Medieninhalt die Medienwiedergabe. Der unabhängige Modus ermöglicht die folgenden Optionen:
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 Source des Objekts MediaElement oder durch Aufrufen der Methode Open des Objekts MediaPlayer geladen.
Um die Medienwiedergabe im unabhängigen Modus zu steuern, können die Steuermethoden des Medienobjekts verwendet werden. Die verfügbaren Steuerungsmethoden sind Play, Pause, Closeund Stop. Für MediaElementist eine interaktive Steuerung über diese Methoden nur verfügbar, wenn LoadedBehavior auf Manualfestgelegt ist. Diese Methoden sind nicht verfügbar, wenn sich das Medienobjekt im Taktmodus befindet.
Ein Beispiel für einen unabhängigen Modus finden Sie unter Steuern eines MediaElement (Wiedergabe, Pause, Stopp, Lautstärke und Geschwindigkeit).
Uhrenmodus
Im getakteten Modus steuert ein MediaTimeline die Medienwiedergabe. Der Taktmodus weist die folgenden Merkmale auf:
Der 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 getakteten Modus finden Sie unter Steuern eines MediaElement-Elements 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 einschließen 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 des 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 Medien geschlossen und alle Medienressourcen freigegeben (einschließlich Videospeicher). Dies ist das Standardverhalten des MediaElement Objekts und wird durch die eigenschaften LoadedBehavior und UnloadedBehavior gesteuert.
Steuern eines MediaElement-Elements
Die Eigenschaften LoadedBehavior und UnloadedBehavior steuern das Verhalten der MediaElement, wenn IsLoadedtrue
bzw. false
ist. 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 eigenschaften LoadedBehavior und UnloadedBehavior sind nicht die einzige Möglichkeit, die Medienwiedergabe zu steuern. Im getakteten Modus kann die Uhr das MediaElement-Element und die interaktiven Steuerungsmethoden steuern, wenn LoadedBehavior Manual entspricht. MediaElement geht mit diesem Kontrollwettbewerb um, indem die folgenden Prioritäten bewertet werden.
UnloadedBehavior. Vorhanden, wenn Medien entladen werden. Dadurch wird sichergestellt, dass alle Medienressourcen standardmäßig freigegeben werden, auch wenn ein MediaClock-Element mit dem MediaElement-Element verbunden ist.
MediaClock. Vorhanden, wenn Medien eine Clock-Eigenschaft aufweisen. Wenn der Datenträger entladen wird, wird die MediaClock solange wirksam, wie der UnloadedBehavior Manual ist. Der getaktete Modus überschreibt immer das geladene Verhalten des MediaElement-Elements.
LoadedBehavior. Vorhanden, wenn Medien geladen werden.
Methoden zur interaktiven Steuerung. Vorhanden, wenn LoadedBehavior Manual ist. Die verfügbaren Steuermethoden sind Play, Pause, Closeund Stop.
Anzeigen eines MediaElement-Elements
Um ein MediaElement-Element anzuzeigen, muss es einen Inhalt aufweisen, der gerendert werden soll, und die Eigenschaften ActualWidth und ActualHeight werden auf 0 (null) gesetzt, bis der Inhalt geladen ist. Bei nur Audioinhalten sind diese Eigenschaften immer null. Bei Videoinhalten melden ActualWidth und ActualHeight die Größe der geladenen Medien, sobald das MediaOpened-Ereignis ausgelöst wurde. 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 der Medien beizubehalten, sollte entweder die Width- oder Height-Eigenschaft festgelegt werden (aber nicht beide). Das Festlegen der Eigenschaften Width und Height führt dazu, dass die Medien in einer festen Elementgröße dargestellt werden, was möglicherweise unerwünscht ist.
Um zu vermeiden, dass ein Element eine feste Größe hat, kann Windows Presentation Foundation (WPF) den Vorlauf von Medien ermöglichen. 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 erfolgt ein Vorlauf der Medien und diese werden wiedergegeben.
MediaPlayer-Klasse
Wenn es sich bei der MediaElement-Klasse um ein Frameworkelement handelt, ist die MediaPlayer Klasse für die Verwendung in Drawing Objekten konzipiert. Zeichnungsobjekte werden verwendet, wenn Sie auf Features der Framework-Ebene verzichten können, um Leistungsvorteile zu erzielen, oder wenn Sie Freezable-Features benötigen. mit MediaPlayer können Sie diese Features nutzen, während Sie Medieninhalte in Ihren Anwendungen bereitstellen. Wie MediaElement kann MediaPlayer im unabhängigen Modus 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 der MediaPlayer statusfrei ist, gibt es nur zwei Möglichkeiten, die Medienwiedergabe zu steuern.
Interaktive Kontrollmethoden. Verfügbar im unabhängigen Modus (Clock-Eigenschaft
null
).MediaClock. Vorhanden, wenn Medien eine Clock-Eigenschaft aufweisen.
Anzeigen eines MediaPlayer-Elements
Technisch kann eine MediaPlayer nicht angezeigt werden, da sie keine physische Darstellung hat. Es 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.
Siehe auch
.NET Desktop feedback