Grupa ćwicz. 4 |
Grupa lab. 7 |
Zespół. 6 |
Data wykonania. 14.03.2014 r. |
Data odbioru
|
Nr ćwicz./ wersja 6 |
Temat ćwiczenia. Strumieniowanie |
|||
Imiona i nazwiska. Konrad Rugała, Mariusz Równy |
Ocena i uwagi
|
Część praktyczna
Opis wykonanego ćwiczenia:
Sprzęt:
3 komputery PC (laptopy) z procesorami Intel 64 bitowe.
OS: 2 komputery z Windows 8 i jeden z Windows 7.
Oprogramowanie:
VLC - Video Lan Client:
VLC media player - odtwarzacz multimedialny rozwijany przez VideoLAN, rozpowszechniany na licencji GPL, który może być także używany jako serwer w sieciach komputerowych o dużej przepustowości. Wśród obsługiwanych formatów znajdują się: Ogg, MPEG, DivX, MP3 i inne. Może również odtwarzać filmy z płyt DVD oraz VCD. Za jego pomocą można też oglądać film wraz z napisami (także ze znakami polskimi). Aplikacja jest dostępna na platformy Windows, Mac OS X, GNU/Linux, BeOS, WinCE. Od wersji 1.0.1 VLC potrafi dekodować dźwięk ze ścieżki Blu-ray Linear PCM lub Dolby Digital Plus. W nowej wersji 1.1.0 ulepszono dekodery Real Video (wersje 3.0 i 4.0), MIDI oraz WMA. Pojawiła się również możliwość obsługi formatów Dirac, MLP i RealVideo w kontenerach MKV oraz obsługa kodeku dźwiękowego ARM, wykorzystywanego głównie przez telefony komórkowe, które nagrywają pliki wideo w formacie 3gp. VLC posiada również obsługę cyfrowych tunerów telewizji satelitarnej, kablowej i nadziemnej. Dodano eksperymentalną obsługę nośników Blu-ray i materiałów AVCHD.
Dołączony został dostęp do serwera mediów strumieniowych Icecast i popularna wtyczka wizualizacji MilkDrop. VLC posiada także narzędzia do zgrywania filmów DVD na dysk twardy w przyzwoitej jakości. Za pomocą tego programu możliwe jest nagrywanie filmów podczas ich odtwarzania, jednakże przycisk nagrywania jest domyślnie ukryty. Aby go zobaczyć należy kliknąć na Widok > Zaawansowane kontrole. Kolejną ciekawą funkcją jest możliwość odtwarzania filmów skompresowanych w plikach RAR. Odtwarzane są jak normalne pliki wideo i można nawet użyć paska przewijania. Jeśli RAR jest podzielony na kilka plików nie stanowi to problemu. Dzięki VLC możemy odtworzyć pliki niekompletne lub uszkodzone. Zabawną funkcją jaką odtwarzacz dostarcza jest odtwarzania w trybie ASCII. Odtwarzacz zawiera setki stacji radiowych Shoutcast (podobnie jak winamp). Stosowany jest także jako serwer VOD(video na życzenie) oraz serwer proxy dla strumieni audio/video. Konwersja formatów audio i video z jednego formatu na drugi to opcja godna uwagi.
Większość dostępnych konwersji przedstawia screen obok. VLC umożliwia także ściąganie filmów z serwisu YouTube itp. Podczas wykonywania ćwiczenia odtwarzacz został wykorzystany do nadawania strumieni audio i wideo oraz odbioru na innych komputerach. Zainstalowana była najnowsza wersja oprogramowania tj. 2.1.3.
Wstęp teoretyczny:
Strumieniowanie - jest to przesyłanie danych multimedialnych od jednego użytkownika do drugiego (bądź wielu). Dane wysyłane z serwera (od nadawcy) są najpierw kompresowane, a następnie nadawane, co może się odbywać na dwa sposoby:
- Prosto od użytkownika - transmisja na żywo,
- Z danych przechowywanych na serwerze - transmisja na życzenie (VOD).
Multimediami strumieniowanymi są przede wszystkim pliki dźwiękowe, filmy, ale również inne dane takie jak napisy do filmów (tłumaczące film z języka obcego, podpisy dla niesłyszących), Real - Time text, czy taśmy giełdowe.
Strumieniowanie plików multimedialnych odbywa się na zasadzie kawałków. Pobierany jest jeden mały fragment pliku i jest on odtwarzany. W tym czasie pobierany jest kolejny fragment. Gdy pierwszy fragment jest odtworzony, jest on kasowany z pamięci komputera, a odtwarzany jest kolejny.
Dane transmitowane są najczęściej za pomocą protokołu UDP, który zastąpił wcześniej używany TCP. Protokół UDP w porównaniu do swojego poprzednika niesie ze sobą nowe funkcjonalności. Redukuje opóźnienia, pozwala na transmisję jeden do wielu oraz posiada krótszy nagłówek ramki. Jego minusem jest jego jednokierunkowość (UDP jest protokołem bezpołączeniowym), przez co nadawca nie wie, czy dane zostały poprawnie dostarczone odbiorcy. Z pomocą przychodzą protokoły RTP, RTSP, RTCP, które dbają o to aby dane dotarły do celu (niosą ze sobą również inne dodatkowe funkcje).
Strumieniowanie, w zależności od odbiorcy może odbywać się na kilka sposobów:
- anycast - dane są teoretycznie wysyłane do kilku odbiorców, ale odbiera tylko jeden, najbliższy,
- unicast - dane wysyłane są do jednego, konkretnego odbiorcy,
- multicast - dane wysyłane są do kilku odbiorców jednocześnie,
- broadcast - dane są rozgłaszane do wszystkich sieci.
Do strumieniowania danych nie ma jednej najpopularniejszej technologii. Do najpopularniejszych technologii zatem należą:
- Real Player,
- Flash Player,
- Real Media,
- Windows Media.
Najpopularniejszym kodekiem do przesyłania filmów stał się MPEG - 4, który pozwala na zachowanie wysokiej jakości. Odbywa się to kosztem większych wymagań sprzętowych ze względu na złożone algorytmy kodowania i dekodowania. Współczesne komputery radzą sobie z tym doskonale, więc jest to słabo zauważalne.
Pseudostrumieniowanie - wykorzystywane np. przez YouTube. Polega na przekazywanie multimediów, które są zapisywane na komputerze w pamięci tymczasowej, co pozwala na zatrzymanie, czy przewinięcie filmu lub utworu muzycznego. Odbywa się to na protokole HTTP.
Do wykonania ćwiczenia użyliśmy programu VLC na trzech komputerach. Aby rozpocząć strumieniowanie należy wybrać z zakładki „plik” wejść w opcje strumieniuj. Następnie dodajemy film, który będziemy nadawali poprzez opcje „dodaj”, po czym klikamy na przycisk „strumieniuj”. Wtedy pojawiają się nam „źródło” gdzie podana jest ścieżka pliku, który mamy zamiar odtworzyć.
Aby móc wybrać pożądany sposób transmisji, klikamy przycisk „następny” i ukazują się nam cele strumieniowania. Ustawiamy tutaj metodę transmisji, której chcemy używać. Jednak trzeba mieć na uwadze, że nie każdy format może być zgodny z wybraną metodą. W naszym przypadku wybraliśmy metodę http. Kolejnym krokiem jest wybór opcji transkodowania.
Wygląd okna gdzie dokonujemy wyboru pokazuje zrzut ekranu. Ważne jest, aby nie zapomnieć o opcji „Dodaj”. Po kliknięciu na nią pojawia się pole gdzie należy wybrać odpowiedni port i ścieżkę. W przypadku http korzystaliśmy z portu nr 8080. Nadawanie rozpoczynamy klikając na przycisk „strumieniuj”.
Aby odtworzyć strumień na kliencie potrzebny jest nam adres IP nadawcy. Wybieramy zakładkę „Plik”->Odtwórz strumień w sieci”, pojawi się okno gdzie wpisujemy adres wraz z protokołem sieci.
Schemat ćwiczenia:
a) Wyjścia - protokoły (port)
- RTSP(:5544)
- UDP(:1234)
- HTTP(:8080)
b) Profile strumieniowania
- MPEG - 2 + MPGA (TS)
- Video - H.264+MP3 (MP4)
c) Testowe pliki wideo
- 2_adrenalinerush.wmv
- 5_shrek3.mov
d) Podczas każdego z testów badaliśmy parametry na komputerze działającym jako serwer oraz na drugim, działającym jako klient(jeden z dwóch klientów). Trzeci komputer służył tylko do obciążania sieci.
Informacje zdobyte z serwera:
Nazwa pliku, oryginalny kodek i parametry pliku(informacje o pliku Crtl + I, zakładka szczegóły kodeka i statystyki)
Protokół wykorzystywany do strumieniowania wraz z parametrami
Profil(enkapsulacja, kodek video, kodek audio) - (przy definicji strumienia: „opcje transkodowania” -> ”edytuj wybrany profil”)
Wykorzystanie sieci - wartość średnia i maksymalna - na podstawie grafu menadżera zadań windows (ctrl+alt+del)
Wykonano zrzuty ekranu na których widać historie zużycia procesora, wartość średnią i maksymalną, wykorzystanie sieci oraz statystyki strumienia (informacja o pliku, zakładka statystyki).
Informacje zdobyte z klienta:
Nazwa pliku
kodek video, rozdzielczość video
Informacje o strumieniu audio
Wykorzystanie sieci wartość średnia i maksymalna - na podstawie menadżera windows.
Wykonano zrzuty ekranu na których widać historie zużycia procesora, wartość średnią i maksymalną, wykorzystanie sieci oraz statystyki strumienia (informacja o pliku, zakładka statystyki).
e)Testy z punktu d) wykonaliśmy dla wszystkich możliwych kombinacji elementów wybranych przez prowadzącego z punktów a), b), c)
Nie udało nam się niestety ani razu wykonać strumieniowania przez protokół UDP. Przyczynę porażki widzimy albo w niezgodnych systemach operacyjnych (na jednym komputerze Windows 7, a na drugim Windows 8), lub jakiś błąd podczas łączenia, którego nie mogliśmy znaleźć ani przewidzieć.
Wyniki:
Wszystkie testy ponumerowne:
nr. |
Nazwa pliku |
Kodek |
Protokół |
1 |
2_adrenalinerush.wmv |
Video - H.264+MP3 (MP4) |
RTSP(:5544) |
2 |
2_adrenalinerush.wmv |
MPEG - 2 + MPGA (TS) |
RTSP(:5544) |
3 |
2_adrenalinerush.wmv |
Video - H.264+MP3 (MP4) |
HTTP(:8080) |
4 |
2_adrenalinerush.wmv |
MPEG - 2 + MPGA (TS) |
HTTP(:8080) |
5 |
5_shrek3.mov |
Video - H.264+MP3 (MP4) |
RTSP(:5544) |
6 |
5_shrek3.mov |
MPEG - 2 + MPGA (TS) |
RTSP(:5544) |
7 |
5_shrek3.mov |
Video - H.264+MP3 (MP4) |
HTTP(:8080) |
8 |
5_shrek3.mov |
MPEG - 2 + MPGA (TS) |
HTTP(:8080) |
Test nr 1
Zrzuty ekranów będą z powodu ich ilości tylko przy tym teście pokazane, Wybraliśmy przedstawiać wyniki w formie czytelniejszych i mniej obszernych tabelek. Reszta zrzutów znajduje się pod adresem: http://speedy.sh/jwqME/Screeny-Strumieniowanie.zip
Właściwości pliku nr 2 „2_adrenalinerush.wmv”
Przykładowy zrzut ekranu z komputera będącego serwerem na temat kodeków, właściwości strumieniowanego pliku:
Przykładowy zrzut ekranu z serwera - statystyki z informacji na temat pliku w VLC.
Zrzut ekranu przedstawiający jakie obciążenie generuje program VLC podczas strumieniowania (zrzut z serwera).
Zrzut ekranu komputera (klienta) pokazujące zużycie procesora.
Zrzut menadżera zadań pokazujące użycie sieci podczas odbierania strumienia (klient).
Zrzut Statystyk z VLC (Ctrl + J) z komputera klienta.
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
3,2 Mb/s |
60% |
1,63 Mb/s |
32% |
186 |
496 |
53 |
b. słaba |
Test nr 2
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
12 Mb/s |
13% |
3,4 Mb/s |
15% |
207 |
208 |
15 |
słaba |
Test nr 3
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
0,5 Mb/s |
52% |
2,2 Mb/s |
30% |
1160 |
1353 |
1 |
średnia |
Test nr 4
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
2,8 Mb/s |
5% |
4,3 Mb/s |
26% |
773 |
774 |
2 |
średnia |
Test nr 5
Właściwości pliku nr 5
„5_shrek3.mov”
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
1,1 Mb/s |
13% |
0,39 Mb/s |
16% |
1279 |
1282 |
18 |
b.dobra |
Test nr 6
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
2,8 Mb/s |
5,7% |
1,92 Mb/s |
20% |
414 |
410 |
1 |
b.dobra |
Test nr 7
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
0,3 Mb/s |
3% |
1,73 Mb/s |
20 |
172 |
306 |
0 |
wysoka |
Test nr 8
Wykorzystanie Sieci |
Wykorzystanie CPU |
Wykorzystanie sieci |
Użycie CPU |
Zdekodowane Bloki |
Wyświetlone klatki |
Zgubione klatki |
Jakość filmu |
0,3 Mb/s |
2,6% |
2,24 Mb/s |
25 |
507 |
506 |
1 |
Najlepsza |
Opracowanie wyników
nr. |
Nazwa pliku |
Kodek |
Protokół |
1 |
2_adrenalinerush.wmv |
Video - H.264+MP3 (MP4) |
RTSP(:5544) |
2 |
2_adrenalinerush.wmv |
MPEG - 2 + MPGA (TS) |
RTSP(:5544) |
3 |
2_adrenalinerush.wmv |
Video - H.264+MP3 (MP4) |
HTTP(:8080) |
4 |
2_adrenalinerush.wmv |
MPEG - 2 + MPGA (TS) |
HTTP(:8080) |
5 |
5_shrek3.mov |
Video - H.264+MP3 (MP4) |
RTSP(:5544) |
6 |
5_shrek3.mov |
MPEG - 2 + MPGA (TS) |
RTSP(:5544) |
7 |
5_shrek3.mov |
Video - H.264+MP3 (MP4) |
HTTP(:8080) |
8 |
5_shrek3.mov |
MPEG - 2 + MPGA (TS) |
HTTP(:8080) |
Wykres przedstawiający zależność między obciążeniem CPU dla serwera i dla klienta oraz profilem strumieniowania
Wykres przedstawiający zależność między obciążeniem sieci dla serwera i dla klienta w zależności od badanego profilu strumieniowania
Wykres przedstawiający zależność obciążenia serwera w zależności od rozdzielczości pliku. Niebieskie kolumny przedstawiają rozdzielczość 1280x720, a żółte 640x360
Wykres przedstawiający zależność obciążenia klienta w zależności od rozdzielczości pliku. Niebieskie kolumny przedstawiają rozdzielczość 1280x720, a żółte 640x360
Wykres przedstawiający zależność między profilem strumieniowania, a liczbą zgubiony klatek.
Wnioski
Do przeprowadzenia testów wybrano filmy: 2_adrenalinerush.wmv oraz 5_shrek3.mov. Pierwszy z filmów był w wyższej rozdzielczości niż drugi (pierwszy 1280x720, natomiast drugi 640x360), jednak mimo to ilość klatek na sekundę w obu przypadkach wynosiła 24 (na serwerze).
Pierwsze co się rzuca w oczy to sprawa obciążenia klienta. Obciążenie te nie zmienia się bardzo przy różnych profilach strumieniowania. Znaczy to tyle, że komputer klienta musi się podobnie napracować przy obu badanych protokołach i kodekach.
Słaba jakość wideo zwłaszcza pierwszych badanych plików wynikała z powodu większej rozdzielczości i jakości danego filmu. Jakościowo (jakość wideo jak i strumienia - czyli brak przycinania obrazu, dźwięku) najlepiej wyszło strumieniowanie protokołem HTTP wraz z kodekiem MPEG - 2. Profil HTTP plus MPEG - 2 obciąża najmocniej sieć od strony klienta, lecz znacznie odciąża serwer. Jest to akurat szczególnie wina protokołu HTTP, który tak działa w komunikacji klient, serwer.
Najgorzej strumieniowanie wyszło dla protokołu RTSP wraz z kodekiem h.264, który przycinał oraz strasznie obciążał serwer oraz klienta, jak widać na ostatnim wykresie także gubił klatki.
Obciążenie sieci zależało najbardziej od profilu strumieniowania. Większa ilość klatek na sekundę spowodowała intensywniejsze obciążenie sieci, co było związane z większą liczbą przesyłanych informacji (pakietów).
Podsumowując możemy z całą pewnością stwierdzić, że użycie odpowiedniego profilu strumieniowania ma duży wpływ na jakość odtwarzanego filmu oraz na obciążenia związane z pracą serwera i klienta.