Projektowanie infrastruktury pod streaming video – oprogramowanie

By Patrycja Dziedzic8 października, 2021
video streaming software infrastructure

This post is also available in: English

Jeżeli chcemy zaprojektować wydajną infrastrukturę pod streaming dla naszego serwisu WWW lub aplikacji musimy najpierw dobrze zrozumieć z czego powinna ona się składać. Podział, który tutaj zaprezentuję dotyczy przede wszystkim warstwy oprogramowania. Ta z kolei skalowana jest na warstwie sprzętowej, którą sobie omówimy później.

Aplikacja streamująca

Cały proces streamingu zaczyna się od aplikacji streamującej, która może być zainstalowana zarówno na zwykłym telefonie, komputerze klasy PC/Mac jak i profesjonalnej stacji roboczej. W przypadku niektórych protokołów jak np. WebRTC aplikacją streamującą może być np. sama przeglądarka Internetowa. Istnieje też wiele programów, które oferują wymaganą funkcjonalność np. OpenBroadcaster, XSplit, a dla urządzeń mobilnych np. Larix. Aplikacja streamująca ma za zadanie przetworzyć obraz i wysłać go specjalnym protokołem do serwera streamingowego.

Serwer Streamingowy

Drugim elementem infrastruktury jest oczywiście serwer streamingowy. Jego zadaniem jest odbiór sygnału z omówionej już aplikacji streamingowej. Taka aplikacja może spełniać kilka ról lub rozdzielać je pomiędzy inny aplikacje. Przykładem może być transcoding, czyli proces obróbki oryginalnego sygnału źródłowego na inne, o mniejszej rozdzielczości i bitrat’cie. Proces ten jest dość istotny, jeżeli chcemy prezentować materiały w wysokiej jakości, ponieważ nie wszyscy nasi widzowie będą w stanie go odbierać w takiej formie. Aby materiał mógł być uznany, za FullHD, powinien on być nadawany w rozdzielczości 1920×1080, co wymaga ok. 5-7 Megabitów/s download’u po stronie użytkownika docelowego (naszego widza). W przypadku Internetu światłowodowego takie wartości nie są zbyt wygórowane, ale użytkownik żyjący na odludzi, korzystający z Internetu mobilnego, z daleka od stacji bazowej może nie być w stanie uzyskać nawet 2 Megabity/s.

Transcoding

W takim wypadku możemy przeskalować stream np. do rozdzielczości 630×360 i ok. 1,5 Megabita/s co pozwoli takiej osobie w miarę komfortowo oglądać stream. Nic nie jest niestety za darmo. Proces transcodingu jest bardzo wymagający pod względem mocy obliczeniowej. Każda klatka filmu musi zostać rozkodowana, pomniejszona i ponownie zakodowana – jest to ogram pracy i nawet bardzo wydajne, wieloprocesorowe i wielordzeniowe procesory nie będą w stanie wykonywać więcej niż kilka takich procesów jednocześnie. W momencie, kiedy planujemy, iż równoczesnych streamów będzie tylko kilka nie jest to duży problem, natomiast w przypadku gdy zakładamy iż będą ich setki staje się to już ogromnym wyzwaniem.

Serwer krańcowy

Trzecim elementem infrastruktury streamingowej są serwery krańcowe. Gdy już otrzymamy stream z aplikacji streamującej i opcjonalnie zostanie on transkodowany do kilku różnych jakości, musimy rozprowadzić sygnał do użytkowników końcowych.  Zadaniem serwerów krańcowych jest właśnie dostarczenie streamu bezpośrednio do widzów, uprzednio kopiując sygnał właśnie z głównego serwera streamingowego. Ilość tych serwerów definiuje niejako maksymalną przepustowość całej infrastruktury.

Architektura jedno-serwerowa

Zdecydowana większość serwerów streamingowych jak np. Wowza, RED5, czy właśnie Storm Streaming Server oferuje wszystkie wspominane wyżej funkcjonalności w ramach pojedynczej aplikacji. Od konfiguracji poszczególnych instancji zależy czy dana kopia ma za zadanie odbierać stream, transkodować go, wysyłać do widzów, czy wykonywać wszystkie te czynności na raz. Jest to bardzo ważna cecha tego oprogramowania, bo pozwala ona nam rozpocząć budowę usługi od dosłownie pojedynczego serwera i gładko skalować całość do obsługi dziesiątki tysięcy widzów. O tym jak skonfigurować skalowanie w Storm Streaming server można poczytać tutaj.


Tags: OBS, red5, transcoding, WebRTC, wowza