Omówienie multimediów
Funkcje multimedialne w programie Windows Presentation Foundation (WPF) umożliwiają integrację audio i wideo z aplikacjami w celu ulepszenia środowiska użytkownika. W tym temacie przedstawiono funkcje multimedialne WPF.
API mediów
Klasy MediaElement i MediaPlayer służą do prezentowania zawartości audio lub wideo. Te klasy mogą być kontrolowane interaktywnie lub przez zegar. Te klasy mogą korzystać z kontrolki Microsoft Windows Media Player 10 dla odtwarzania multimediów. Która klasa jest używana, zależy od scenariusza.
MediaElement to UIElement obsługiwana przez Layout i może być zużywana jako zawartość wielu kontrolek. Można go również używać w rozszerzalnym języku znaczników aplikacji (XAML), a także w kodzie. MediaPlayer, z drugiej strony, jest przeznaczony do Drawing obiektów i nie obsługuje układu. Nośnik załadowany przy użyciu MediaPlayer można prezentować tylko przy użyciu VideoDrawing lub bezpośrednio poprzez interakcję z DrawingContext. MediaPlayer nie można używać w języku XAML.
Aby uzyskać więcej informacji na temat obiektów rysunkowych i kontekstu rysunku, zobacz Obiekty rysunkowe — omówienie.
Notatka
Podczas dystrybucji multimediów z aplikacją nie można użyć pliku multimedialnego jako zasobu projektu. W pliku projektu należy ustawić typ nośnika na Content
i ustawić CopyToOutputDirectory
na wartość PreserveNewest
lub Always
.
Tryby odtwarzania multimediów
Notatka
Zarówno MediaElement, jak i MediaPlayer mają podobnych członków. Linki w tej sekcji odnoszą się do składowych klasy MediaElement. O ile nie określono konkretnie, składowe połączone z klasą MediaElement można również znaleźć w klasie MediaPlayer.
Aby zrozumieć odtwarzanie multimediów w programie Windows Presentation Foundation (WPF), wymagane jest zrozumienie różnych trybów odtwarzania multimediów. Zarówno MediaElement, jak i MediaPlayer można używać w dwóch różnych trybach multimedialnych, trybie niezależnym i trybie zegara. Tryb mediów jest określany przez właściwość Clock. Kiedy Clock ma wartość null
, obiekt nośnika znajduje się w trybie niezależnym. Gdy Clock ma wartość inną niż null, obiekt nośnika jest w trybie zegara. Domyślnie obiekty multimedialne są w trybie niezależnym.
Tryb niezależny
W trybie niezależnym zawartość multimedialna steruje odtwarzaniem. Tryb niezależny umożliwia następujące opcje:
Numer Uri dla nośnika można określić bezpośrednio.
Można bezpośrednio sterować odtwarzaniem multimediów.
Właściwości Position i SpeedRatio nośnika można modyfikować.
Media są ładowane przez ustawienie właściwości Source obiektu MediaElement lub wywołanie metody Open obiektu MediaPlayer.
Aby kontrolować odtwarzanie multimediów w trybie niezależnym, można użyć metod sterowania obiektu multimedialnego. Dostępne metody sterowania to Play, Pause, Closei Stop. W przypadku MediaElementkontrolka interaktywna korzystająca z tych metod jest dostępna tylko wtedy, gdy LoadedBehavior jest ustawiona na Manual. Te metody są niedostępne, gdy obiekt nośnika jest w trybie zegara.
Zobacz , jak sterować elementem MediaElement (odtwarzanie, wstrzymywanie, zatrzymywanie, głośność i szybkość) na przykładzie trybu niezależnego.
Tryb zegara
W trybie pracy zegara, urządzenie MediaTimeline steruje odtwarzaniem multimediów. Tryb zegara ma następujące cechy:
Uri multimediów jest pośrednio ustawiana za pośrednictwem MediaTimeline.
Odtwarzanie multimediów można sterować zegarem. Nie można użyć metod sterowania obiektu multimedialnego.
Nośnik jest ładowany przez ustawienie właściwości Source obiektu MediaTimeline, utworzenie zegara z osi czasu i przypisanie zegara do obiektu nośnika. Media jest również ładowane w ten sposób, gdy MediaTimeline wewnątrz Storyboard jest skierowane do MediaElement.
Aby kontrolować odtwarzanie multimediów w trybie zegara, należy użyć metod sterowania ClockController. ClockController jest uzyskiwany z właściwości ClockControllerMediaClock. Jeśli spróbujesz użyć metod sterowania obiektu MediaElement lub MediaPlayer w trybie zegarowym, zostanie zgłoszony InvalidOperationException.
Aby uzyskać więcej informacji na temat zegarów i osi czasu, zobacz Omówienie animacji.
Zobacz Kontrolowanie elementu MediaElement przy użyciu scenorysu, aby zapoznać się z przykładem trybu zegara.
Klasa MediaElement
Dodawanie multimediów do aplikacji jest tak proste, jak dodanie kontrolki MediaElement do interfejsu użytkownika aplikacji i przypisanie Uri multimediom, które chcesz uwzględnić. Wszystkie typy multimediów obsługiwane przez program Microsoft Windows Media Player 10 są obsługiwane w programie Windows Presentation Foundation (WPF). Poniższy przykład przedstawia proste użycie MediaElement w języku 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>
W tym przykładzie media są odtwarzane automatycznie zaraz po załadowaniu. Po zakończeniu odtwarzania multimediów nośnik zostanie zamknięty, a wszystkie zasoby multimedialne zostaną wydane (w tym pamięć wideo). Jest to domyślne zachowanie obiektu MediaElement i jest kontrolowane przez właściwości LoadedBehavior i UnloadedBehavior.
Kontrolowanie elementu MediaElement
Właściwości LoadedBehavior i UnloadedBehavior kontrolują zachowanie MediaElement, gdy IsLoaded jest odpowiednio true
lub false
. Właściwości MediaState są ustawione tak, aby wpływać na zachowanie odtwarzania multimediów. Na przykład domyślna LoadedBehavior to Play, a domyślna UnloadedBehavior to Close. Oznacza to, że po załadowaniu MediaElement i zakończeniu prerollowania media zaczynają odtwarzać. Po zakończeniu odtwarzania nośnik jest zamykany, a wszystkie zasoby multimedialne są zwalniane.
Właściwości LoadedBehavior i UnloadedBehavior nie są jedynym sposobem kontrolowania odtwarzania multimediów. W trybie zegarowym zegar może kontrolować MediaElement, a interaktywne metody sterowania przejmują kontrolę, gdy LoadedBehavior jest Manual. MediaElement zarządza tą rywalizacją o kontrolę, poprzez ocenę następujących priorytetów.
UnloadedBehavior. W miejscu, gdy nośnik jest usuwany. Dzięki temu wszystkie zasoby multimedialne są domyślnie zwalniane, nawet gdy MediaClock jest skojarzone z MediaElement.
MediaClock. Gdy nośnik jest ustawiony w pozycji z Clock. Jeśli nośnik zostanie wyjęty, MediaClock zacznie obowiązywać o ile UnloadedBehavior jest Manual. Tryb zegara zawsze zastępuje załadowane zachowanie MediaElement.
LoadedBehavior. W miejscu, gdy nośnik jest ładowany.
Metody sterowania interakcyjnego. W miejscu, gdy LoadedBehavior jest Manual. Dostępne metody sterowania to Play, Pause, Closei Stop.
Wyświetlanie elementu multimedialnego
Aby wyświetlić MediaElement, musi mieć ono zawartość do renderowania. Jego właściwości ActualWidth i ActualHeight zostaną ustawione na zero, dopóki zawartość nie zostanie załadowana. W przypadku zawartości tylko audio te właściwości są zawsze zerowe. W przypadku treści wideo, po podniesieniu zdarzenia MediaOpened, ActualWidth i ActualHeight zgłoszą rozmiar załadowanych materiałów. Oznacza to, że dopóki nośnik nie zostanie załadowany, MediaElement nie zajmie żadnego miejsca fizycznego w interfejsie użytkownika, chyba że zostaną ustawione właściwości Width lub Height.
Ustawienie właściwości Width i Height spowoduje, że media rozciągną się, aby wypełnić obszar przewidziany dla MediaElement. Aby zachować oryginalny współczynnik proporcji nośnika, należy ustawić właściwość Width lub Height, ale nie obie. Ustawienie właściwości Width i Height spowoduje, że media będą wyświetlane w stałym rozmiarze elementu, co może być niepożądane.
Aby uniknąć posiadania elementu o stałym rozmiarze, Windows Presentation Foundation (WPF) może wstępnie buforować multimedia. W tym celu należy ustawić LoadedBehavior na Play lub Pause. W stanie Pause nośnik będzie wstępnie odtwarzany i przedstawi pierwszą klatkę. W stanie Play media będą przygotowane do odtwarzania i zostaną odtworzone.
Klasa MediaPlayer
Podczas gdy klasa MediaElement jest elementem frameworku, klasa MediaPlayer została zaprojektowana do użytku w obiektach Drawing. Obiekty rysunkowe są używane, gdy można poświęcić funkcje na poziomie frameworku, aby poprawić wydajność lub gdy potrzebujesz funkcji Freezable. MediaPlayer umożliwia korzystanie z tych funkcji podczas udostępniania zawartości multimedialnej w aplikacjach. Podobnie jak MediaElement, MediaPlayer można używać w trybie niezależnym lub zegarowym, ale nie posiada stanów rozładowanego i załadowanego obiektu MediaElement. Zmniejsza to złożoność sterowania odtwarzaniem MediaPlayer.
Kontrolowanie odtwarzacza multimediów
Ponieważ MediaPlayer jest bezstanowa, istnieją tylko dwa sposoby kontrolowania odtwarzania multimediów.
Metody sterowania interakcyjnego. W trybie niezależnym (właściwość
null
Clock).MediaClock. W miejscu, gdy nośnik ma Clock.
Wyświetlanie odtwarzacza MediaPlayer
Technicznie nie można wyświetlić MediaPlayer, ponieważ nie ma fizycznej reprezentacji. Można go jednak użyć do prezentowania multimediów w Drawing przy użyciu klasy VideoDrawing. W poniższym przykładzie pokazano użycie VideoDrawing do wyświetlania multimediów.
//
// 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();
Aby uzyskać więcej informacji na temat obiektów Drawing, zobacz omówienie obiektów rysunkowych .
Zobacz też
.NET Desktop feedback