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

Podobne dokumenty