GStreamer Kurs: Zaawansowane metody
Transkrypt
GStreamer Kurs: Zaawansowane metody
GStreamer Protokoły GStreamer elements GStreamer Bogdan Kreczmer [email protected] Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Zaawansowane metody programowania c Copyright2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Niniejsza prezentacja została wykonana przy użyciu systemu składu PDFLATEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements 1 GStreamer 2 Protokoły RTP Real-time Transport Protocol Real-time Transport Control Protocol 3 GStreamer elements Bins for sessions Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements GStreamer – ogólnie Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Potoki Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Komunikacja Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Elementy Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Pojemniki Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Czym jest protokół RTP RTP – (Real-time Transport Protocol) jest to protokół transmisji w czasie rzeczywistym. Pakiet protokołu RTP zawiera informacje takie jak: typie przesyłanych danych, numer seryjny, znacznik czasu. RTP nie gwarantuje jakości usługi (QoS). Używa on zazwyczaj jako protokołu warstwy transportowej protokołu UDP. Podstawowym obszarem zastosowań tego typu protokołu jest telefonia internetowa, systemy telekonferencyjne, serwisy telewizji internetowej itd. Protokół ten jest obecnie uznawany jako dominujący standard dla transmisji audio/video w sieciach internetowych. Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Podstawowe cechy Cechy Kompensacja pulsacji (ang. jitter), Kontrola poprawnej sekwencji przysyłanych pakietów danych, Pozwala na rozsyłanie danych do wielu punktów docelowych (multicast). Motywacja Aplikacje multimedialne tolerują częściową utratę danych. Np. utrata jednej 0,1s nagrania przy dobrych algorytmach maskujących dla odbiorcy końcowego, ta utrata może być w ogóle niezauważalna. W tego typu aplikacjach prefereuje się szybkość dostarczenia danych niż pewność ich otrzymania. Z tego powodu preferowany jest protokół UDP niż TCP. Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Struktura pakietu Struktura pakietu VoIP RTP Nagłówek IP Nagłówek UDP Nagłówek RTP Protokół RTP może być uważany jako podwarstwa warstwy transportowej. a a Zawartość RTP Z punktu widzenia programisty, RTP może być postrzegany jako część warstwy aplikacji. http://www.grc.upv.es/docencia/tra/referencias/MMProtocols/rtp.htm Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Czym jest protokół RTP RTCP – (Real-time Transport Control Protocol) jest to siostrzany protokół w stosunku do protokołu RTP. Wspiera on go dzięki mechanizmom sterującym. Dostarcza również informacji statystycznej. Protokół RTCP opiera się na okresowej transmisji pakietów kontrolnych do wszystkich uczestników sesji. Kodowanie i autoryzacja RTCP nie dostarcza żadnych mechanizmów kodowania i autoryzacji połączenia. Tego typu mechanizmy realizowane są przez inne protokoły takie jak SRTP (Secure Real-time Transport Protocol). Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Funkcje protokołu RTCP Podstawowe zadania: Dostarcza zwrotnej informacji odnośnie poprawności odebranych danych. Pozwala to na monitorowanie jakości usług i ewentualną adaptację metody kodowania. Przenosi stały identyfikator transportowy źródła protokołu RTP tzw nazwą kanoniczną (CNAME) do wszystkich danej sesji. Oczekuje się, że identyfikator źródła będzie unikalny. Jednak powiązanie źródła z punktem docelowym może się zmieniać w trakcie trwania sesji. CNAME dostarcza unikalnego identyfikatora dla danej instancji aplikacji. Umożliwia dopasowanie częstotliwość wysyłanych pakietów kontrolnych do liczby użytkowników sesji, Opcjonalnie – przenosi zminimalizowaną informację kontrolną sesji, np. wyświetlanie identyfikatora użytkownika (nadawcy) na ekranie monitora odbiorcy pakietów. Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Typy komunikatów Rodzaje komunikatów SR – (Sender Report) jest przesyłany periodycznie przez nadawcę/nadawców, aby przekazać i odebrać statystykę przesyłanych pakietów. Przesyłany raport zawiera znacznik czasu, co umożliwia zsynchronizowanie np. pakietów video i audio. RR – (Receiver Report) przyjmowanie statystyki od uczestników sesji nie będących aktywnymi nadawcami. SDES – (Source Description) przekazuje opis źródła wraz z danymi, które umożliwiają jego identyfikację. Jest wykorzystywany do przesłania identyfikatora CNAME. BYE – zakończenie udziału w sesji. APP – specyficzne komunikatay dla danej aplikacji. Pozwala to na tworzenie rozszerzeń protokołu RTCP. Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Real-time Transport Protocol Real-time Transport Control Protocol Komunikacja Wykorzystanie portów W typowej konfiguracji wykorzystującej protokoły RTP i RTCP zakłada się, że transmisja z wykorzystaniem protokołu RTP jest realizowana przez port UDP o parzystym numerze, zaś transmisja RTCP przez port o numerze o jeden większy od portu z transmisją z protokołem RTP. Zaawansowane metody programowania GStreamer Protokoły GStreamer elements Bins for sessions GstRtpSession – Ogólny opis GObject +----GstObject +----GstElement +----GstRtpSession GstRtpSession – jest menadżer sesji RTP, który modeluje pojedynczego użytkownika z unikalnym SSRC (Synchronization Source Identifier) w danej sesji RTP. Sesja ta może być użyta do odbioru pakietów RTP i RTCP. W zależności od tego jakiego typu łączówki (ang. pad) są żądane w trakcie tworzenia połączenia do elementów, powoduje to aktywowanie odpowiednich funkcjonalności. Zadania realizowane przez menadżera GstRtpSession Weryfikacja pakietów RTP na podstawie ich kolejnych numerów, Utrzymywanie bazy identyfikatorów SSRC uczestników sesji, Zbieranie statystyk dla każdego uczestnika sesji na podstawie pakietów RTCP. Utrzymywanie harmonogramu (ang. scheduling) pakietów RR/RS RTCP. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpSession – Funkcjonalności GObject +----GstObject +----GstElement +----GstRtpSession Użycie GstRtpSession do odbioru pakietów RTP – należy zażądać łączówki recv rtp sink, automatycznie zostanie wygenerowana łączówka recv rtp src. Użycie GstRtpSession do odbioru pakietów RTCP – należy zażądać łączówki recv rtcp sink, automatycznie zostanie wygenerowana łączówka sync src. Odbierane pakiety będą użyte do aktualizacji statystyk i bazy uczestników sesji. Użycie GstRtpSession do nadawania pakietów RTCP – należy zażądać łączówki send rtcp sink, automatycznie zostanie wygenerowana łączówka send rtcp src. Użycie GstRtpSession do nadawania pakietów RTP – należy zażądać łączówki send rtp sink, automatycznie zostanie wygenerowana łączówka send rtp src. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpSsrcDemux – Ogólny opis GObject +----GstObject +----GstElement +----GstRtpSsrcDemux GstRtpSsrcDemux – jest demultiplekserem dla pakietów protokołu RTP. Do demultipleksowania pakietów wykorzystywany jest identyfikator SSRC (Synchronization Source Identifier). Podstawowym celem GstRtpSsrcDemux jest ułatwienie odbioru pakietów RTP w strumieniu z różnymi SSRC. Funkcjonalności: Jeżeli w strumieniu zostanie wykryty nowy SSRC, to tworzona jest łączówka (pad) new-src-pad i emitowany jest sygnał. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpPtDemux – Ogólny opis GObject +----GstObject +----GstElement +----GstRtpPtDemux GstRtpPtDemux – jest demultiplekserem dla pakietów protokołu RTP. Do demultipleksowanie pakietów realizowane jest na podstawie typu jego zawartości. Funkcjonalności: Jeżeli w strumieniu zostanie wykryty nowy typ pakietu, to tworzona jest łączówka (pad) new-payload-type i emitowany jest sygnał. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpJitterBuffer – Ogólny opis GObject +----GstObject +----GstElement +----GstRtpJitterBuffer GstRtpJitterBuffer – składuje i usuwa duplikujące się odebrane pakiety RTP. Czeka też przez ustalony limit czasu na brakujące pakiety. Pakiety, które przyjdą zbyt późno uważane są za utracone. Aktywność tego elementu wprowadza pewne opóźnienie w potoku przetwarzającym pakiety. Aby oszacować swoje opóźnienie potrzebuje on częstotliwość zegara zawartości pakietów RTP. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpBin – Ogólny opis GObject +----GstObject +----GstElement +----GstBin +----GstRtpBin GstRtpBin – Łączy w sobie funkcje elementów GstRtpSession, GstRtpSsrcDemux, GstRtpJitterBuffer i GstRtpPtDemux. Pozwala na tworzenie wielu sesji RTP, które są synchronizowane razem pakietami RTCP SR. GstRtpBin jest konfigurowany poprzez żądanie udostępnienia łączówek, które definiują i aktywują odpowiednie funkcjonalności, analogicznie jak to jest w przypadku elementu GstRtpSession. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpBin – Opis działania: odbiorca pakietów RTP GObject +----GstObject +----GstElement +----GstBin +----GstRtpBin Załóżmy, że chcemy użyć GstRtpBin jako odbiorcę pakietów RTP. Należy wówczas zażądać łączówki recv rtp sink %d. Numer sesji musi być wyspecyfikowany w nazwie łączówki. (recv rtp sink %d → GstRtpSession): dane łączówki są dostarczne do menadżera GstRtpSession. (GstRtpSession): przetwarza i dokonuje weryfikacji, po czym przekazuje dalej. (GstRtpSsrcDemux): każdy strumień jest demultipleksowany w oparciu o identyfikatory SSRC, a następnie przesyłany dalej. (GstRtpJitterBuffer): wygładza strumień/strumienie i przesyła dalej. (GstRtpPtDemux): demultipleksuje strumienie w oparciu o typ ich zawartości pakietów RTP. Dla każdego indywidualnego rozdzielonego strumienia tworzone są łączówki recv rtp src %d %d %d. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpBin – Opis działania: odbiorca pakietów RTCP GObject +----GstObject +----GstElement +----GstBin +----GstRtpBin Odbiorca RTCP Załóżmy, że chcemy użyć GstRtpBin jako odbiorcę pakietów RTCP. Należy wówczas zażądać łączówki recv rtcp sink %d. Numer sesji musi być wyspecyfikowany w nazwie łączówki. Nadawca RTCP Jeżeli chcemy aby menadżer sesji generował i wysyłał pakiety RTCP, to należy zażądać łączówki recv rtcp src %d z odpowiednim numerem sesji. Pakiety wysyłane przez tę łączówkę będą zawierały raporty SR/RR RTCP. Powinny one być przesłane do wszystkich uczesników danej sesji. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpBin – Opis działania: nadawca pakietów RTP GObject +----GstObject +----GstElement +----GstBin +----GstRtpBin Załóżmy, że chcemy użyć GstRtpBin jako nadawcę pakietów RTP. Należy wówczas zażądać łączówki send rtp sink %d. Numer sesji musi być wyspecyfikowany w nazwie łączówki. Powyższe żądanie spowoduje automatyczne utworzenie łączówki send rtp src %d. Jeżeli numer sesji nie jest jawnie wyspecyfikowany, to zostanie udostępniona łączówka sesji o najniższym numerze. Przekazywane do menadżera sesji pakiety będą modyfikowane poprzez wstawienie przez niego własnego identyfikatora SSRC i w takiej postaci będą dalej przekazywane na wyjściową łączówkę send rtp src %d. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstX264Enc – Plugin: x264enc (Ugly) GObject +----GstObject +----GstElement +----GstX264Enc GstX264Enc – koduje surowy strumień video w skompresowany format H264, znany również jako MPEG-4 AVC (Advanced Video Codec). Ma możliwość ustawienia około 28 parametrów. Wybrane parametry: pass – kontroluje typ kodowania. Domyślnie: Constant Bitrate Encoding. bitrate – szybkość bitowa w kbit/s. threads – ilość wątków użytych przez kodek. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstX264Enc – Przykłady użycia GObject +----GstObject +----GstElement +----GstX264Enc gst-launch -v videotestsrc num-buffers=1000 ! x264enc qp-min=18 !\ avimux ! filesink location=videotestsrc.avi gst-launch -v v4l2src device="/dev/video1" !\ video/x-raw-yuv,width=320,height=240,framerate=10/1 !\ x264enc qp-min=18 ! avimux ! filesink location=videotestsrc.avi Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtpH264Pay – Plugin: x264enc (Good) GObject +----GstObject +----GstElement +----GstBaseRTPPayload +----GstRtpH264Pay GstRtpH264Pay – zakodowany strumień w formacie H264 konwertuje do pakietów RTP. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Bins for sessions GstRtph264Depay – Plugin: rtph264depay (Good) GObject +----GstObject +----GstElement +----GstBaseRTPDepayload +----GstRtpH264Depay GstRtpH264Depay – wydobywa z pakietów RTP zakodowany strumień w formacie H264. Zaawansowane metody programowania Autotools GStreamer Protokoły GStreamer elements Koniec prezentacji Dziękuję za uwagę Zaawansowane metody programowania Autotools