Dlaczego radio internetowe gra z opóźnieniem?

Włączamy tę samą stację na zwykłym odbiorniku FM i w telefonie. Z radia słychać już początek wiadomości, podczas gdy aplikacja nadal odtwarza poprzednią zapowiedź. Różnica może wynosić kilka, kilkanaście, a czasem nawet kilkadziesiąt sekund. Nie oznacza to, że internetowa transmisja jest uszkodzona. Dźwięk po prostu pokonuje znacznie bardziej złożoną drogę niż sygnał wysłany z nadajnika radiowego.

Opóźnienie powstaje etapami. Trochę czasu zabiera obróbka w studiu, trochę kodowanie dźwięku, przesłanie go do serwera i rozprowadzenie do słuchaczy. Największą rolę często odgrywają jednak bufory, czyli zapas danych gromadzony po to, aby muzyka nie urywała się przy każdym chwilowym spowolnieniu internetu. To świadomy kompromis: kilka sekund zwłoki w zamian za stabilniejsze słuchanie.

Realizator dźwięku przy konsolecie i komputerze w studiu nagraniowym
Praca przy konsolecie i komputerze w studiu nagraniowym. Fot. PASA PR, Wikimedia Commons, późniejsza korekta poziomów: WikiPedant, CC0 1.0.

Dźwięk nie trafia do internetu prosto z mikrofonu

Zanim głos prowadzącego opuści studio, przechodzi przez konsoletę, procesory emisyjne i system automatyzacji programu. Trzeba połączyć mikrofony, muzykę, reklamy, serwisy informacyjne oraz sygnały korespondentów. Poszczególne urządzenia pracują bardzo szybko, ale każde może dołożyć niewielką porcję opóźnienia. W nowoczesnej rozgłośni większość tej drogi odbywa się cyfrowo, więc dźwięk jest wielokrotnie zapisywany w pamięci, przetwarzany i przekazywany dalej.

Gotowy program trafia następnie do kodera. Jego zadaniem jest zmniejszenie ilości danych, aby transmisja nie wymagała przesyłania nieskompresowanego dźwięku studyjnego. Stacje korzystają między innymi z MP3 i AAC, a niekiedy także z kodeków z rodziny Ogg. Koder analizuje krótkie porcje sygnału, kompresuje je i układa w kolejne ramki. Ten etap również potrzebuje czasu, choć zwykle nie on odpowiada za największą część zwłoki.

Serwer musi obsłużyć jednocześnie wielu słuchaczy

Zakodowany sygnał jest wysyłany ze studia do serwera strumieniowego. To ważna różnica w porównaniu z klasycznym nadajnikiem. Antena emituje jeden sygnał, który może odebrać dowolna liczba odbiorników w zasięgu. Serwer internetowy utrzymuje natomiast połączenia z kolejnymi urządzeniami albo przekazuje transmisję do sieci serwerów pośrednich. Dzięki temu jedna stacja może docierać do słuchaczy w wielu krajach, lecz po drodze pojawiają się kolejne kolejki danych.

Popularny serwer Icecast pokazuje, jak celowo buduje się taki zapas. Jego dokumentacja konfiguracji opisuje parametr „burst-size”: po połączeniu serwer wysyła klientowi porcję danych szybciej, aby szybko napełnić wstępny bufor odtwarzacza. Icecast utrzymuje też kolejkę dla odbiorcy, który chwilowo pozostaje w tyle z powodu przeciążenia sieci. To nie przypadkowa wada, lecz mechanizm chroniący ciągłość odtwarzania.

Bufor jest jak niewielki zbiornik z dźwiękiem

Odtwarzacz nie chce zaczynać po otrzymaniu pierwszych kilku bajtów. Najpierw zbiera zapas, z którego może korzystać, gdy połączenie na moment zwolni. Można porównać go do zbiornika między nieregularnie działającą pompą a kranem. Dopóki w zbiorniku jest woda, krótkiej przerwy w dopływie nie zauważymy. W transmisji radiowej rolę wody pełnią gotowe do odtworzenia fragmenty dźwięku.

Duży bufor zwiększa odporność na wahania sieci, przełączanie telefonu między nadajnikami komórkowymi czy chwilowe przeciążenie domowego Wi-Fi. Jednocześnie oddala słuchacza od tego, co dzieje się w studiu. Mały bufor skraca opóźnienie, ale łatwiej go opróżnić. Wtedy pojawia się dobrze znane zatrzymanie, ponowne ładowanie albo przeskok do nowszego miejsca transmisji.

Dlatego dwie stacje uruchomione w tym samym urządzeniu mogą zachowywać się inaczej. W serwisie Radio Biz, który pozwala przełączać się między wieloma polskimi rozgłośniami, można zauważyć, że jeden program zaczyna grać prawie natychmiast, a drugi potrzebuje kilku sekund. Wpływ mają technologia używana przez nadawcę, wielkość bufora, odległość od serwera oraz sposób działania przeglądarki lub aplikacji.

HLS dzieli transmisję na odcinki

Nie każdy strumień jest przesyłany jako nieprzerwany ciąg danych. W bardzo popularnym protokole HLS program zostaje podzielony na krótkie pliki nazywane segmentami. Osobny plik listy wskazuje odtwarzaczowi, które segmenty pobrać i w jakiej kolejności je odtworzyć. Specyfikacja RFC 8216 opisuje właśnie taki mechanizm: klient pobiera listę, kolejne części programu i regularnie odświeża listę, aby odkrywać nowe fragmenty.

To rozwiązanie dobrze współpracuje ze zwykłymi serwerami WWW i sieciami CDN. Apple podkreśla, że HLS został zaprojektowany z myślą o niezawodności oraz dostosowywaniu jakości do warunków połączenia. Cena tej odporności jest łatwa do zrozumienia. Odtwarzacz nie może pobrać segmentu, którego nadawca jeszcze nie utworzył, a przed startem zwykle chce zgromadzić więcej niż jeden fragment.

Jeżeli przykładowy segment trwa sześć sekund, a odtwarzacz czeka na dwa lub trzy pełne odcinki, sama ta warstwa może wprowadzić kilkanaście sekund różnicy. Nie jest to stała reguła dla wszystkich stacji, bo długość segmentów i polityka buforowania mogą być inne. Pokazuje jednak, dlaczego transmisja oparta na HLS często pozostaje dalej za antenowym FM niż prosty, ciągły strumień audio.

Po co nadawcy godzą się na opóźnienie

W radiu najważniejsza jest zwykle ciągłość. Kilkusekundowa różnica nie przeszkadza podczas słuchania muzyki, rozmowy czy wiadomości, natomiast częste przerwy bardzo szybko zniechęcają odbiorcę. Nadawca wybiera więc ustawienia, które sprawdzą się nie tylko na szybkim światłowodzie, ale również w pociągu, samochodzie i zatłoczonej sieci komórkowej.

Bufor daje też czas na zmianę jakości transmisji. HLS może oferować kilka wariantów tego samego programu o różnych przepływnościach. Gdy połączenie słabnie, odtwarzacz może przejść na lżejszą wersję, zamiast całkowicie zatrzymać dźwięk. Z perspektywy słuchacza jakość może się nieco zmienić, ale program trwa dalej.

Istnieją techniki transmisji o małym opóźnieniu, w tym Low-Latency HLS i rozwiązania wykorzystywane do rozmów na żywo. Skracają segmenty, szybciej udostępniają części danych i ograniczają zapas w odtwarzaczu. Nie usuwają jednak praw fizyki ani zmienności internetu. Im bliżej chwili „na żywo” pracuje system, tym mniej ma czasu na zamaskowanie utraty pakietów i nagłego spadku prędkości.

Dlaczego nie da się zsynchronizować wszystkich odbiorników

Opóźnienie nie jest identyczne nawet u dwóch osób słuchających tego samego adresu. Jeden telefon może mieć większy bufor, drugi połączyć się z innym węzłem sieci CDN, a komputer rozpocząć odtwarzanie dopiero po zgromadzeniu dodatkowego segmentu. Znaczenie ma również moment naciśnięcia przycisku „play”. Odtwarzacze mogą wejść do transmisji w różnych miejscach dostępnego okna czasowego.

Efekt słychać, gdy w jednym mieszkaniu gra ta sama stacja na kilku urządzeniach. Powstaje echo, chociaż wszystkie odbiorniki korzystają z tego samego internetu. Podobny problem pojawia się podczas oglądania wydarzenia sportowego: sąsiad słuchający FM może cieszyć się z gola wcześniej niż osoba korzystająca ze streamu. Z tego samego powodu internetowa transmisja nie jest dobrym wzorcem do dokładnego ustawiania zegara.

Opóźnienie mówi coś o konstrukcji transmisji

Zwłoka radia internetowego nie ma jednej przyczyny i nie da się jej opisać jedną liczbą. Jest sumą przetwarzania w studiu, kodowania, przesyłania do serwera, ewentualnych przekaźników, segmentacji oraz bufora w urządzeniu słuchacza. Każdy z tych etapów dodaje odrobinę czasu, ale jednocześnie pomaga dostarczyć stabilny dźwięk przez sieć, która nigdy nie zachowuje się całkowicie przewidywalnie.

Kiedy więc internetowe radio pozostaje kilkanaście sekund za odbiornikiem FM, najczęściej działa dokładnie tak, jak zostało zaprojektowane. Nie ściga się o absolutnie najmniejszą zwłokę. Próbuje przede wszystkim sprawić, aby audycja grała płynnie mimo zmieniającego się połączenia. Opóźnienie jest ceną za odporność, skalę i możliwość słuchania tej samej stacji niemal w dowolnym miejscu świata.