La teva pròpia ràdio per Internet

A molts de nosaltres ens agrada escoltar la ràdio al matí. I aleshores un bon matí em vaig adonar que no volia escoltar les emissores de ràdio FM locals. No estic interessat. Però l'hàbit va resultar perjudicial. I vaig decidir substituir el receptor FM per un receptor d'Internet. Ràpidament vaig comprar peces a Aliexpress i vaig muntar un receptor d'Internet.

Sobre el receptor d'Internet. El cor del receptor és el microcontrolador ESP32. Firmware de KA-radio. Les peces em van costar 12 dòlars. La facilitat de muntatge em va permetre muntar-lo en un parell de dies. Funciona bé i estable. En 10 mesos de treball, només es va congelar un parell de vegades, i després només a causa dels meus experiments. Una interfície còmoda i ben pensada us permet controlar des d'un telèfon intel·ligent i un ordinador. En una paraula, aquest és un meravellós receptor d'Internet.

Tot està bé. Però un matí d'hora vaig arribar a la conclusió que tot i tenir accés a desenes de milers d'emissores de ràdio, no hi havia emissores interessants. Em va molestar la publicitat i els acudits estúpids dels presentadors. Saltant constantment d'una estació a una altra. M'agrada Spotify i Yandex.Music. Però el més trist és que no treballen al meu país. I m'agradaria escoltar-los a través del receptor d'Internet.

Vaig recordar la meva infantesa. Tenia una gravadora i dues dotzenes de cassets. Vaig intercanviar cassets amb els amics. I va ser meravellós. Vaig decidir que necessitava transmetre els meus arxius d'àudio només a un receptor d'Internet. Per descomptat, hi ha una opció per connectar un reproductor d'àudio o un iPod als altaveus i no et preocupis. Però aquesta no és la nostra manera! Odio connectar connectors)

Vaig començar a buscar solucions ja fetes. Hi ha una oferta al mercat per crear la teva pròpia ràdio per Internet des de Radio-Tochka.com. Ho vaig provar durant 5 dies. Tot va funcionar bé amb el meu receptor d'Internet. Però el preu no em va resultar atractiu. Vaig rebutjar aquesta opció.

He pagat allotjament 10 GB. Vaig decidir escriure un guió sobre alguna cosa que transmetés el flux d'àudio dels meus fitxers mp3. Vaig decidir escriure-ho en PHP. El vaig escriure ràpidament i el vaig llançar. Tot va funcionar. Va ser genial! Però un parell de dies després vaig rebre una carta de l'administració d'acollida. Va dir que es va superar el límit de minuts del processador i la necessitat d'actualitzar a una tarifa més alta. S'havia d'eliminar l'script i abandonar aquesta opció.

Com ha passat? No puc viure sense ràdio. Si no us permeten executar l'script a l'allotjament d'una altra persona, necessiteu el vostre propi servidor. On faré el que la meva ànima vulgui.

Tinc un netbook antic sense bateria (CPU - 900 MHz, RAM - 512 Mb). El vell ja té 11 anys. Apte per a un servidor. Instal·lo Ubuntu 12.04. Després instal·lo Apache2 i php 5.3, samba. El meu servidor està preparat.

Vaig decidir provar Icecast. Vaig llegir-hi molt de mana. Però ho vaig trobar difícil. I vaig decidir tornar a l'opció amb un script PHP. Es van dedicar un parell de dies a depurar aquest script. I tot va funcionar molt bé. Després també vaig escriure un guió per reproduir podcasts. I em va agradar tant que vaig decidir fer un petit projecte. Ho va anomenar IWScast. Publicat a github.

La teva pròpia ràdio per Internet

Tot és molt senzill. Copio els fitxers mp3 i el fitxer index.php a la carpeta arrel d'Apache /var/www/ i es reprodueixen aleatòriament. Unes 300 cançons són suficients per aproximadament tot el dia.
El fitxer index.php és el propi script. L'script llegeix tots els noms dels fitxers MP3 d'un directori en una matriu. Crea un flux d'àudio i substitueix els noms dels fitxers MP3. Hi ha moments en què escoltes una cançó i t'agrada. Qui creus que canta? En aquest cas, hi ha una gravació dels noms de les pistes escoltades al registre log.txt
Codi de script complet

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

Si necessiteu que les pistes es reprodueixin en ordre, heu de comentar la línia a index.php

shuffle($files); //Random on

Per als podcasts faig servir /var/www/podcast/ Hi ha un altre script index.php. Té memorització de pistes de podcast. La propera vegada que engegueu el receptor d'Internet, es reproduirà la següent pista de podcast. També hi ha un registre de les pistes reproduïdes.
Al fitxer counter.dat, podeu especificar el número de pista i la reproducció del podcast s'iniciarà a partir d'aquest.

Va escriure analitzadors per a la descàrrega automàtica de podcasts. Pren les 4 cançons més recents de RSS i les baixa. Tot això funciona molt bé en un telèfon intel·ligent, un decodificador IPTV o en un navegador.

L'altre matí se'm va ocórrer que seria fantàstic recordar la posició de reproducció d'una pista. Però encara no sé com fer-ho en PHP.

El guió es pot descarregar github.com/iwsys/IWScast

Font: www.habr.com

Afegeix comentari