Udostępnij za pośrednictwem


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.

  1. 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.

  2. 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.

  3. LoadedBehavior. W miejscu, gdy nośnik jest ładowany.

  4. 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.

  1. Metody sterowania interakcyjnego. W trybie niezależnym (właściwośćnullClock).

  2. 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ż