Din egen internetradio

Mange af os kan lide at lytte til radio om morgenen. Og så en skøn morgen indså jeg, at jeg ikke ville lytte til lokale FM-radiostationer. Ikke interesseret. Men vanen viste sig at være skadelig. Og jeg besluttede at erstatte FM-modtageren med en internetmodtager. Jeg købte hurtigt dele på Aliexpress og samlede en internetmodtager.

Om internetmodtageren. Hjertet i modtageren er ESP32 mikrocontrolleren. Firmware fra KA-radio. Delene kostede mig $12. Den lette montering gjorde, at jeg kunne samle den på et par dage. Fungerer godt og stabilt. På 10 måneders arbejde frøs det kun et par gange, og så kun på grund af mine eksperimenter. En praktisk og gennemtænkt grænseflade giver dig mulighed for at styre fra en smartphone og computer. Kort sagt, dette er en vidunderlig internetmodtager.

Alt er i orden. Men en tidlig morgen kom jeg til den konklusion, at på trods af at have adgang til titusindvis af radiostationer, var der ingen interessante stationer. Jeg blev irriteret over reklamerne og oplægsholdernes dumme vittigheder. Hopper konstant fra en station til en anden. Jeg kan godt lide Spotify og Yandex.Music. Men det sørgelige er, at de ikke virker i mit land. Og jeg vil gerne lytte til dem via internetmodtageren.

Jeg huskede min barndom. Jeg havde en båndoptager og to dusin kassetter. Jeg udvekslede kassetter med venner. Og det var vidunderligt. Jeg besluttede, at jeg kun skulle streame mine lydarkiver til en internetmodtager. Selvfølgelig er der mulighed for at tilslutte en lydafspiller eller iPod til højttalerne og ikke bekymre dig. Men det er ikke vores måde! Jeg hader at forbinde stik)

Jeg begyndte at lede efter færdige løsninger. Der er et tilbud på markedet om at lave din egen internetradio fra Radio-Tochka.com. Jeg testede det i 5 dage. Alt fungerede fint med min internetmodtager. Men prisen var ikke attraktiv for mig. Jeg afviste denne mulighed.

Jeg har betalt hosting 10 GB. Jeg besluttede at skrive et script om noget, der ville streame lydstrømmen af ​​mine mp3-filer. Jeg besluttede at skrive det i PHP. Jeg skrev det hurtigt og lancerede det. Alt fungerede. Det var fedt! Men et par dage senere modtog jeg et brev fra værtsadministrationen. Den sagde, at grænsen for processorminutter var overskredet og behovet for at opgradere til en højere takst. Scriptet skulle slettes og denne mulighed forlades.

Hvordan skete det? Jeg kan ikke leve uden radio. Hvis de ikke tillader dig at køre scriptet på en andens hosting, så har du brug for din egen server. Hvor jeg vil gøre, hvad min sjæl ønsker.

Jeg har en gammel netbook uden batteri (CPU - 900 MHz, RAM - 512 Mb). Den gamle mand er allerede 11 år gammel. Velegnet til en server. Jeg installerer Ubuntu 12.04. Så installerer jeg Apache2 og php 5.3, samba. Min server er klar.

Jeg besluttede at prøve Icecast. Jeg læste meget mana om det. Men jeg fandt det svært. Og jeg besluttede at vende tilbage til muligheden med et PHP-script. Et par dage blev brugt på at fejlfinde dette script. Og alt fungerede fantastisk. Så skrev jeg også et manuskript til at spille podcasts. Og jeg kunne lide det så meget, at jeg besluttede at lave et lille projekt. Kaldede det IWScast. Udgivet på github.

Din egen internetradio

Alt er meget enkelt. Jeg kopierer mp3-filerne og index.php-filen til Apache-rodmappen /var/www/, og de afspilles tilfældigt. Omkring 300 sange er nok til cirka hele dagen.
Filen index.php er selve scriptet. Scriptet læser alle navnene på MP3-filer i en mappe i et array. Opretter en lydstream og erstatter navnene på MP3-filer. Der er tidspunkter, hvor du lytter til en sang, og du kan lide den. Hvem tror du synger? I et sådant tilfælde er der en optagelse af navnene på lyttede spor i loggen log.txt
Komplet scriptkode

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

Hvis du har brug for at numrene afspilles i rækkefølge, så skal du kommentere linjen i index.php

shuffle($files); //Random on

Til podcasts bruger jeg /var/www/podcast/ Der er et andet script index.php. Det har podcast spor udenads. Næste gang du tænder for internetmodtageren, afspilles det næste podcastnummer. Der er også en log over afspillede numre.
I counter.dat-filen kan du angive spornummeret, og podcast-afspilning starter fra det.

Skrev parsere til automatisk download af podcasts. Det tager de seneste 4 numre fra RSS og downloader dem. Alt dette fungerer godt på en smartphone, IPTV set-top-boks eller i en browser.

Forleden morgen gik det op for mig, at det ville være dejligt at huske afspilningspositionen på et nummer. Men jeg ved endnu ikke, hvordan man gør dette i PHP.

Scriptet kan downloades github.com/iwsys/IWScast

Kilde: www.habr.com

Tilføj en kommentar