Gdzie jesteś, streamie?

 

Dobrze pamiętam swoje początki związane ze słuchaniem internetowego radia. W być może zamierzchłych dla części z czytelników czasach roku 2003 – 2004 nikomu nie śniło się o słuchaniu radia przez przeglądarkę, każda strona tego typu projektu wyposażona była w zestaw odpowiednio spreparowanych odnośników, pozwalających na słuchanie w szerokiej gamie odtwarzaczy zewnętrznych. Dziś, kiedy niektórzy uważają przeglądarkę www za jedyne narzędzie do korzystania z Internetu, coraz trudniej wyłuskać zwykły odnośnik, pozwalający na bezpośrednie uruchomienie interesującego nas radia np. w Winampie czy innym odtwarzaczu muzyki. Dzieje się tak z kilku powodów:

Po pierwsze, odtwarzacz internetowy łatwo jest ozdobić banerami reklamowymi, dzięki czemu jeszcze na takim przekazie można dodatkowo zarobić.

Po drugie, część internautów uważa tego typu rozwiązania za najwygodniejsze, a konieczność instalacji zewnętrznego odtwarzacza to dodatkowy wysiłek, na który nie każdy ma czas, chęci, a niekiedy i umiejętności.

A gdzie w tym wszystkim niewidomy użytkownik? No właśnie, w niezbyt komfortowym położeniu, pisząc najoględniej. Część internetowych odtwarzaczy oczywiście jesteśmy w stanie obsłużyć, ale część to jeszcze przestarzały, często niedostępny flash. Jeśli jakieś radio gra zbyt głośno, możemy w tego typu przekazie zwyczajnie stracić kontakt z naszym czytnikiem ekranu, po prostu przestając go słyszeć.

W niniejszym tekście przedstawię 2 sposoby na wydobywanie odnośników do internetowych stacji radiowych, przy czym możemy z powodzeniem stosować je także w przypadku przekazów telewizyjnych. Zastrzegam z góry, że opisywane tu metody należą raczej do zagadnień zaawansowanych i każdy, kto będzie ich próbował musi poznać przynajmniej podstawy HTML i protokołu http. Dodam też, że przedstawiony tu przykład to raczej inspiracja do podejmowania kolejnych, samodzielnych prób odnajdowania strumieni, niż gotowe remedium na wszelkie kłopoty z tym związane, bo każda strona i zaszyte tam rozwiązanie streamingowe jest inne i wygląda inaczej.

Patrząc w źródła

Zanim przejdziemy dalej, poznajmy naszego dzisiejszego bohatera, czyli muzyczną stację VOA1, tworzoną przez dziennikarzy Głosu Ameryki. Radio nadaje 24 godziny na dobę, główną treść ramówki stanowią audycje muzyczne z aktualnymi amerykańskimi przebojami. Radio nie udostępnia zewnętrznego odnośnika, musimy więc poszukać go na własną rękę. Pierwsza metoda to przeanalizowanie kodu HTML strony stacji, do czego wykorzystamy przeglądarkę Mozilla Firefox. Otwieramy zatem http://www.voanews.com/audio/Tube/92.html i po wczytaniu strony naciskamy CTRL+u, wyświetlając kod źródłowy. Możemy teraz zamknąć stronę radia, na której w międzyczasie automatycznie uruchomiła się transmisja audio. Przed nami najcięższe zadanie, musimy bowiem w poszukiwaniu zagnieżdżonego kodu odtwarzacza i odnośnika do bezpośredniego strumienia przeanalizować liczącą 440 wierszy stronę. Najprostsza metoda postępowania to wyszukanie słowa player. W naszym przypadku istotny będzie fragment zaczynający się od linijki 227:

227 <div class="html5Player html5MediaPlayer html5MediaPlayerAudio html5PlayerLive">

228     <div class="html5PlayerPrimary">

229         <audio id="ctl00_cplPopupContent_upPlayer_h5t_h5pHtml5" data-autoplay="autoplay" width="385px" height="37" preload="none">

230                             <source src="http://voa-22.akacast.akamaistream.net/7/48/322034/v1/ibb.akacast.akamaistream.net/voa-22" type="audio/mpeg">

231

232                             </source>

Właśnie w tej sekcji zadeklarowany jest strumień VOA1, konkretnie: http://voa-22.akacast.akamaistream.net/7/48/322034/v1/ibb.akacast.akamaistream.net/voa-22

To wszystko. Aby sprawdzić, czy radio gra, wystarczy zaznaczyć adres strumienia, skopiować go do schowka, a następnie uruchomić w dowolnym zewnętrznym odtwarzaczu, np. Winamp.

Niestety, czytanie źródła HTML nie jest zadaniem prostym i często może być tak, że nie zaprowadzi nas nigdzie. Zdarza się bowiem, że nadawcy zaszywają odnośniki do strumieni w dodatkowych odnośnikach w postaci zewnętrznych plików lub zmuszają odtwarzacze do wczytywania strumieni z plików XML. Czasem zdarza się wręcz tak, że dany strumień wymaga wysłania co N sekund potwierdzenia, wyliczanego przez kod Javascript w przeglądarce, w takim przypadku jesteśmy praktycznie rzecz biorąc skazani na słuchanie danego radia w przeglądarce lub napisanie programu, który będzie takie odpowiedzi generował, to jednak stanowczo wykracza poza ramy tego artykułu.

Zaglądając w nagłówki

Protokół http, czyli język, którego nasza przeglądarka używa do porozumiewania się z serwerem dostarczającym wyświetlane treści, nie jest czymś na tyle skomplikowanym, by przy odrobinie chęci nie dało się go odczytać. Sprzyja temu fakt, że np. przeglądarka Mozilla Firefox posiada bardzo użyteczny dodatek o nazwie Live HTTP Headers, dzięki któremu w wygodny sposób możemy prześledzić komunikację przeglądarki z serwerami www. Dodatek musimy oczywiście najpierw zainstalować, w tym celu odszukujemy go w menedżerze dodatku lub instalujemy z oficjalnej strony repozytorium Firefoxa. Teraz, po ewentualnym restarcie przeglądarki, wchodzimy w narzędzia i wybieramy Live HTTP Headers. Po wykonaniu tego kroku, oczom naszym powinno ukazać się dodatkowe okno wyposażone w pustą kontrolkę typu widok drzewa. Teraz, aby to drzewo zapełnić treścią, ponownie wchodzimy na stronę VOA1, czekamy aż radio zacznie grać i zamykamy kartę przez ctrl+w. Po wykonaniu tych czynności drzewo dodatku Live http Headers zostać może zapełnione bardzo dużą ilością komunikatów. Najwygodniej będzie je skopiować np. do notatnika. W tym celu naciskamy na drzewie klawisz menu kontekstowego, wybieramy „select all”, a następnie z tego samego menu „copy”. Kiedy już treść nagłówków pojawi się w oknie notatnika, należy wyszukać odpowiedni odnośnik. Niestety, ciężko jest wskazać tu uniwersalne słowa kluczowe, osobiście używam następujących:

Audio, mp3, ogg, icecast, shout, stream, aac, player

W naszym przypadku istotny będzie następujący fragment:

http://voa-22.akacast.akamaistream.net/7/48/322034/v1/ibb.akacast.akamai...

GET /7/48/322034/v1/ibb.akacast.akamaistream.net/voa-22 HTTP/1.1

Host: voa-22.akacast.akamaistream.net

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5

Accept-Language: pl,en-US;q=0.7,en;q=0.3

Range: bytes=0-

Referer: http://www.voanews.com/audio/Tube/92.html

Connection: keep-alive

 

HTTP/1.0 200 OK

Content-Type: audio/mpeg

Server: Akacast 1.0

Cache-Control: no-cache

Myślę, że uważni czytelnicy zlokalizowali już stosowny link, którym oczywiście jest: http://voa-22.akacast.akamaistream.net/7/48/322034/v1/ibb.akacast.akamaistream.net/voa-22

Ponownie warto sprawdzić, czy nasze znalezisko działa prawidłowo. Jeśli tak, oznacza to, że osiągnęliśmy sukces.

Czy nie da się prościej?

Niestety, nie. Obecnie internetowe stacje radiowe otwierają się głównie w przeglądarkach i sytuacja ta raczej się nie zmieni. Alternatywą może być oczywiście korzystanie z programów gromadzących całe katalogi internetowych stacji radiowych takich jak Tapin Radio czy RadioSure, co jednak w przypadku, kiedy naszego ulubionego radia nie będzie w danym katalogu? Myślę, że zastosowanie metod z niniejszego artykułu może okazać się w takich przypadkach bardzo pomocne, bo choć nie są one proste, to zapewniam, bardzo skuteczne. Jeśli autorzy jakiegoś rozwiązania chcieli po prostu utrudnić, a nie zaś uniemożliwić odtwarzanie radia w programie zewnętrznym, to analizując kod źródłowy, czy nagłówki http z pewnością prędzej, czy później odkryjemy właściwe odnośniki i będziemy mogli słuchać wybranej stacji w najbardziej komfortowy dla nas sposób.

Powodzenia!

Michał Dziwisz

 

Projekt współfinansowany ze środków Państwowego Funduszu Rehabilitacji Osób Niepełnosprawnych oraz Gminy Miejskiej Kraków