Swoje internetowe radio

Wielu z nas lubi rano słuchać radia. Pewnego pięknego poranka uświadomiłem sobie, że nie chcę słuchać lokalnych stacji FM. Nie interesuje mnie to. Ale nawyk okazał się szkodliwy. Postanowiłem więc zamienić odbiornik FM na internetowy. Szybko kupiłem części na AliExpress i złożyłem odbiornik internetowy.

O odbiorniku internetowym. Serce odbiornika to mikrokontroler ESP32. Oprogramowanie od KA-radio. Koszt części wyniósł mnie 12 dolarów. Prostota montażu pozwoliła mi złożyć go w ciągu kilku dni. Działa dobrze i stabilnie. Przez 10 miesięcy pracy zawiesił się tylko kilka razy, i to tylko z powodu moich eksperymentów. Wygodny i przemyślany interfejs umożliwia zarządzanie z telefonu i komputera. Krótko mówiąc, to wspaniały odbiornik internetowy.

Wszystko jest świetnie. Ale pewnego wczesnego ranka doszedłem do wniosku, że mając dostęp do dziesiątek tysięcy stacji radiowych, nie ma ciekawych stacji. Denerwowała mnie reklama, głupie żarty prowadzących. Ciągle przeskakiwałem z jednej stacji na drugą. Lubię Spotify i Yandex.Muzyka. Ale smutne jest to, że nie działają w moim kraju. Chciałbym ich słuchać przez odbiornik internetowy.

Przypomniałem sobie swoje dzieciństwo. Miałem magnetofon i dwadzieścia kaset. Wymieniałem się kasetami z przyjaciółmi. To było wspaniałe. Postanowiłem, że muszę zrobić streaming swoich archiwów audio tylko na odbiornik internetowy. Oczywiście jest opcja podłączenia odtwarzacza audio lub iPoda do głośników i nie martwienia się. Ale to nie nasza droga! Nienawidzę podłączać złączy)

Zacząłem szukać gotowych rozwiązań. Na rynku pojawiła się oferta stworzenia własnego radia internetowego od Radio-Tochka.com. Testowałem przez 5 dni. Z moim odbiornikiem internetowym wszystko działało doskonale. Ale cena okazała się dla mnie nieatrakcyjna. Zrezygnowałem z tego wyboru.

Mam opłacony hosting 10 GB. Postanowiłem napisać skrypt w czymś, co umożliwi streaming audio z moich plików mp3. Zdecydowałem się napisać w PHP. Szybko napisałem i uruchomiłem. Wszystko działało. Było świetnie! Ale po kilku dniach przyszła wiadomość od administracji hostingu. W niej informowano o przekroczeniu limitu minut procesora i konieczności przejścia na wyższy plan. Musiałem usunąć skrypt i zrezygnować z tej opcji.

Jak to możliwe? Nie mogę żyć bez radia. Jeśli nie pozwalają uruchomić skryptu na cudzym hostingu, to trzeba mieć własny serwer. Gdzie mogę robić to, co moja dusza pragnie.

Mam starą netbooka bez akumulatora (CPU — 900 MHz, RAM — 512 Mb). Siedzi już 11 lat. Do serwera nadaje się jak najbardziej. Instaluję Ubuntu 12.04. Następnie instaluję Apache2 i PHP 5.3, samba. Mój serwer jest gotowy.

Postanowiłem spróbować Icecast. Dużo czytałem materiałów na jego temat. Ale wydawał mi się skomplikowany. I postanowiłem wrócić do wersji ze skryptem na PHP. Poświęciłem kilka dni na debugowanie tego skryptu. I wszystko pięknie zadziałało. Potem napisałem też skrypt do odtwarzania podcastów. Tak mi się to spodobało, że postanowiłem stworzyć mały projekt. Nazwałem go IWScast. Wysłałem na github.

Swoje internetowe radio

Wszystko jest bardzo proste. Pliki mp3 i plik index.php kopiuję do głównego folderu Apache /var/www/ i odtwarzają się losowo. Około 300 piosenek wystarcza na cały dzień mniej więcej.
Plik index.php to sam skrypt. Skrypt odczytuje wszystkie nazwy plików mp3 w katalogu do tablicy. Tworzy strumień audio i podstawia nazwy plików mp3. Czasem zdarza się, że słuchasz utworu i bardzo ci się podoba. Myślisz, kto to śpiewa? Na takie okazje jest rejestracja nazw odsłuchiwanych utworów w logu log.txt.
Kod skryptu w całości

<?php
set_time_limit(0);
header('Content-type: audio/mpeg');
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("icy-br: 128 ");
header("icy-name: twoja nazwa");
header("icy-description: twój opis");
$files = glob("*.mp3");
shuffle($files); // Losowe odtwarzanie

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header'=>"Accept-language: enrn"
       )
     )
   );
//Zapis do logu
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Piosenka - ' . $fl;
  file_put_contents('log.txt', $log . PHP_EOL, FILE_APPEND);
  $fpOrigin=fopen($filePath, 'rb', false, $strContext);
  while(!feof($fpOrigin)){
   $buffer=fread($fpOrigin, 4096);
   echo $buffer;
   flush();
 }
 fclose($fpOrigin);
}
?>

Jeśli chcesz, aby utwory były odtwarzane w porządku, musisz w index.php zakomentować linię

shuffle($files); // Losowe odtwarzanie

Dla podcastów używam /var/www/podcast/. Tam jest inny skrypt index.php. W nim jest zapamiętywanie utworów podcastów. Przy następnym włączeniu odbiornika internetowego odtwarzany jest następny utwór podcastu. Jest też log odtwarzanych utworów.
W pliku counter.dat możesz podać numer utworu, od którego rozpocznie się odtwarzanie podcastów.

Napisałem parsery do automatycznego pobierania podcastów. Chwyta 4 ostatnie utwory z RSS i pobiera je. Wszystko to świetnie działa na smartfonie, odtwarzaczu IPTV, w przeglądarce.

Niedawno rano przyszedł mi do głowy pomysł, że byłoby wspaniale zapamiętać pozycję odtwarzania utworu. Ale na razie nie wiem, jak to zrobić w PHP.

Skrypt można pobrać github.com/iwsys/IWScast

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster