La tua radio Internet personale

A molti di noi piace ascoltare la radio la mattina. E poi un bel mattino mi sono reso conto che non volevo ascoltare le stazioni radio FM locali. Non interessato. Ma l'abitudine si è rivelata dannosa. E ho deciso di sostituire il ricevitore FM con un ricevitore Internet. Ho acquistato rapidamente parti su Aliexpress e ho assemblato un ricevitore Internet.

Informazioni sul ricevitore Internet. Il cuore del ricevitore è il microcontrollore ESP32. Firmware della radio KA. I pezzi mi sono costati 12$. La facilità di montaggio mi ha permesso di montarlo in un paio di giorni. Funziona bene e stabilmente. In 10 mesi di lavoro si è bloccato solo un paio di volte, e solo a causa dei miei esperimenti. Un'interfaccia comoda e ben congegnata ti consente di controllare da uno smartphone e da un computer. In una parola, questo è un meraviglioso ricevitore Internet.

È tutto a posto. Ma una mattina presto sono giunto alla conclusione che, pur avendo accesso a decine di migliaia di stazioni radio, non esistevano stazioni interessanti. Mi hanno infastidito la pubblicità e le battute stupide dei presentatori. Saltando costantemente da una stazione all'altra. Mi piacciono Spotify e Yandex.Music. Ma la cosa triste è che nel mio paese non funzionano. E vorrei ascoltarli tramite il ricevitore Internet.

Mi sono ricordato della mia infanzia. Avevo un registratore e due dozzine di cassette. Ho scambiato cassette con gli amici. Ed è stato meraviglioso. Ho deciso che dovevo trasmettere in streaming i miei archivi audio solo a un ricevitore Internet. Naturalmente c'è la possibilità di collegare un lettore audio o un iPod agli altoparlanti e non preoccuparti. Ma questo non è il nostro modo! Odio collegare i connettori)

Ho iniziato a cercare soluzioni già pronte. Sul mercato c'è un'offerta per creare la propria radio Internet da Radio-Tochka.com. L'ho testato per 5 giorni. Tutto ha funzionato bene con il mio ricevitore Internet. Ma il prezzo non mi è sembrato interessante. Ho rifiutato questa opzione.

Ho pagato l'hosting 10 GB. Ho deciso di scrivere uno script su qualcosa che trasmettesse in streaming il flusso audio dei miei file mp3. Ho deciso di scriverlo in PHP. L'ho scritto velocemente e l'ho lanciato. Tutto ha funzionato. È stato bello! Ma un paio di giorni dopo ho ricevuto una lettera dall'amministrazione ospitante. Si afferma che è stato superato il limite dei minuti del processore e che è necessario passare a una tariffa più elevata. È stato necessario eliminare lo script e abbandonare questa opzione.

Come è successo? Non posso vivere senza radio. Se non ti consentono di eseguire lo script sull’hosting di qualcun altro, allora hai bisogno del tuo server. Dove farò ciò che la mia anima desidera.

Ho un vecchio netbook senza batteria (CPU - 900 MHz, RAM - 512 Mb). Il vecchio ha già 11 anni. Adatto per un server. Installo Ubuntu 12.04. Quindi installo Apache2 e php 5.3, samba. Il mio server è pronto.

Ho deciso di provare Icecast. Ho letto molto mana su di esso. Ma l'ho trovato difficile. E ho deciso di tornare all'opzione con uno script PHP. Sono stati spesi un paio di giorni per eseguire il debug di questo script. E tutto ha funzionato alla grande. Poi ho anche scritto una sceneggiatura per riprodurre i podcast. E mi è piaciuto così tanto che ho deciso di realizzare un piccolo progetto. L'ho chiamato IWScast. Pubblicato su github.

La tua radio Internet personale

Tutto è molto semplice. Copio i file mp3 e il file index.php nella cartella root di Apache /var/www/ e vengono riprodotti in modo casuale. Circa 300 canzoni sono sufficienti per circa l'intera giornata.
Il file index.php è lo script stesso. Lo script legge tutti i nomi dei file MP3 in una directory in un array. Crea un flusso audio e sostituisce i nomi dei file MP3. Ci sono momenti in cui ascolti una canzone e ti piace. Chi pensi che canti? In tal caso, nel log log.txt vengono registrati i nomi dei brani ascoltati
Codice script completo

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

Se hai bisogno che le tracce vengano riprodotte in ordine, devi commentare la riga in index.php

shuffle($files); //Random on

Per i podcast utilizzo /var/www/podcast/ C'è un altro script index.php. Ha la memorizzazione della traccia del podcast. La prossima volta che si accende il ricevitore Internet, viene riprodotta la traccia podcast successiva. C'è anche un registro delle tracce riprodotte.
Nel file counter.dat è possibile specificare il numero della traccia e da lì inizierà la riproduzione del podcast.

Ha scritto parser per il download automatico dei podcast. Prende le ultime 4 tracce da RSS e le scarica. Tutto questo funziona perfettamente su uno smartphone, un set-top box IPTV o in un browser.

L'altra mattina mi è venuto in mente che sarebbe bello ricordare la posizione di riproduzione di una traccia. Ma non so ancora come farlo in PHP.

Lo script può essere scaricato github.com/iwsys/IWScast

Fonte: habr.com

Aggiungi un commento