Kompresja Strumieniowa

Kompresja o niskim op贸藕nieniu dla transmisji wideo na 偶ywo i komunikacji w czasie rzeczywistym.

Fundamentalne Wyzwanie: Streaming kontra Pobieranie

Zanim zg艂臋bimy niuanse kompresji dla streamingu, kluczowe jest zrozumienie r贸偶nicy mi臋dzy pobieraniem pliku a jego strumieniowaniem. Kiedy pobierasz plik, na przyk艂ad film, Tw贸j komputer zapisuje ca艂y plik na dysku twardym. Musisz poczeka膰, a偶 ca艂y plik dotrze, zanim b臋dziesz m贸g艂 zacz膮膰 go ogl膮da膰. Streaming z drugiej strony to proces ci膮g艂y. Tw贸j odtwarzacz wideo zaczyna odtwarza膰 pocz膮tek pliku niemal natychmiast, podczas gdy reszta pliku nadal dociera w tle. To tworzy p艂ynne do艣wiadczenie, kt贸re kojarzymy z us艂ugami takimi jak YouTube czy Netflix.

Ten model "odtwarzaj w trakcie pobierania" wprowadza kluczow膮 zmienn膮, kt贸ra jest mniej istotna przy prostym pobieraniu: czas. Aby streaming dzia艂a艂, dane musz膮 dociera膰 do Twojego urz膮dzenia co najmniej tak szybko, jak je ogl膮dasz. Je艣li tak si臋 nie dzieje, odtwarzanie zatrzyma si臋 i zobaczysz znienawidzone k贸艂ko buforowania. Ten nieustanny wy艣cig z czasem nak艂ada wyj膮tkowe i intensywne presje na algorytmy kompresji u偶ywane do tre艣ci strumieniowych. Musz膮 one nie tylko zmniejszy膰 plik, ale zrobi膰 to w spos贸b zoptymalizowany pod k膮tem dostarczania i odtwarzania w czasie rzeczywistym przez potencjalnie zawodne sieci.

Mo偶emy dalej podzieli膰 streaming na dwie szerokie kategorie, z kt贸rych ka偶da ma w艂asny zestaw wyzwa艅 i strategii kompresji: streaming na 偶膮danie i streaming na 偶ywo w czasie rzeczywistym.

Wielki Kompromis: Wydajno艣膰 Kompresji kontra Op贸藕nienie

艢wiat kompresji strumieniowej rz膮dzi si臋 fundamentalnym i cz臋sto bezlitosnym kompromisem. Z jednej strony mamy cel maksymalnej wydajno艣ci kompresji, czyli uczynienia pliku wideo jak najmniejszym, aby zaoszcz臋dzi膰 przepustowo艣膰. Z drugiej strony mamy wym贸g niskiego , czyli minimalizacji op贸藕nienia mi臋dzy nadawc膮 a widzem. Te dwa cele s膮 prawie zawsze w bezpo艣rednim konflikcie.

Dlaczego Wysokowydajna Kompresja Tworzy Op贸藕nienie

Najpot臋偶niejsze narz臋dzia w arsenale kodeka wideo, kt贸re pozwalaj膮 mu osi膮ga膰 niesamowite wsp贸艂czynniki kompresji, opieraj膮 si臋 na predykcji mi臋dzyklatkowej, zw艂aszcza przy u偶yciu klatek B.

  • Klatki P (przewidywane): Oszcz臋dzaj膮 miejsce, odwo艂uj膮c si臋 do przesz艂ej klatki i koduj膮c tylko r贸偶nice. Wprowadza to niewielkie op贸藕nienie, poniewa偶 dekoder potrzebuje kompletnej przesz艂ej klatki, aby skonstruowa膰 bie偶膮c膮 klatk臋 P.
  • Klatki B (dwukierunkowo przewidywane): To mistrzowie wydajno艣ci. Mog膮 odwo艂ywa膰 si臋 zar贸wno do przesz艂ej, jak i przysz艂ej klatki, aby dokona膰 predykcji. Ten dwukierunkowy wgl膮d cz臋sto skutkuje najmniejszym mo偶liwym rozmiarem danych dla danej klatki.

I tu le偶y problem. Aby dekoder m贸g艂 skonstruowa膰 klatk臋 B, musi mie膰 nie tylko przesz艂膮 klatk臋 referencyjn膮, ale musi r贸wnie偶 poczeka膰 na nadej艣cie przysz艂ej klatki referencyjnej. Koder wideo musi przechowywa膰 bufor klatek, przetwarza膰 je w innej kolejno艣ci, aby stworzy膰 te zale偶no艣ci, a nast臋pnie je wys艂a膰. Dekoder musi nast臋pnie odebra膰 i zbuforowa膰 te klatki, zmieni膰 ich kolejno艣膰, a na koniec zdekodowa膰 i wy艣wietli膰 klatk臋 B. Ca艂y ten proces buforowania i zmiany kolejno艣ci wprowadza znacz膮ce op贸藕nienie. To jest latencja.

Dla streamingu na 偶膮danie, jak Netflix, jest to ca艂kowicie do przyj臋cia. Gdy naciskasz play na filmie, kilka sekund pocz膮tkowego buforowania to niewielka cena za wysokiej jako艣ci strumie艅 o niskiej przepustowo艣ci. System mo偶e u偶ywa膰 z艂o偶onych uk艂ad贸w klatek B, aby osi膮gn膮膰 maksymaln膮 kompresj臋, poniewa偶 kilkusekundowe op贸藕nienie na starcie nie stanowi problemu. Jednak dla komunikacji na 偶ywo w czasie rzeczywistym, jak rozmowa na Zoomie czy transmisja sportowa na 偶ywo na Twitchu, tego rodzaju op贸藕nienie to kompletna katastrofa. Pi臋ciosekundowe op贸藕nienie uniemo偶liwi艂oby rozmow臋 i oznacza艂oby, 偶e s艂yszysz reakcj臋 znajomych na gola na d艂ugo przed tym, jak go zobaczysz na ekranie. Dlatego strategie kompresji dla streamingu na 偶ywo musz膮 po艣wi臋ci膰 cz臋艣膰 wydajno艣ci, aby utrzyma膰 op贸藕nienie na absolutnym minimum.

Strategia 1 dla Transmisji na 呕ywo: Dostosowanie Kodeka

Pierwszym krokiem w celu zmniejszenia op贸藕nienia jest skonfigurowanie samego kodera wideo, aby priorytetem by艂a szybko艣膰, a nie ostateczna kompresja. Obejmuje to staranne dostosowanie sposobu wykorzystania r贸偶nych typ贸w klatek.

Zarz膮dzanie Grup膮 Obraz贸w (GOP)

Powtarzaj膮ca si臋 sekwencja typ贸w klatek w strumieniu wideo jest znana jako . Struktura i d艂ugo艣膰 GOP maj膮 bezpo艣redni i dramatyczny wp艂yw zar贸wno na op贸藕nienie, jak i na kompresowalno艣膰.

  • D艂ugi GOP (Du偶e Op贸藕nienie, Wysoka Kompresja): Stosowany do tre艣ci na 偶膮danie. Typowy GOP mo偶e mie膰 2 sekundy d艂ugo艣ci, co oznacza, 偶e klatka I jest wysy艂ana tylko raz na 60 klatek (dla wideo 30 kl./s). Taki GOP b臋dzie wype艂niony wieloma klatkami P i B. Pozwala to na maksymaln膮 kompresj臋, poniewa偶 wi臋kszo艣膰 klatek to wysoko skompresowane predykcje, ale tworzy to r贸wnie偶 du偶e op贸藕nienie.
  • Kr贸tki GOP (Ni偶sze Op贸藕nienie, Ni偶sza Kompresja): W transmisjach na 偶ywo rozmiar GOP jest cz臋sto zmniejszany do 1 sekundy lub nawet kr贸cej. Wysy艂anie klatek I cz臋艣ciej skraca 艂a艅cuch zale偶no艣ci klatek przewidywanych, co mo偶e pom贸c strumieniowi widza szybciej odzyska膰 sprawno艣膰 po b艂臋dach. To nieznacznie zwi臋ksza 艣redni bitrate, ale zmniejsza op贸藕nienie i poprawia odporno艣膰.
  • Profile o Zerowym Op贸藕nieniu (I-P-P-P...): W zastosowaniach o najni偶szym op贸藕nieniu, jak wideokonferencje, klatki B s膮 cz臋sto ca艂kowicie wy艂膮czone. GOP sk艂ada si臋 tylko z klatek I i P. Poniewa偶 nie ma odniesie艅 w prz贸d, eliminowana jest potrzeba buforowania przysz艂ych klatek, co radykalnie zmniejsza op贸藕nienie.
  • Tylko klatki I: W niekt贸rych specjalistycznych przypadkach, jak profesjonalna edycja wideo lub niekt贸re systemy monitoringu wysokiego bezpiecze艅stwa, strumie艅 mo偶e sk艂ada膰 si臋 wy艂膮cznie z klatek I. Jest to w istocie Motion JPEG (M-JPEG). Zapewnia to najni偶sze mo偶liwe op贸藕nienie i edycj臋 z dok艂adno艣ci膮 do klatki, ale skutkuje bardzo wysokim bitrate'em.

Strategia 2: Adaptacyjny Streaming Bitrate'u (ABR)

Jednym z najwi臋kszych wyzwa艅 dla ka偶dego rodzaju streamingu jest nieprzewidywalno艣膰 internetu. Po艂膮czenie sieciowe u偶ytkownika mo偶e zmienia膰 si臋 z chwili na chwil臋. Mo偶e on przej艣膰 z silnego sygna艂u Wi-Fi na s艂aby sygna艂 kom贸rkowy, lub kto艣 inny w domu mo偶e rozpocz膮膰 du偶e pobieranie. Gdyby serwer wysy艂a艂 tylko jeden, wysokiej jako艣ci strumie艅, ka偶dy spadek wydajno艣ci sieci spowodowa艂by zamro偶enie odtwarzania.

jest eleganckim rozwi膮zaniem tego problemu. Zamiast tworzy膰 tylko jedn膮 wersj臋 wideo, serwer tworzy wiele wersji, zwanych reprezentacjami, o r贸偶nej jako艣ci i bitrate (np. 480p, 720p, 1080p, 4K).

Proces ten dzia艂a nast臋puj膮co:

  1. Segmentacja: Ka偶da z tych reprezentacji jest dzielona na ma艂e, sp贸jnej d艂ugo艣ci fragmenty lub segmenty, zazwyczaj o d艂ugo艣ci od 2 do 10 sekund.
  2. Plik Manifestu: Serwer udost臋pnia r贸wnie偶 (jak M3U8 dla HLS lub MPD dla DASH). Ten plik jest "map膮" dla odtwarzacza wideo.
  3. Inteligentny Odtwarzacz: Odtwarzacz wideo na Twoim urz膮dzeniu (np. w aplikacji YouTube lub w przegl膮darce internetowej) zaczyna od pobrania manifestu. Nast臋pnie stale monitoruje Twoj膮 bie偶膮c膮 przepustowo艣膰 sieci.
  4. Dynamiczne 呕膮danie Segment贸w: Na podstawie warunk贸w sieciowych, odtwarzacz inteligentnie 偶膮da nast臋pnego segmentu wideo z reprezentacji o najwy偶szej jako艣ci, jak膮 jego zdaniem mo偶e niezawodnie pobra膰 bez buforowania. Je艣li Twoja przepustowo艣膰 jest wysoka, 偶膮da segmentu 1080p. Je艣li Twoje po艂膮czenie nagle si臋 pogorszy, dla nast臋pnego segmentu za偶膮da wersji 720p.

Wszystko to dzieje si臋 p艂ynnie w tle, co skutkuje p艂ynnym do艣wiadczeniem ogl膮dania, kt贸re automatycznie dostosowuje si臋 do pr臋dko艣ci po艂膮czenia, priorytetyzuj膮c ci膮g艂o艣膰 odtwarzania nad maksymaln膮 jako艣ci膮, gdy jest to konieczne. ABR jest podstaw膮 nowoczesnych us艂ug streamingowych zar贸wno dla tre艣ci na 偶膮danie, jak i na 偶ywo.

Strategia 3: Protoko艂y Niskiego Op贸藕nienia

Problem z TCP

Standardowym protoko艂em dla wi臋kszo艣ci danych internetowych jest TCP (Transmission Control Protocol). TCP jest zaprojektowany z my艣l膮 o niezawodno艣ci. Je艣li pakiet zostanie utracony, TCP zatrzyma wszystko i retransmituje utracony pakiet, aby zapewni膰, 偶e plik dotrze w nienaruszonym stanie. Do pobierania pliku lub 艂adowania strony internetowej jest to dok艂adnie to, czego chcesz. Ale w przypadku rozmowy wideo na 偶ywo jest to katastrofa. Je艣li ma艂y pakiet audio zostanie utracony, znacznie lepiej jest go pomin膮膰 i i艣膰 dalej, ni偶 wstrzymywa膰 ca艂膮 rozmow臋, aby czeka膰 na retransmisj臋 d藕wi臋ku, kt贸ry teraz by艂by ju偶 nieaktualny.

Rozw贸j UDP i Protoko艂贸w Czasu Rzeczywistego

Dlatego aplikacje do streamingu w czasie rzeczywistym prawie powszechnie u偶ywaj膮 . UDP to protok贸艂 typu "wystrzel i zapomnij". Wysy艂a pakiety bez 偶adnej gwarancji dostarczenia czy kolejno艣ci. Brzmi to 藕le, ale dla streamingu na 偶ywo jest idealne. Pozwala to na jak najszybszy przep艂yw danych bez grz臋藕ni臋cia w retransmisjach. Utrata jednego pakietu mo偶e skutkowa膰 drobnym, chwilowym zak艂贸ceniem wizualnym, co jest znacznie lepsze ni偶 kilkusekundowe zamro偶enie obrazu.

Aby doda膰 niezb臋dne funkcje, takie jak znaczniki czasu i numery sekwencyjne, na wierzchu UDP, aplikacje streamingowe u偶ywaj膮 protoko艂贸w wy偶szego poziomu:

  • RTP (Real-time Transport Protocol): Jest to standard do przenoszenia w艂a艣ciwych danych medialnych (audio i wideo). Dodaje numery sekwencyjne, dzi臋ki czemu odbiorca mo偶e wykry膰 utrat臋 pakiet贸w i uporz膮dkowa膰 pakiety, kt贸re dotar艂y w z艂ej kolejno艣ci, oraz dodaje znaczniki czasu do synchronizacji strumieni audio i wideo.
  • RTCP (RTP Control Protocol): Dzia艂a razem z RTP. Okresowo wysy艂a raporty z powrotem do nadawcy, zawieraj膮ce statystyki dotycz膮ce po艂膮czenia, takie jak wska藕niki utraty pakiet贸w i jitter. Ta informacja zwrotna pozwala nadawcy na adaptacj臋 swojego bitrate'u kodowania w czasie rzeczywistym.
  • Nowsze Protoko艂y (SRT, WebRTC): Technologie takie jak Secure Reliable Transport (SRT) i Web Real-Time Communication (WebRTC) opieraj膮 si臋 na tych koncepcjach, aby zapewni膰 jeszcze ni偶sze op贸藕nienia (poni偶ej sekundy) i lepsz膮 wydajno艣膰 na niezawodnych publicznych po艂膮czeniach internetowych.
    Kompresja Strumieniowa