Din egen internetradio

Många av oss gillar att lyssna på radio på morgonen. Och så en vacker morgon insåg jag att jag inte ville lyssna på lokala FM-radiostationer. Inte intresserad. Men vanan visade sig vara skadlig. Och jag bestämde mig för att ersätta FM-mottagaren med en internetmottagare. Jag köpte snabbt delar på Aliexpress och satte ihop en internetmottagare.

Om internetmottagaren. Hjärtat i mottagaren är ESP32 mikrokontroller. Firmware från KA-radio. Delarna kostade mig $12. Den enkla monteringen gjorde att jag kunde montera den på ett par dagar. Fungerar bra och stabilt. Under 10 månaders arbete frös det bara ett par gånger, och då bara på grund av mina experiment. Ett bekvämt och genomtänkt gränssnitt låter dig styra från en smartphone och dator. Med ett ord, det här är en underbar internetmottagare.

Allt är ok. Men en tidig morgon kom jag fram till att trots att jag hade tillgång till tiotusentals radiostationer så fanns det inga intressanta stationer. Jag blev irriterad över reklam och programledarnas dumma skämt. Ständigt hoppar från en station till en annan. Jag gillar Spotify och Yandex.Music. Men det tråkiga är att de inte fungerar i mitt land. Och jag skulle vilja lyssna på dem via internetmottagaren.

Jag kom ihåg min barndom. Jag hade en bandspelare och två dussin kassetter. Jag bytte kassetter med vänner. Och det var underbart. Jag bestämde mig för att jag behövde strömma mina ljudarkiv endast till en internetmottagare. Naturligtvis finns det ett alternativ att ansluta en ljudspelare eller iPod till högtalarna och inte oroa dig. Men det här är inte vårt sätt! Jag hatar att ansluta kontakter)

Jag började leta efter färdiga lösningar. Det finns ett erbjudande på marknaden att skapa din egen internetradio från Radio-Tochka.com. Jag testade det i 5 dagar. Allt fungerade bra med min internetmottagare. Men priset var inte attraktivt för mig. Jag tackade nej till det här alternativet.

Jag har betalt hosting 10 GB. Jag bestämde mig för att skriva ett manus på något som skulle strömma ljudströmmen av mina mp3-filer. Jag bestämde mig för att skriva det i PHP. Jag skrev snabbt och startade det. Allt fungerade. Det var coolt! Men ett par dagar senare fick jag ett brev från värdförvaltningen. Det stod att gränsen för processorminuter överskreds och behovet av att uppgradera till en högre taxa. Skriptet måste raderas och det här alternativet överges.

Hur hände det? Jag kan inte leva utan radio. Om de inte tillåter dig att köra skriptet på någon annans värd, behöver du din egen server. Där jag ska göra vad min själ önskar.

Jag har en gammal netbook utan batteri (CPU - 900 MHz, RAM - 512 Mb). Gubben är redan 11 år gammal. Lämplig för en server. Jag installerar Ubuntu 12.04. Sedan installerar jag Apache2 och php 5.3, samba. Min server är klar.

Jag bestämde mig för att prova Icecast. Jag läste mycket mana om det. Men jag tyckte att det var svårt. Och jag bestämde mig för att återgå till alternativet med ett PHP-skript. Ett par dagar gick åt till att felsöka det här skriptet. Och allt fungerade utmärkt. Sedan skrev jag också ett manus för att spela poddar. Och jag gillade det så mycket att jag bestämde mig för att göra ett litet projekt. Kallade det IWScast. Postat på github.

Din egen internetradio

Allt är väldigt enkelt. Jag kopierar mp3-filerna och filen index.php till Apaches rotmapp /var/www/ och de spelas upp slumpmässigt. Cirka 300 låtar räcker för ungefär hela dagen.
Filen index.php är själva skriptet. Skriptet läser alla namn på MP3-filer i en katalog till en array. Skapar en ljudström och ersätter namnen på MP3-filer. Det finns tillfällen när du lyssnar på en låt och du gillar den. Vem tror du sjunger? För ett sådant fall finns det en inspelning av namnen på lyssnade spår i loggen log.txt
Komplett skriptkod

<?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);
}
?>

Om du vill att spåren ska spelas i ordning, måste du kommentera raden i index.php

shuffle($files); //Random on

För podcaster använder jag /var/www/podcast/ Det finns ett annat skript index.php. Den har memorering av podcastspår. Nästa gång du slår på internetmottagaren spelas nästa podcastspår. Det finns också en logg över spelade spår.
I counter.dat-filen kan du ange spårnummer och uppspelning av podcast kommer att starta från det.

Skrev parsers för automatisk nedladdning av poddar. Den tar de senaste 4 spåren från RSS och laddar ner dem. Allt detta fungerar utmärkt på en smartphone, IPTV set-top box eller i en webbläsare.

Härommorgonen slog det mig att det skulle vara bra att komma ihåg uppspelningspositionen på ett spår. Men jag vet ännu inte hur man gör detta i PHP.

Skriptet kan laddas ner github.com/iwsys/IWScast

Källa: will.com

Lägg en kommentar