Svoje internetové rádio

Mnohí z nás ráno radi počúvajú rádio. A tak v jedno krásne ráno som si uvedomil, že nechcem počúvať miestne FM rádiostanice. Nie je to zaujímavé. Ale zvyky sa ukázali byť škodlivé. A rozhodol som sa vymeniť FM prijímač za internetový prijímač. Rýchlo som si kúpil súčiastky na AliExpress a zostavil internetový prijímač.

O internetovom prijímači. Srdcom prijímača je mikrokontrolér ESP32. Firmware od KA-radio. Náklady na súčiastky ma vyšli na 12 dolárov. Jednoduchosť montáže mi umožnila zložiť ho za pár dní. Dobre a stabilne funguje. Počas 10 mesiacov prevádzky zamrzol iba párkrát a to len kvôli mojim experimentom. Pohodlné a premyslené rozhranie umožňuje ovládanie z mobilného telefónu a počítača. Jednoducho povedané, je to skvelý internetový prijímač.

Všetko je skvelé. Ale jedného skorého rána som dospel k záveru, že aj keď mám prístup k desiatkam tisíc rádiostaníc, zaujímavé stanice chýbajú. Rozčuľovala ma reklama a hlúpe vtipy moderátorov. Neustále som skákal z jednej stanice na druhú. Páči sa mi Spotify a Yandex.Muzika. Ale smútočné je, že nefungujú v mojej krajine. A chcel by som ich počúvať cez internetový prijímač.

Spomenul som si na svoje detstvo. Mal som magnetofón a dve desiatky kaziet. S priateľmi sme si kazety vymieňali a bolo to úžasné. Rozhodol som sa, že musím začať streamovať svoje audio archívy len na internetový prijímač. Samozrejme, existuje možnosť pripojiť audio prehrávač alebo iPod k reproduktorom a nechať to na pokoji. Ale to nie je naša cesta! Nenávidím pripájanie konektorov).

Začal som hľadať hotové riešenia. Na trhu je ponuka na vytvorenie vlastného internetového rádia od Radio-Tochka.com. Testoval som to 5 dní. S mojím internetovým prijímačom všetko fungovalo skvele. Ale cena sa mi ukázala ako neatraktívna. Od tohto variantu som odstúpil.

Mám zaplatený hosting 10 GB. Rozhodol som sa napísať skript na niečom, aby bol stream audio prúdu mojich mp3 súborov. Rozhodol som sa písať v PHP. Rýchlo som napísal a spustil. Všetko fungovalo. Bolo to skvelé! Ale po pár dňoch prišiel e-mail od administrátorov hostingu. V ňom sa hovorilo o prekročení limitu procesorových minút a potrebe prejsť na vyšší tarif. Skript som musel odstrániť a od tohto variantu som odstúpil.

Ako je to možné? Nemôžem žiť bez rádia. Ak nedovolia spustiť skript na cudzom hostingu, znamená to, že potrebujem svoj server. Kde budem robiť to, čo si moja duša želá.

Mám starý netbook, ktorý leží bez batérie (CPU — 900 MHz, RAM — 512 Mb). Dnes má už 11 rokov. Na server to bude úplne vyhovovať. Nainštalujem Ubuntu 12.04. Potom nainštalujem Apache2 a PHP 5.3, Samba. Môj server je pripravený.

Rozhodol som sa vyskúšať Icecast. Čítal som veľa manuálov o ňom. Ale zdalo sa mi to zložité. A tak som sa rozhodol vrátiť k možnosti so skriptom na PHP. Na ladenie tohto skriptu som strávil pár dní. A všetko skvele fungovalo. Potom som ešte napísal skript na prehrávanie podcastov. A tak ma to nadchlo, že som sa rozhodol urobiť malý projekt. Nazval som ho IWScast. Nahral som na GitHub..

Svoje internetové rádio

Všetko je veľmi jednoduché. Súbory mp3 a súbor index.php skopírujem do koreňového priečinka Apache /var/www/ a prehrávajú sa náhodne. Približne 300 piesní stačí na celý deň.
Súbor index.php je vlastne ten skript. Skript načíta všetky názvy mp3 súborov z adresára do poľa. Vytvára audio stream a vkladá názvy mp3 súborov. Niekedy sa stane, že počúvaš pieseň a páči sa ti. Premýšľaš, kto to spieva? Na tento účel je záznam názvov prehrávaných skladieb v logu log.txt.
Kód skriptu úplne.

<?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: vaše meno");
header("icy-description: váš popis");
$files = glob("*.mp3");
shuffle($files); //Náhodne zapnuté

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
//Uložiť do logu
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Pieseň - ' . $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);
}
?>

Ak potrebujete, aby sa skladby prehrávali po poradí, musíte v index.php zakomentovať riadok.

shuffle($files); //Náhodne zapnuté

Na podcasty používam /var/www/podcast/. Tam je iný skript index.php. V ňom je zapamätávanie skladieb podcastov. Pri ďalšom zapnutí internetového prijímača sa prehráva ďalšia skladba podcastu. Taktiež je tam log prehrávaných skladieb.
V súbore counter.dat môžete zadať číslo skladby a od toho začne prehrávanie podcastov.

Písal som parséry na automatické sťahovanie podcastov. Berie z RSS 4 posledné skladby a sťahuje ich. Toto všetko skvele funguje na smartfóne, IPTV prijímači a v prehliadači.

Nedávno ráno ma napadlo, že by bolo skvelé zapamätať si pozíciu prehrávania skladby. Ale zatiaľ neviem, ako to urobiť v PHP.

Skript si môžete stiahnuť github.com/iwsys/IWScast

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster