Vlastné internetové rádio

Mnohí z nás radi počúvajú ráno rádio. A potom som si jedného pekného rána uvedomil, že nechcem počúvať miestne rozhlasové stanice FM. Nezaujíma. Ukázalo sa však, že tento zvyk je škodlivý. A rozhodol som sa nahradiť FM prijímač internetovým prijímačom. Rýchlo som nakúpil diely na Aliexpress a zostavil internetový prijímač.

O internetovom prijímači. Srdcom prijímača je mikrokontrolér ESP32. Firmvér z KA-rádia. Súčiastky ma stáli 12 dolárov. Jednoduchá montáž mi umožnila zostaviť ho za pár dní. Funguje dobre a stabilne. Za 10 mesiacov práce zamrzol len párkrát a to už len kvôli mojim pokusom. Pohodlné a premyslené rozhranie umožňuje ovládanie zo smartfónu a počítača. Jedným slovom je to úžasný internetový prijímač.

Všetko je v poriadku. Ale v jedno skoré ráno som dospel k záveru, že napriek tomu, že mám prístup k desiatkam tisíc rádií, neexistujú žiadne zaujímavé stanice. Rozčuľovala ma reklama a hlúpe vtipy moderátoriek. Neustále skákanie z jednej stanice na druhú. Mám rád Spotify a Yandex.Music. Ale smutné je, že v mojej krajine nefungujú. A chcel by som ich počúvať cez internetový prijímač.

Spomenul som si na detstvo. Mal som magnetofón a dve desiatky kaziet. Vymenil som si kazety s kamarátmi. A bolo to úžasné. Rozhodol som sa, že potrebujem streamovať svoje audio archívy iba do internetového prijímača. Samozrejmosťou je možnosť pripojiť k reproduktorom audio prehrávač alebo iPod a nemusíte sa báť. Ale toto nie je naša cesta! Neznášam spojovacie konektory)

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 dobre. Ale cena pre mňa nebola atraktívna. Túto možnosť som odmietol.

Mám zaplatený hosting 10 GB. Rozhodol som sa napísať skript na niečom, čo by streamovalo audio stream mojich mp3 súborov. Rozhodol som sa to napísať v PHP. Rýchlo som to napísal a spustil. Všetko fungovalo. Bolo to cool! Ale o pár dní neskôr som dostal list od hostiteľskej správy. Hovorilo sa o prekročení limitu minút procesora a potrebe prechodu na vyššiu tarifu. Skript musel byť odstránený a táto možnosť bola opustená.

Ako sa to stalo? Nemôžem žiť bez rádia. Ak vám neumožňujú spustiť skript na hosťovaní niekoho iného, ​​potrebujete vlastný server. Kde budem robiť to, po čom moja duša túži.

Mám starodávny netbook bez batérie (CPU - 900 MHz, RAM - 512 Mb). Starý pán má už 11 rokov. Vhodné na server. Inštalujem Ubuntu 12.04. Potom nainštalujem Apache2 a php 5.3, samba. Môj server je pripravený.

Rozhodol som sa vyskúšať Icecast. Prečítal som na ňom veľa many. Zistil som to však ťažko. A rozhodol som sa vrátiť k možnosti s PHP skriptom. Ladenie tohto skriptu strávilo niekoľko dní. A všetko fungovalo skvele. Potom som napísal aj scenár na prehrávanie podcastov. A zapáčilo sa mi to natoľko, že som sa rozhodol urobiť malý projekt. Nazvali to IWScast. Uverejnené na githube.

Vlastné internetové rádio

Všetko je veľmi jednoduché. Skopírujem súbory mp3 a súbor index.php do koreňového priečinka Apache /var/www/ a náhodne sa prehrajú. Približne 300 skladieb vystačí približne na celý deň.
Súbor index.php je samotný skript. Skript načíta všetky názvy súborov MP3 v adresári do poľa. Vytvorí zvukový prúd a nahradí názvy súborov MP3. Sú chvíle, keď počúvate pesničku a páči sa vám. Kto podľa vás spieva? Pre takýto prípad existuje záznam názvov počúvaných skladieb v logu log.txt
Dokončite 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);
}
?>

Ak potrebujete, aby sa skladby prehrali v poradí, potom musíte zakomentovať riadok v index.php

shuffle($files); //Random on

Pre podcasty používam /var/www/podcast/ Existuje ďalší skript index.php. Má zapamätanie skladieb podcastov. Pri ďalšom zapnutí internetového prijímača sa prehrá ďalšia skladba podcastu. Nechýba ani log prehratých skladieb.
V súbore counter.dat môžete zadať číslo skladby a od neho sa spustí prehrávanie podcastu.

Napísali analyzátory na automatické sťahovanie podcastov. Vezme najnovšie 4 skladby z RSS a stiahne ich. To všetko funguje skvele na smartfóne, IPTV set-top boxe alebo v prehliadači.

Raz ráno mi napadlo, že by bolo skvelé zapamätať si polohu prehrávania na skladbe. Ale ešte neviem, ako to urobiť v PHP.

Skript je možné stiahnuť github.com/iwsys/IWScast

Zdroj: hab.com

Pridať komentár