Vaše vlastní internetové rádio

Mnozí z nás rádi poslouchají ráno rádio. A pak jsem si jednoho krásného rána uvědomil, že nechci poslouchat místní rozhlasové stanice FM. Nemám zájem. Ukázalo se však, že tento zvyk je škodlivý. A rozhodl jsem se vyměnit FM přijímač za internetový přijímač. Rychle jsem nakoupil 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 z KA-radia. Díly mě stály 12 dolarů. Snadná montáž mi umožnila sestavit ho za pár dní. Funguje dobře a stabilně. Za 10 měsíců práce to zamrzlo jen párkrát, a to jen kvůli mým pokusům. Pohodlné a promyšlené rozhraní umožňuje ovládání ze smartphonu a počítače. Jedním slovem je to úžasný internetový přijímač.

Všechno je v pořádku. Jednoho brzkého rána jsem ale došel k závěru, že přestože jsem měl přístup k desítkám tisíc rozhlasových stanic, nebyly tam žádné zajímavé stanice. Vadila mi reklama a stupidní vtipy moderátorek. Neustále přeskakování z jedné stanice na druhou. Líbí se mi Spotify a Yandex.Music. Ale smutné je, že v mé zemi nefungují. A chtěl bych je poslouchat přes internetový přijímač.

Vzpomněl jsem si na dětství. Měl jsem magnetofon a dvě desítky kazet. Vyměnil jsem si kazety s přáteli. A bylo to úžasné. Rozhodl jsem se, že potřebuji streamovat své audio archivy pouze do internetového přijímače. Samozřejmostí je možnost připojit k reproduktorům audio přehrávač nebo iPod a nestarat se. Ale tohle není naše cesta! Nesnáším spojování konektorů)

Začal jsem hledat hotová řešení. Na trhu je nabídka na vytvoření vlastního internetového rádia od Radio-Tochka.com. Testoval jsem to 5 dní. S mým internetovým přijímačem vše fungovalo dobře. Cena pro mě ale nebyla lákavá. Tuto možnost jsem odmítl.

Mám zaplacený hosting 10 GB. Rozhodl jsem se napsat skript k něčemu, co by streamovalo audio stream mých mp3 souborů. Rozhodl jsem se to napsat v PHP. Rychle jsem to napsal a spustil. Všechno fungovalo. Bylo to cool! Ale o pár dní později jsem dostal dopis od administrace hostingu. Bylo tam uvedeno překročení limitu minut procesoru a nutnost přechodu na vyšší tarif. Skript musel být smazán a tato možnost opuštěna.

Jak se to stalo? Nemůžu žít bez rádia. Pokud vám neumožňují spouštět skript na hostingu někoho jiného, ​​potřebujete svůj vlastní server. Kde budu dělat to, po čem moje duše touží.

Mám prastarý netbook bez baterie (CPU - 900 MHz, RAM - 512 Mb). Staříkovi je již 11 let. Vhodné pro server. Instaluji Ubuntu 12.04. Poté nainstaluji Apache2 a php 5.3, samba. Můj server je připraven.

Rozhodl jsem se vyzkoušet Icecast. Přečetl jsem na něm hodně many. Ale přišlo mi to těžké. A rozhodl jsem se vrátit k možnosti s PHP skriptem. Laděním tohoto skriptu jsme strávili několik dní. A vše fungovalo skvěle. Pak jsem také napsal scénář k přehrávání podcastů. A zalíbilo se mi to natolik, že jsem se rozhodl udělat malý projekt. Nazval to IWScast. Publikováno na github.

Vaše vlastní internetové rádio

Vše je velmi jednoduché. Zkopíruji soubory mp3 a soubor index.php do kořenové složky Apache /var/www/ a přehrávají se náhodně. Cca 300 skladeb vystačí přibližně na celý den.
Soubor index.php je samotný skript. Skript přečte všechny názvy souborů MP3 v adresáři do pole. Vytvoří zvukový proud a nahradí názvy souborů MP3. Jsou chvíle, kdy posloucháte písničku a líbí se vám. Kdo si myslíš, že zpívá? Pro takový případ existuje záznam názvů poslouchaných stop v log log.txt
Dokončete kód skriptu

<?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: your name");
header("icy-description: your description"); 
$files = glob("*.mp3");
shuffle($files); //Random on

for ($x=0; $x < count($files);) {
  $filePath =  $files[$x++];
  $bitrate = 128;
  $strContext=stream_context_create(
   array(
     'http'=>array(
       'method' =>'GET',
       'header' => 'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
//Save to log 
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Song - ' . $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 potřebujete, aby se skladby přehrávaly v pořadí, pak musíte zakomentovat řádek v index.php

shuffle($files); //Random on

Pro podcasty používám /var/www/podcast/ Existuje další skript index.php. Má zapamatování skladeb podcastů. Při příštím zapnutí internetového přijímače se přehraje další skladba podcastu. Nechybí ani log přehraných skladeb.
V souboru counter.dat můžete zadat číslo stopy a od něj začne přehrávání podcastu.

Napsal analyzátory pro automatické stahování podcastů. Vezme nejnovější 4 skladby z RSS a stáhne je. To vše funguje skvěle na smartphonu, IPTV set-top boxu nebo v prohlížeči.

Jednou ráno mě napadlo, že by bylo skvělé zapamatovat si pozici přehrávání na stopě. Ale zatím nevím, jak to udělat v PHP.

Skript lze stáhnout github.com/iwsys/IWScast

Zdroj: www.habr.com

Přidat komentář