Rádio přes internet

Mnozí z nás ráno rádi poslouchají rádio. A tak jednoho krásného rána jsem si uvědomil, že nechci poslouchat místní FM rozhlasové stanice. Nic zajímavého. Ale zvyk se ukázal jako škodlivý. Rozhodl jsem se tedy vyměnit FM příjmač za internetový. Rychle jsem koupil díly na AliExpress a sestavil internetový přijímač.

O internetovém přijímači. Srdcem přijímače je mikrokontrolér ESP32. Firmware od KA-radio. Náklady na díly mě vyšly na 12 dolarů. Jednoduchost montáže mi umožnila sestavit ho za pár dní. Dobře a stabilně funguje. Za 10 měsíců provozu se pouze párkrát zasekl, a to jen kvůli mým experimentům. Pohodlné a promyšlené rozhraní umožňuje ovládání ze smartphonu a počítače. Jedním slovem, je to báječný internetový přijímač.

Všechno je skvělé. Ale jednoho pošmourného rána jsem došel k závěru, že při přístupu k desítkám tisíc rozhlasových stanic není žádná zajímavá. Rozčilovala mě reklama, hloupé vtipy moderátorů. Neustále jsem přepínal z jedné stanice na druhou. Líbí se mi Spotify a Yandex.Music. Ale smutné je, že v mé zemi nefungují. Rád bych je poslouchal přes internetový přijímač.

Vzpomněl jsem si na své dětství. Měl jsem magnetofon a dvě desítky kazet. Kazety jsem vyměňoval s přáteli. Bylo to úžasné. Rozhodl jsem se, že musím streamovat své audio archivy pouze na internetový přijímač. Samozřejmě existuje možnost připojit audio přehrávač nebo iPod k reproduktorům a nestarat se. Ale to není naše cesta! Nesnáším zapojování konektorů.)

Začal jsem hledat hotová řešení. Na trhu je nabídka vytvořit vlastní internetové rádio od Radio-Tochka.com. Testoval jsem 5 dní. S mým internetovým přijímačem to fungovalo skvěle. Ale cena se ukázala jako pro mě nevýhodná. Odmítl jsem tuto variantu.

Mám zaplacený hosting 10 GB. Rozhodl jsem se napsat skript na něco, co by umožnilo streamování audio toku mých mp3 souborů. Rozhodl jsem se to napsat v PHP. Rychle jsem napsal a spustil. Všechno fungovalo. Bylo to skvělé! Ale po pár dnech přišel e-mail od administrace hostingu. V něm se psalo o překročení limitu procesorových minut a potřebě přejít na vyšší tarif. Skript jsem musel smazat a od této varianty jsem se vzdal.

Jak to? Nemohu žít bez rádia. Pokud mi nedovolí spustit skript na cizím hostingu, znamená to, že potřebuji svůj server. Kde budu dělat to, co si má duše přeje.

Mám starý notebook, který leží bez akumulátoru (CPU — 900 MHz, RAM — 512 Mb). Starouškovi už je 11 let. Na server to určitě stačí. Nainstaluji Ubuntu 12.04. Pak nainstaluji Apache2 a PHP 5.3, samba. Můj server je připraven.

Rozhodl jsem se zkusit Icecast. O něm jsem hodně četl manuály. Ale přišel mi složitý. A tak jsem se rozhodl vrátit se k variantě se skriptem na PHP. Strávil jsem pár dní laděním tohoto skriptu. A všechno skvěle fungovalo. Poté jsem napsal skript pro přehrávání podcastů. A tak se mi to zalíbilo, že jsem se rozhodl udělat malý projekt. Nazval jsem ho IWScast. Našel jsem to na githubu..

Rádio přes internet

Vše je velmi jednoduché. MP3 soubory a soubor index.php zkopíruji do kořenové složky Apache /var/www/ a ty se náhodně přehrávají. Asi 300 písniček stačí na celý den.
Soubor index.php je vlastně samotný skript. Skript načte všechna jména mp3 souborů z adresáře do pole. Vytváří audio stream a přidává názvy mp3 souborů. Občas se stane, že posloucháš píseň a líbí se ti. Přemýšlíš, kdo to zpívá? Na tento případ je záznam názvů poslouchaných skladeb v logu log.txt.
Kód skriptu v plné délce.

<?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 jméno");
header("icy-description: váš popis"); 
$files = glob("*.mp3");
shuffle($files); // Náhodně zapnuto

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

Pokud chcete, aby se skladby přehrávaly v pořadí, musíte v index.php zakomentovat řádek.

shuffle($files); // Náhodně zapnuto

Pro podcasty používám /var/www/podcast/. Tam je jiný skript index.php. V něm je zapamatování skladeb podcastů. Při dalším zapnutí internetového přijímače se přehraje další skladba podcastu. Také je tam log přehrávaných skladeb.
V souboru counter.dat můžete uvést číslo skladby a od té začne přehrávání podcastů.

Psali jsme parsování pro automatické stahování podcastů. Vezme čtyři poslední skladby z RSS a stáhne je. To všechno skvěle funguje na smartphonu, IPTV přijímači i v prohlížeči.

Ráno jsem měl myšlenku, že by bylo skvělé udělat zapamatování pozice přehrávání na skladbě. Ale zatím nevím, jak to udělat v PHP.

Skript si můžete stáhnout github.com/iwsys/IWScast

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster