Logo Tyfloświat
Czarno białe zdjęcie mikrofonu leżącego na konsoli radiowej. W tle kable

Przyzwyczajenie drugą naturą człowieka, nie mogę się nie zgodzić. Jeśli znajdę narzędzie, które spełnia moje oczekiwania, z którego jestem zadowolony, to trzymam się go, choć co jakiś czas testuję nowości. Tak się złożyło, że od ponad 20 lat moim ulubionym odtwarzaczem jest Winamp. Odtwarza wszystko, no ok, prawie wszystko, jest prosty w obsłudze, intuicyjny, no i po prostu działa. Twórcy Winampa odpowiedzialni są także za stworzenie technologii Shoutcast, o którą opierało się jeszcze do niedawna wielu radiowych nadawców. Shoutcast swego czasu próbowano także wykorzystać do strumieniowania telewizji, ale na tym polu nie odniesiono większych sukcesów i format NSV przeszedł już dawno do historii. Inaczej rzecz się ma z sygnałami audio, Shoutcast mimo, że wypierany przez konkurencyjnego Icecasta, nadal trzyma się mocno i z pewnymi modyfikacjami, zostanie z nami jeszcze długo.

O co więc tyle hałasu?

To, że większość decyduje się na pozostanie przy technologii liczącej blisko 20 lat, nie oznacza, że chcą tego wszyscy. Shoutcast czy Icecast, szczególnie ten pierwszy mają spore problemy z czymś, co w żargonie IT określa się mianem skalowalności. Nie jest problemem przygotowanie strumienia, którego mogą słuchać setki, czy nawet tysiące odbiorców, co jednak przy większych liczbach? Tu mogą zacząć się problemy, którym naprzeciw wychodzą nowsze technologie, jak choćby opracowany w 2009 roku przez Apple mechanizm HLS. Oprócz zapewnienia większego bezpieczeństwa dzięki natywnemu wsparciu protokołu SSL, HLS potrafi strumieniować zarówno audio, jak i wideo o różnych jakościach, pozwalając tym samym na płynne przechodzenie między nimi, w zależności od jakości naszego połączenia. Tak naprawdę, strumień HLS to kilka krótkich plików multimedialnych przechowywanych na serwerze i na bieżąco aktualizowanych, a następnie łączonych przez nasz odtwarzacz w niezauważalny sposób. Winamp, czy to z powodów chęci promowania własnego protokołu transmisji strumieniowej, czy z braków kadrowych, nie doczekał się wsparcia dla HLS. Jeszcze do niedawna nie był to dla mnie problem, bowiem wszystkie, słuchane przeze mnie stacje radiowe dostępne były w technologiach kompatybilnych z moim ulubionym odtwarzaczem. Niestety, od kilku tygodni w strumieniach należących do BBC, co kilka minut pojawia się komunikat informujący o ich wyłączeniu. Brytyjski nadawca strumienie HLS wdrożył już kilka lat temu, będąc, jak to często on, jednym z pionierów testowania nowych technologii na swoich użytkownikach. Ostatnio klamka zapadła i jak można wnioskować z tego komunikatu, ze strumieniami odtwarzanymi przez Winampa pożegnamy się w połowie 2023 roku.

Co robić, jak żyć?

Najprościej skorzystać z odtwarzacza, który natywnie wspiera HLS. Foobar 2000 to dobry wybór, dla bardziej zaawansowanych użytkowników jest również darmowy VLC, lub płatny DVB viewer. Dla tych, którzy mimo wszystko chcą pozostać przy Winampie, lub innej aplikacji, niekompatybilnej z HLS, polecam dalszą część niniejszego artykułu.

Budujemy pomost między starym, a nowym

Okazuje się, że na świecie istnieje co najmniej jeden miłośnik Winampa ze zdolnościami programistycznymi, któremu chciało się poświęcić czas na stworzenie narzędzia o dość skomplikowanej nazwie: RadioHLSConverter.backend.serverless i równie nieintuicyjnej obsłudze, stanowiącego swoisty konwerter pomiędzy strumieniem HLS a czymś, co jest w stanie odtworzyć Winamp. Program działa w tle i jest w stanie obsłużyć tylko te strumienie, które mu zdefiniujemy w specjalnym pliku konfiguracyjnym. Niewątpliwą zaletą narzędzia jest jego wieloplatformowość, możemy zatem, jeśli mamy taką potrzebę, uruchomić je na serwerze w sieci lokalnej i udostępnić tak przygotowaną bazę strumieni starszym odtwarzaczom, np. Zestawom audio, które podobnie jak Winamp nie wspierają HLS.

Instalacja

Zainstalowanie programu sprowadza się do pobrania odpowiedniej paczki z repozytorium w serwisie Github, oraz doinstalowanie, jeśli nie mamy C# NET Core 6.0. Sam program nie posiada instalatora, wystarczy więc wypakować go do katalogu np. na dysku C. Jeśli chcemy, aby narzędzie uruchamiało się jako usługa systemowa, możemy ją utworzyć z użyciem następującej komendy w wierszu poleceń, wydanej jako administrator:

sc create RadioHLSConverter BinPath=”C:\katalog\RadioHLSConverter.backend.serverless.exe –urls=”http://127.0.0.1:5000\””

Oczywiście w miejsce słowa katalog podajemy nazwę folderu, do którego wypakowaliśmy Radio HLS Converter. Od siebie dodam, że w trakcie początkowych testów, najwygodniej jest uruchamiać program jako zwykłą aplikację, nie usługę, bo dzięki temu mamy natychmiastowy podgląd na to, co się dzieje w oknie wiersza poleceń. Aby zatem tego dokonać, otwieramy CMD, przechodzimy do katalogu z aplikacją i wpisujemy następującą komendę:

RadioHLSConverter.backend.serverless.exe –urls=”http://127.0.0.1:5000″

Co spowoduje uruchomienie programu nasłuchującego na porcie 5000.

Aby sprawdzić, czy wszystko działa, możemy spróbować uruchomić Winampa i wczytać następujący adres:

http://127.0.0.1:5000/api/Radio/0

Spowoduje to odtworzenie przykładowego radia, zapisanego w pliku konfiguracyjnym, któremu za moment się przyjrzymy.

Jeśli wszystko działa, a konsola nie wyświetla żadnych błędów, możemy spróbować pogrzebać w konfiguracji i dodać własne radio. W tym celu zatrzymujemy program kombinacją CTRL+c, otwieramy w notatniku plik appsettings.json i przechodzimy do sekcji “Radios”: [. W tym miejscu ważna uwaga: mamy do czynienia z plikiem w formacie JSON, a ten plik rządzi się swoimi wytycznymi dotyczącymi formatowania. Dlatego, co zresztą zaobserwujemy w przykładowych strumieniach, każda sekcja zawiera się w nawiasach klamrowych. Przykładowa definicja strumienia dla radia BBC 2 może zatem wyglądać następująco:

 

{

“RadioName”: “BBC 2”,

“RadioDescription”: “BBC 2”,

“RadioSourceURL”: “http://as-hls-ww-live.akamaized.net/pool_904/live/ww/bbc_radio_two/bbc_radio_two.isml/bbc_radio_two-audio=96000.norewind.m3u8”,

“HTTPContentType”: “audio/aac”,

“FFMPEGConverterAudioCodec”: “copy”,

“FFMPEGForceFormat”: “adts”,

“FFMPEGCustomArgument”: “”

},

Teraz przyjrzyjmy się poszczególnym parametrom:

“RadioName” – nazwa stacji, wysyłana do odtwarzacza

“RadioDescription” – opis stacji, wysyłany do odtwarzacza

“RadioSourceURL” – adres strumienia internetowego wykorzystującego protokół HLS

“HTTPContentType” – typ zawartości http, z reguły audio/aac, lub audio/mp3, z pełną listą można zapoznać się np. na stronie Mozilli dla developerów.

“FFMPEGConverterAudioCodec”, typ kodeka użytego przez narzędzie FFMPEG, najlepiej użyć copy

“FFMPEGForceFormat” – format wyjściowy FFMPEG, zazwyczaj użyjemy adts, jeśli strumień nadawany jest w MP3, skorzystamy z mp3.

“FFMPEGCustomArgument” – opcjonalne parametry dla FFMPEG, z reguły nie musimy tego zmieniać.

W praktyce, najwygodniej skopiować jeden z przykładów zamieszczonych w pliku konfiguracyjnym, a następnie zaadaptować go do swoich potrzeb. Co istotne, ważne jest to, czy umieścimy nasz strumień przed, czy po przykładach. Dzieje się tak, ponieważ Radio HLS Converter potrafi obsługiwać całą bazę strumieni, jednak aby wybrać ten, który nas interesuje, musimy otworzyć w Winampie odpowiednio przygotowany url. Z pewnością uważni czytelnicy zauważyli, że zamieszczony powyżej przykład, czyli http://127.0.0.1:5000/api/Radio/0 kończy się zerem i nie dzieje się tak bez powodu. Otóż owo zero, reprezentuje pierwszy strumień na liście zamieszczonej w pliku konfiguracyjnym. Co zatem zrobić, aby posłuchać drugiego strumienia? Tak, zgadza się! Zamienić 0 na 1, dla trzeciego 1 na 2 i tak dalej.

To nie jest metoda dla każdego

Zdaję sobie doskonale sprawę, że po przeczytaniu niniejszego artykułu, część z czytelników może czuć się przytłoczona nadmiarem technikaliów i w przypadku, gdy ulubione radio przestanie być możliwe do słuchania przez Winampa, zwyczajnie zmieni program. Ja mimo wszystko cieszę się, że jest takie narzędzie jak Radio HLS Converter. Uruchamia się automatycznie z moim systemem, wprowadziłem niezbędne adresy do pliku konfiguracyjnego, zaktualizowałem zakładki i z mojej perspektywy w zasadzie nic się nie zmieniło. Radio działało jak działa, a że pod spodem pracuje na to jeszcze jedna aplikacja? Osobiście to dla mnie mało istotny detal.

Na koniec pragnę dodać, że nie jest mi wiadome o tym, by któraś z polskich stacji decydowała się na globalne przełączenie na HLS. Niektórzy prowadzą eksperymenty, ale nadal u nas prym wiodą Icecast i Shoutcast, więc rady z niniejszego tekstu przydadzą się najprędzej miłośnikom zagranicznych radiostacji.

Michał Dziwisz

Partnerzy

 Fundacja Instytut Rozwoju Regionalnego                     Państwowy Fundusz Rehabilitacji Osób Niepełnosprawnych

Back to top