Tworzenie aplikacji RIA w Silverlight 5 - Współpraca z mediami Udostępnij na: Facebook

Autor: Tomasz Kowalczyk

Opublikowano: 2012-08-27

Jest to piąta część cyklu, w której przedstawiane zostaną możliwości Silverlight 5. Z poniższego artykułu dowiesz się, jak bezpośrednio wykorzystywać media w aplikacji, wykonanej w Silverlight 5.

Po przeczytaniu poniższego artykułu będziesz wiedział, jak:

  • dołączać pliki audio i wideo do swoich projektów,
  • korzystać z bibliotek XNA, w celu odtwarzania dźwięków i korzystania z trybu Low Latency Sound,
  • korzystać z komponentu MediaCommand, w celu sterowania odtwarzaniem plików wideo.

Wprowadzenie

W pewnego rodzaju oprogramowaniu, tj. aplikacjach typu KIOSK (aplikacje sterowane dotykiem, posiadające konkretną funkcjonalność, uruchamiane bezpośrednio po włączaniu urządzenia, na którym zostały zainstalowane), pożądane jest, aby móc odtwarzać dźwięk w odpowiedzi na akcje wywołane przez użytkownika.

W poprzednich wersjach Silverlight programiści zmuszeni byli do używania wszelkiego rodzaju sztuczek, aby osiągnąć efekt, podobny do opisanego powyżej (np. buforowany pre-loading komponentów MediaElement). W momencie pojawienia się Windows Phone, a wraz z nim pisania programów na to urządzenie z wykorzystaniem Silverlight, programiści otrzymali możliwość używania obiektów SoundEffect, pochodzących z bibliotek XNA. Silverlight 5 również posiada już tę opcję, co pozwala w łatwy sposób manipulować mediami.

Kolejną istotną cechą Silverlight 5 w dziedzinie obsługi mediów jest obsługaMediaCommand oraz możliwość korzystania ze zdalnych urządzeń sterujących (np. pilotów) do komunikacji pomiędzy użytkownikiem a aplikacją, wykonaną w technologii Silverlight 5. Użytkownicy laptopów lub osoby korzystające z multimedialnych klawiatur mają teraz możliwość użycia przycisków funkcyjnych, pozwalających np. na regulację głośności w celu interakcji z oprogramowaniem wykonanym w Silverlight 5 - Rys. 1. Multimedialna klawiatura Microsoft.

Multimedialna klawiatura Microsoft

Rys. 1. Multimedialna klawiatura Microsoft.

Implementacja

W celu wyjaśnienia, w jaki sposób używać wyżej opisanych funkcji Silverlight 5, powstał przykładowy projekt, który składa się z dwóch podprojektów.

W pierwszym z nich przedstawiony został sposób odtwarzania dźwięków Low Latency Sound w postaci odegrania dźwięku wystrzału, który zostanie odtworzony po tym, jak użytkownik kliknie przyciskiem znajdującym się na ekranie.

Drugi projekt pokazuje, w jaki sposób korzystać z MediaCommand w celu sterowania odtwarzaniem pliku wideo, umieszczonego na stronie. Tak przygotowana aplikacja umożliwia użytkownikom obsługę za pomocą przycisków funkcyjnych, multimedialnych klawiatur lub wszelkiego rodzaju pilotów sterujących. W projekcie tym umieszczono również przycisk, którego kliknięcie powoduje wyświetlenie materiału wideo w trybie Full screen.

Informacja
Wszystkie kody źródłowe projektów, utworzonych w ramach artykułów, będą dostępne na tej stronie.

Po pobraniu i otwarciu projektu należy wybrać, który z podprojektów będzie aktywowany po uruchomieniu aplikacji. Aby to zrobić, należy kliknąć prawym przyciskiem myszy na projekt lls_media.Web i wybrać Properties, a następnie wybrać właściwy plik w formatce Specific page w zakładce Web, znajdującej się po lewej stronie, w sekcji Start action - Rys. 2. Wybór głównego projektu.

Wybór głównego projektu

Rys. 2. Wybór głównego projektu.

Low Latency Sound

Po wybraniu pliku lls_mediaTestPage.aspx, projekt, który przedstawia, w jaki sposób odtwarzać pliki dźwiękowe w trybie Low Latency Sound, ustawiony zostanie jako uruchomieniowy. Umieszczona w pliku MainPage.xaml kontrolka Button odpowiada za odegranie odpowiedniego pliku po jej naciśnięciu:

<Button Content="Shot" Height="23" HorizontalAlignment="Left" Margin="163,67,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

Aby było to możliwe, należy powołać obiekt typu SoundEffect. W zdarzeniu MainPage_Loaded, które zostanie wywoływane w momencie wczytywania się aplikacji, trzeba pobrać plik, który ma zostać odtworzony:

var laserStream =
              Application.GetResourceStream(new Uri("shot.wav", UriKind.RelativeOrAbsolute));
            _laserShotEffect = SoundEffect.FromStream(laserStream.Stream);

Następnie, w metodzie zdarzeniowej, uruchamianej po wciśnięciu przycisku, zostanie powołany obiekt SoundEffectInstance, a na nim uruchomiona metoda Play(), która odtworzy konkretny plik audio:

SoundEffectInstance instance = _laserShotEffect.CreateInstance();
            instance.Pitch = 1.0f;
            instance.Play();

MediaCommand

Po wybraniu pliku video_mediaTestPage.aspx, projekt, który przedstawia, w jaki sposób odtwarzać pliki wideo i sterować nimi z wykorzystaniem MediaCommand i urządzeń zewnętrznych, zostanie ustawiony jako uruchomieniowy. Plik MainPage.xaml składa się z trzech kontrolek, które odpowiadają za: wyświetlenie pliku wideo (MediaElement), przełączenie odtwarzanego pliku w tryb Full screen (Button) oraz wyświetlenie informacji (TextBlock) o statusie odtwarzanego pliku (Pause, Play):

<MediaElement x:Name="videoPlayer" Source="/Wildlife.wmv"/>
<TextBlock x:Name="txtMediaKey" Foreground="Red" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,135,67" FontSize="20" />
<Button x:Name="FullScreen" HorizontalAlignment="Left" VerticalAlignment="Bottom" Content="Go Full Screen" Margin="5" Click="FullScreen_Click" />
Informacja
W pobranym repozytorium nie został umieszczony plik wideo, ze względu na rozmiary takich plików. Do katalogu z projektem video_media można przekopiować plik, znajdujący się na dysku twardym o rozszerzeniu *.wmv.

Następnie, w konstruktorze zostanie powołana metoda, mająca za zadanie przechwycić zdarzenie, wywoływane przez kontrolkę MediaElement:

this.MediaCommand += new MediaCommandEventHandler(MainPage_MediaCommand);

Po czym, w zależności od wybranego przez użytkownika trybu, w tej metodzie plik wideo będzie odtwarzany bądź chwilowo zatrzymywany:

switch (e.MediaCommand)
            {
                case System.Windows.Media.MediaCommand.Play:
                    videoPlayer.Play();
                    return;
                case System.Windows.Media.MediaCommand.Pause:
                    videoPlayer.Pause();
                    return;
                case System.Windows.Media.MediaCommand.Stop:
                    videoPlayer.Stop();
                    return;
            }

Efekt, tak przygotowanego programu, przedstawiono na Rys. 3 Odtwarzanie plików wideo. Można zaobserwować napisy świadczące o tym, że dany plik wideo został zatrzymany.

Odtwarzanie plików wideo

Rys. 3. Odtwarzanie plików wideo.

Podsumowanie

W tym artykule poznaliśmy możliwości Silverlight 5 w zakresie obsługi mediów. Wiemy, w jaki sposób odtwarzać dźwięki w odpowiedzi na zdarzenie wywołane przez użytkownika aplikacji. Nauczyliśmy się obsługiwać programowo zdarzenia, wywołane naszą aplikacją przez użytkownika, korzystającego np. z multimedialnej klawiatury.

W następnej części dowiemy się, jak pracować z tekstem z poziomu Silverlight 5.