Dit eget internet radio

Mange af os elsker at lytte til radio om morgenen. Og en skøn morgen indså jeg, at jeg ikke ønskede at lytte til de lokale FM-radiostationer. Det var ikke interessant. Men vanen viste sig at være skadelig. Jeg besluttede at erstatte FM-modtageren med en internetmodtager. Jeg købte hurtigt dele på AliExpress og byggede en internetmodtager.

Om internetmodtageren. Hjerte i modtageren er mikrokontrolleren ESP32. Firmwaren er fra KA-radio. Omkostningen til dele var 12 dollars. Den enkelhed i sammenbygning gjorde, at jeg kunne samle det på et par dage. Den fungerer godt og stabilt. I løbet af 10 måneders brug har den kun hængt et par gange, og det var kun på grund af mine eksperimenter. Den brugervenlige og gennemtænkte grænseflade gør det muligt at styre den fra smartphone og computer. Alt i alt er det en fantastisk internetmodtager.

Alt er fantastisk. Men en tidlig morgen kom jeg til den konklusion, at med adgang til titusinder af radiostationer er der ingen interessante stationer. Reklamer og tåbelige vittigheder fra værterne irriterede mig. Jeg sprang konstant fra den ene station til den anden. Jeg kan godt lide Spotify og Yandex.Music. Men min sorg er, at de ikke fungerer i mit land. Og jeg ville gerne lytte til dem gennem internetmodtageren.

Jeg kom i tanke om min barndom. Jeg havde en båndoptager og to dusin kassettebånd. Jeg byttede kassetter med vennerne. Det var vidunderligt. Jeg besluttede, at jeg måtte streame mine audioarkiver kun til internetmodtageren. Selvfølgelig er der muligheden for at tilslutte en mp3-afspiller eller iPod til højttalerne og bare lade det være. Men det er ikke vores vej! Jeg hader at tilslutte stik)

Jeg begyndte at lede efter færdige løsninger. På markedet er der et tilbud om at oprette sit eget internet-radio fra Radio-Tochka.com. Jeg testede det i 5 dage. Mit internetmodtagersystem fungerede perfekt. Men prisen viste sig at være uattraktiv for mig. Jeg gav op på denne mulighed.

Jeg har et betalt hosting på 10 GB. Jeg besluttede at skrive et script på et eller andet, så jeg kunne streame lydstrømmen fra mine mp3-filer. Jeg besluttede at skrive det i PHP. Jeg skrev det hurtigt og fik det op at køre. Det fungerede fantastisk! Men efter et par dage kom der et brev fra hostingadministrationen. Det sagde, at jeg havde overskredet grænsen for processor minutter og skulle opgradere til en højere plan. Scriptet måtte fjernes, og jeg måtte give op på denne mulighed.

Hvordan kan det være? Jeg kan ikke leve uden radio. Hvis de ikke giver mig lov til at køre et script på et andet hosting, må jeg have min egen server. Hvor kan jeg lave det, som min sjæl ønsker.

Jeg har en gammeldags bærbar, der ligger uden batteri (CPU — 900 MHz, RAM — 512 Mb). Den gamle fyr er allerede 11 år. Den ville være helt fin som server. Jeg sætter Ubuntu 12.04 op. Derefter installerer jeg Apache2 og PHP 5.3, samba. Min server er klar.

Jeg besluttede at prøve Icecast. Jeg har læst mange manualer om det. Men det virkede svært for mig. Så jeg besluttede at vende tilbage til en løsning med et script i PHP. Jeg brugte et par dage på at debugge dette script. Og alt fungerede perfekt. Derefter skrev jeg et script til at afspille podcasts. Og jeg kunne godt lide det så meget, at jeg besluttede at lave et lille projekt. Jeg kaldte det IWScast. Jeg lagde det op på github.

Dit eget internet radio

Alt er meget simpelt. Jeg kopierer mp3-filerne og filen index.php til roden af apache /var/www/ og de bliver afspillet tilfældigt. Omkring 300 sange er nok til hele dagen.
Filen index.php er selve scriptet. Scriptet læser alle navne på mp3-filerne i mappen ind i et array. Det opretter en lydstream og indsætter navne på mp3-filerne. Der er tidspunkter, hvor du lytter til en sang, og du kan godt lide den. Du tænker, hvem synger det? Til sådan et tilfælde er der en log til at registrere navne på de afspillede numre i log.txt.
Hele scriptkoden

<?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 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 ønsker, at numrene skal afspilles i rækkefølge, 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. I det er der en hukommelse for podcastnumrene. Ved næste gang, internetmodtageren tændes, afspilles det næste nummer af podcasten. Der er også en log over afspillede numre.
I filen counter.dat kan du angive nummeret på nummeret, og afspilningen af podcasten starter derfra.

Jeg har skrevet parsere til automatisk download af podcasts. Den henter de seneste 4 numre fra RSS og downloader dem. Alt dette fungerer fantastisk på smartphones, IPTV-bokse og i browsere.

For nylig kom jeg til at tænke på, at det ville være fantastisk at lave en funktion til at huske positionen, hvor man stoppede afspilningen af et nummer. Men jeg ved endnu ikke, hvordan man gør det i PHP.

Scriptet kan downloades github.com/iwsys/IWScast

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster