• Nie Znaleziono Wyników

Internetowa strumieniowa transmisja obrazu

N/A
N/A
Protected

Academic year: 2021

Share "Internetowa strumieniowa transmisja obrazu"

Copied!
5
0
0

Pełen tekst

(1)

LABORATORIUM

SYSTEMÓW I TERMINALI MULTIMEDIALNYCH Ćwiczenie nr 3:

Internetowa strumieniowa transmisja obrazu

Opracowanie: dr inż. Grzegorz Szwoch aktualizacja 18.04.2018

1. WPROWADZENIE

Celem ćwiczenia jest zapoznanie studentów z metodami strumieniowego przesyłania obrazu ruchomego przez Internet oraz protokołami sieciowymi używanymi do tego celu. Rolę prostego serwera multimediów będzie pełnił darmowy program VLC (www.videolan.org/vlc/). Do analizy protokołów sieciowych zastosowany będzie program Wireshark (www.wireshark.org).

Transmisja obrazu przez Internet jest obecnie szeroko stosowana w serwisach udostępniających multimedia (np. YouTube), w transmisjach na żywo (telewizja internetowa), itp. Najprostszym sposobem udostępnienia pliku wideo użytkownikom jest umożliwienie pobrania go na dysk lokalnego komputera i późniejsze odtworzenie. Ponieważ pliki wideo mają często dużą objętość, odbiorca musiałby długo czekać na pobranie pliku (ponadto zapisywanie pliku na dysku mogłoby naruszać prawa autorskie). Rozwiązaniem jest streaming, czyli pobieranie porcji materiału multimedialnego i wyświetlanie ich bezpośrednio po odebraniu, przy użyciu odtwarzacza multimedialnego (np. Windows Media Player lub VLC). W celu przekazywania danych między serwerem a klientem potrzebne są odpowiednie protokoły sieciowe [1].

1.1. Tryby transmisji strumieniowej

Tryby transmisji strumieniowej definiują sposób w jaki serwer udostępnia odbiorcom strumień danych.

Unicast udostępnia strumień tylko jednemu odbiorcy. Każdy odbiorca otrzymuje zatem swój własny strumień danych. Rozwiązanie sprawdza się tylko przy ograniczonej liczbie użytkowników, zbyt duża liczba klientów powoduje nadmierne obciążenie serwera.

Multicast udostępnia pojedynczy strumień grupie użytkowników. Najczęściej stosowany jest tryb IP Multicast: serwer przesyła strumień danych na wirtualny adres IP, należący do zakresu od 224.0.0.0 do 239.255.255.255. Klienci muszą połączyć się z tym wybranym adresem. Zadaniem routerów sieciowych jest zduplikowanie strumienia przesłanego na wybrany adres oraz przesłanie kopii strumienia do podłączonych klientów. Wadą tego rozwiązania jest konieczność udziału routerów w procesie przekazywania danych oraz brak możliwości strumieniowania danych na żądanie (klient podłącza się do „płynącego” strumienia).

Peer-to-peer (P2P) – w tym trybie każdy z klientów jest jednocześnie serwerem i przesyła otrzymane dane innym klientom w sieci. Przykładem takiego rozwiązania jest system Sopcast. Wadą tego rozwiązania jest brak kontroli nad pracą sieci, problemy z wydajnością oraz potencjalna możliwość łamania praw autorskich przez użytkowników.

Video on demand (VOD) czyli wideo na żądanie to tryb, w którym klient sam wybiera materiał, który chce oglądać, decydując o rozpoczęciu i przerwaniu odtwarzania. Przykładem może być np. serwis YouTube lub systemy płatnej telewizji transmitującej obraz przez Internet.

1.2. Protokoły transmisji strumieniowej

Najprostszym protokołem jest UDP (User Datagram Protocol). Dane są dzielone na pakiety UDP i przesyłane do klientów. Protokół jest wydajny i łatwy w implementacji, ale nie ma żadnej

(2)

pewności że pakiety trafią do adresata. Oprogramowanie klienta musi wykrywać utracone pakiety. W praktyce stosuje się protokoły dedykowane do transmisji strumieniowej, „obudowujące” pakiety UDP w bardziej złożone struktury. Najważniejsze protokoły z tej grupy to RTP i RTCP [1]. Protokół TCP (Transmission Control Protocol), stosowany np. w serwerach HTTP, jest rzadko stosowany do transmisji strumieniowej ze względu na zbyt duże opóźnienia (związane z nawiązywaniem połączeń, ponownym przesyłaniem utraconych danych, itp.).

RTP (Real-time Transport Protocol) jest używany do przesyłania pakietów zawierających obraz lub dźwięk [2]. Obsługuje tryb multicast, zawiera mechanizmy kompensacji opóźnień typu

jitter oraz synchronizację danych (np. gdy pakiety przychodzą w niewłaściwej kolejności). Dla

każdego strumienia danych nawiązywane są osobne połączenia (sesje) RTP (osobno dla obrazu i dla dźwięku).

RTCP (Real-time Transport Control Protocol) współpracuje z protokołem RTP. Służy do kontrolowania strumieni RTP oraz udostępnia dane statystyczne dotyczące transmisji [3]. Główną rolą RTCP jest dostarczanie informacji o jakości połączenia (QoS – Quality of Service). Serwer lub klient mogą wykorzystać te informacje np. do przełączenia się na bardziej oszczędny tryb kodowania gdy liczba utraconych ramek jest zbyt duża.

RTSP (Real Time Streaming Protocol) jest przeznaczony do sterowania serwerami mediów. Pakiety RTSP obsługują komendy związane z parametrami połączenia (SETUP), sterowaniem odtwarzaniem (PLAY, PAUSE), nagrywaniem (RECORD), odpytywaniem serwera o możliwości (OPTIONS, DESCRIBE) [4]. RTSP ma szczególne znaczenie w przypadku trybu VOD (wideo na żądanie).

MMS (Microsoft Media Server) był protokołem własnym firmy Microsoft, oczywiście niekompatybilnym z niczym poza oprogramowaniem tej firmy. Obecnie Microsoft porzucił ten format na rzecz RTCP, jednak dla zachowania kompatybilności, odtwarzacz Windows Media

Player obsługuje protokół mms:// (domyślnie łączy się on jednak za pomocą protokołu RTCP).

Wymienione wyżej protokoły są najczęściej stosowane, jednak oprócz nich wykorzystuje się inne, specjalistyczne protokoły, np. do obsługi połączeń szyfrowanych (SRTP), nawiązywania sesji z serwerem (SIP), przesyłania danych multimedialnych (H.263), kontroli strumienia (SCTP), itp. Warto wspomnieć o protokole SAP (Session Announcement Protocol), który służy do informowania klientów w sieci lokalnej o udostępnianych strumieniach.

1.3. Formaty przesyłania danych strumieniowych

Transmisja strumieniowa wygląda w skrócie następująco: surowe dane multimedialne są kodowane za pomocą kodeka (np. XVid), następnie są pakietyzowane, opakowywane za pomocą odpowiedniego formatu (np. ASF) i przesyłane przez sieć za pomocą protokołu (np. RTP). Format przesyłania danych opisuje sposób opakowania (ang. encapsulation) zakodowanych danych multimedialnych. Dzięki temu osobne strumienie zawierające obraz, dźwięk i dane dodatkowe (np. napisy) mogą być przesyłane i synchronizowane po stronie odbiorczej. Główne formaty danych strumieniowych opisano poniżej.

▪ MPEG-TS (MPEG Transport Stream) – stosowany do celów telewizji cyfrowej (DVB –

Digital Video Broadcast). Zawiera mechanizmy korekcji błędów.

▪ MPEG-PS (MPEG Program Stream) – w odróżnieniu od TS jest zoptymalizowany do zastosowań, w których utrata pakietów jest mało prawdopodobna, a więc raczej do zapisu na płytach DVD niż transmisji przez sieć.

▪ ASF (Advanced Systems Format) – format firmy Microsoft do strumieniowego przesyłania multimediów. Zawiera silne wsparcie dla algorytmów kontroli dostępu.

▪ QuickTime (MOV) – format firmy Apple

▪ RealMedia (RM) – format firmy RealNetworks służący do przesyłania danych zakodowanych w RealVideo i RealAudio.

▪ AVI (Audio Video Interleave).

▪ Ogg – darmowy i otwarty format zapisu danych, z tego względu chętnie stosowany w oprogramowaniu open source.

(3)

2. ZADANIA I OPRACOWANIE

UWAGA: do wykonania ćwiczenia potrzebne są dwa komputery, najlepiej stojące obok siebie. Jeden z komputerów będzie pełnił rolę serwera, drugi – klienta.

W zastosowaniach profesjonalnych stosowane są komercyjne serwery strumieniowe. W niniejszym ćwiczeniu posłużymy się darmowym programem VLC (opis dotyczy wersji 2.2.4), który może pracować w trybie prostego serwera strumieniowego. Aby wykorzystać wszystkie możliwości programu, należy posługiwać się opcjami w linii poleceń, w ćwiczeniu wykorzystamy tylko opcje udostępniane przez interfejs programu. Opis możliwości VLC w zakresie streamingu danych można znaleźć w nieco już nieaktualnej dokumentacji [5]. Wskazówka: w razie problemów (np. strumień nie uruchamia się) warto włączyć okno komunikatów (Narzędzia > Komunikaty) i ustawić poziom szczegółów na 1 lub 2.

Do analizy ruchu sieciowego służy program Wireshark Legacy [6]. Uruchomienie analizy pakietów następuje po wybraniu z menu Capture funkcji Options. W polu Capture filter możemy wpisać filtr określający jakie pakiety mają być „łapane” przez program. Złapane pakiety wyświetlane na liście można filtrować za pomocą pola Filter w oknie głównym programu.

UWAGA: w ćwiczeniu wykorzystywany jest program VLC w wersji 2.2.4 (32 bit). Znajduje się on w katalogu D:\STM\vlc-2.2.4. Nowsze wersje programu (3.x) nie mają prawidłowo działającej funkcji streamingu.

2.1. UDP Unicast

Odczytać (np. za pomocą polecenia ipconfig) adresy IP serwera i klienta. Uruchomić łapanie pakietów w programie Wireshark Legacy na obu komputerach przez wybranie pozycji Capture

Options; w polu Capture filter należy wpisać filtr pozwalający łapać pakiety zawierające adres

klienta lub serwera. Jeżeli np. adres serwera to 192.168.206.51 a adres klienta to 192.168.206.52, należy wpisać:

host 192.168.206.51 or host 192.168.206.52

Na komputerze serwera upewnić się że jest możliwe pobieranie obrazu z kamery USB podłączonej do komputera. W programie VLC wybrać z menu Plik funkcję Otwórz urządzenie przechwytywania. W oknie ustawień wybrać z listy właściwe urządzenie obrazu, ustawić urządzenie dźwięku na None. W polu Rozmiary obrazu wpisać: 640x480. Upewnić się że obraz jest wyświetlany (przycisk

Odtwarzaj). Jeżeli kamera nie obsługuje tej rozdzielczości, znaleźć inną działająca, zbliżoną

rozmiarem do podanej wyżej.

Na serwerze w programie VLC udostępnić strumień obrazu z kamery USB za pomocą protokołu UDP Unicast. Zaczynamy od wybrania z menu Plik opcji Strumieniuj (skrót: Control+S). Następnie w okienku programu należy wykonać następujące polecenia.

▪ Wybrać źródło: zakładka Urządzenie przechwytywania, z listy Tryb przechwytywania wybieramy DirectShow, ustawiamy parametry tak jak we wcześniej wykonanym teście. Klikamy przycisk Strumieniuj, w kolejnym oknie Następny.

▪ Z listy Nowy cel wybrać protokół, w tym przypadku UDP (legacy), kliknąć Dodaj. ▪ Wpisać adres IP klienta w polu Adres i ew. port poniżej. Kliknąć Następny.

▪ Zaznaczyć opcję Włącz transkodowanie. Musimy przygotować sobie profil kodowania. W tym celu należy:

- kliknąć trzecią ikonkę (Utwórz nowy profil), - wpisać własną nazwę profilu,

- zakładka Enkapsułkowanie: zaznaczyć MPEG–TS,

- zakładka Kodek obrazu: Obraz zaznaczone, Zachowaj oryginalną... odznaczone, kodek H265 (wybrać z listy), Bitrate 800 kbit/s, liczba klatek (Frame rate) 10. - zakładka Kodek dźwięku: odznaczone Dźwięk,

- zakładka Napisy: odznaczone Napisy,

- kliknąć Utwórz

▪ UWAGA: utworzony profil należy wybierać za każdym razem gdy uruchamiane jest strumieniowanie.

(4)

▪ Kliknąć przycisk Następny. W kolejnej zakładce kliknąć przycisk Strumień.

Na komputerze klienta w VLC wybrać Plik > Otwórz strumień w sieci. W polu adresu wpisać (zakładając, że numer portu jest domyślny, w razie potrzeby należy go zmienić):

udp://@:1234

Kliknąć Odtwarzaj.

▪ Zweryfikować czy obraz jest poprawnie przesyłany. Opisać charakter ewentualnie zaobserwowanych zniekształceń, wyjaśnić przyczyny ich powstania.

▪ Oszacować i zanotować opóźnienie obrazu względem źródła. Wskazać jego przyczyny. ▪ W programie Wireshark zaobserwować i zanotować jakiego typu pakiety (jakie protokoły)

związane z transmisją strumieniową są przesyłane, między jakimi adresami.

▪ Wyłączyć odtwarzanie na komputerze klienta. Czy karta sieciowa tego komputera nadal odbiera pakiety strumieniowe? Dlaczego tak się dzieje?

▪ Dlaczego klient nie musi podawać żadnego adresu przy podłączaniu do strumienia? 2.2. RTP Unicast

Powtórzyć operacje z pkt. 2.1, ale wybierając tym razem protokół RTP / MPEG Transport Stream na serwerze i podając odpowiedni protokół oraz numer portu (domyślnie 5004) w kliencie.

▪ Jakie pakiety są tym razem przesyłane? Jaka jest różnica w porównaniu z trybem UDP? ▪ Przeanalizować zawartość warstwy RTP dowolnego pakietu. Co zawiera pole payload? ▪ W programie Wireshark klienta złapać pakiety RTCP (wpisać rtcp do pola Filter w głównym

oknie programu). Kliknąć na jednym z takich pakietów, przeanalizować jego zawartość (pominąć warstwy niskiego poziomu) i wynotować w sprawozdaniu jakie informacje istotne dla jakości transmisji są w nim przenoszone.

2.3. RTP Multicast

Postąpić podobnie jak w poprzednim punkcie, ale tym razem w polu Adres na serwerze wpisać adres IP z puli multicast: wziąć adres IP serwera i zamienić w nim pierwszy człon (192) na 224 (np. 224.168.206.51). Mógłby to być dowolny adres z zakresu multicast, chodzi tylko o to, aby nie było konfliktu z innymi grupami. Na komputerze klienta należy podać ten sam adres.

▪ Co zmieniło się w przesyłanych pakietach względem poprzedniego przypadku (unicast)? ▪ Czy inne komputery w sali laboratoryjnej mogą podłączyć się do strumienia z serwera?

Uzasadnić odpowiedź.

▪ W jakich praktycznych przypadkach użyteczna jest transmisja typu multicast? 2.4. SAP

Powtórzyć operacje z polecenia 2.3, ale tym razem przy podawaniu adresu docelowego na serwerze dodatkowo wpisać wybraną przez siebie nazwę (bez spacji i znaków specjalnych) w polu Nazwa

strumienia. Uruchomić strumieniowanie.

W VLC po stronie klienta włączamy listę odtwarzania (Widok > Lista odtwarzania) i przechodzimy do pola Sieć lokalna > Strumienie Sieciowe (SAP).

▪ Sprawdzić czy w liście odtwarzania klienta pojawił się udostępniony strumień (czasami trzeba trochę poczekać). Jeżeli tak, spróbować go odtworzyć.

▪ Jeżeli na liście widoczne są strumienie innych użytkowników, spróbować je odtworzyć.

▪ W polu Filter w oknie głównym programu Wireshark wpisać: sap i nacisnąć Enter (muszą być małe litery). Zaznaczyć jeden z pakietów SAP i przeanalizować jego zawartość. Zanotować w sprawozdaniu jakie istotne informacje, umożliwiające odnalezienie strumienia w sieci i nawiązanie transmisji, są przenoszone w warstwach SAP i SDP pakietu.

(5)

2.5. Video on Demand (VOD)

W ostatnim zadaniu praktycznym przetestujemy tryb VOD, Tym razem musimy udostępnić plik wideo (przykładowy plik: D:\STM\01\f.avi).

W programie VLC po stronie serwera wybieramy opcję Narzędzia > Konfiguracja VLM. Z listy na górze wybieramy Wideo na życzenie (VOD). W polu Nazwa wpisujemy dowolną nazwę (bez spacji i znaków specjalnych). Zaznaczamy Włączone. Klikamy Wybierz wejście i wybieramy plik wideo. Pole Wyjście pozostawiamy puste. Klikamy Dodaj (strumień powinien pojawić się na Liście

menedżera plików), następnie Zamknij.

Po stronie klienta otwieramy strumień sieciowy – musimy wpisać adres IP serwera, numer portu (domyślny to 554) i nazwę strumienia, np.:

rtsp://192.168.206.51:554/Strumien

Klikamy Odtwarzaj (przy włączonym łapaniu pakietów w Wireshark, filtr w oknie głównym programu musi być pusty).

▪ Sprawdzić czy plik jest prawidłowo odtwarzany. Opisać zauważone zniekształcenia. ▪ Sprawdzić czy działają opcje pauzy i przewijania.

▪ W programie Wireshark zaobserwować i zanotować jakiego typu pakiety (jakie protokoły) związane z transmisją strumieniową są przesyłane.

▪ Wpisać filtr wyświetlania pakietów: rtsp. Odtworzyć kilkukrotnie plik, dokonując pauzowania, zatrzymywania, itp. Zaobserwować przesyłane pakiety i opisać w sprawozdaniu w jaki sposób odbywa się sterowanie strumieniem z poziomu klienta.

▪ Przeanalizować zawartość jednego z pakietów RTSP, zanotować w sprawozdaniu dane istotne dla sterowania procesem odtwarzania.

▪ W jakich praktycznych zastosowaniach strumieniowanie za pomocą protokołów UDP/RTP byłoby wystarczające, a kiedy protokół RTSP jest konieczny? Uzasadnić odpowiedź.

BIBLIOGRAFIA

[1] Wikipedia: Streaming media

http://en.wikipedia.org/wiki/Streaming_media

[2] Wikipedia: Real-time Transport Protocol (RTP)

http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

[3] Wikipedia: Real-time Transport Control Protocol (RTCP)

http://en.wikipedia.org/wiki/Real-time_Transport_Control_Protocol

[4] Wikipedia: Real Time Streaming Protocol (RTSP)

http://en.wikipedia.org/wiki/Real-time_Streaming_Protocol

[5] A. de Lattre, J. Bilien, A. Daoud et al.: VideoLAN Streaming Howto.

https://wiki.videolan.org/Documentation:Streaming_HowTo/

Cytaty

Powiązane dokumenty

równoległej transmisji strumieni danych o małych przepływnościach powoduje wydłużenie odstępu jednostkowego modulacji do wartości odpowiadającej długości odpowiedzi kanału.

¨ Można wykorzystać proces synchronizacji do generacji sygnałów mikrofalowych.. ¨ Detektor nie jest czuły na fazę sygnału optycznego a rejestruje docierającym do niego

• Styki styczników do załączenia kondensatorów są zabezpieczone przed zespawaniem ponieważ mają zdolność łączeniową prądów szczytowych do 200 x I e.

W celu przesłania siecią teleinformatyczną pliku zawierającego dane osobowe niezbędne jest zaszyfrowanie pliku przed jego wysłaniem.. Do szyfrowania pliku należy użyć

W celu przesłania siecią teleinformatyczną pliku zawierającego dane osobowe niezbędne jest zaszyfrowanie pliku przed jego wysłaniem.. Do szyfrowania pliku należy użyć

longest and shortest wave components found in the irregular measured trace OT determine the so-called predictable area in space and time where prediction is possible using trace OT

Cele lekcji: Nauczysz się konstruować obrazy w soczewkach i określać ich cechy.. p=

56: Filter responses with the Wednesday filter: comparison of the week days Wednesday and Sunday with the respective normal time series .... 57: Difference of the filter response