Tu propia radio por Internet

A muchos de nosotros nos gusta escuchar la radio por las mañanas. Y en una hermosa mañana, me di cuenta de que no quería escuchar las estaciones de FM locales. No son interesantes. Pero la costumbre resultó ser perjudicial. Así que decidí reemplazar el receptor de FM por un receptor de internet. Compré rápidamente las piezas en AliExpress y armé el receptor de internet.

Sobre el receptor de internet. El corazón del receptor es un microcontrolador ESP32. La programación es de KA-radio. El costo de las piezas me salió en 12 dólares. La facilidad de ensamblaje me permitió montarlo en un par de días. Funciona bien y de manera estable. En 10 meses de uso, solo se colgó un par de veces, y eso por mis experimentos. Una interfaz conveniente y bien pensada permite controlarlo desde un smartphone o una computadora. En pocas palabras, es un maravilloso receptor de internet.

Todo es genial. Pero una mañana, llegué a la conclusión de que, a pesar de tener acceso a decenas de miles de estaciones de radio, no había estaciones interesantes. Me irritaban los anuncios y los chistes tontos de los presentadores. Estaba constantemente saltando de una estación a otra. Me gusta Spotify y Yandex.Música. Pero la pena es que no funcionan en mi país. Me gustaría poder escucharlos a través del receptor de internet.

Recordé mi infancia. Tenía una grabadora y un par de docenas de casetes. Cambiaba casetes con amigos. Era maravilloso. Decidí que debía hacer streaming de mis archivos de audio solo en el receptor de internet. Por supuesto, hay una opción de conectar un reproductor de audio o un iPod a los altavoces y no complicarse. ¡Pero ese no es nuestro camino! Odio conectar cables :)

Comencé a buscar soluciones listas. En el mercado hay una oferta para crear tu propia radio de internet en Radio-Tochka.com. Lo probé durante 5 días. Todo funcionó perfectamente con mi receptor de internet. Pero el precio resultó poco atractivo para mí. Así que decidí no optar por esa opción.

Tengo un hosting contratado de 10 GB. Decidí escribir un script en algún lenguaje para hacer streaming del audio de mis archivos mp3. Opté por PHP. Lo escribí rápidamente y lo ejecuté. ¡Todo funcionó! Pero unos días después, recibí un correo del administrador del hosting. Decía que había superado el límite de minutos de CPU y que necesitaba pasar a un plan superior. Tuve que eliminar el script y renunciar a esa opción.

¿Cómo es posible? No puedo vivir sin radio. Si no permiten ejecutar scripts en un hosting ajeno, entonces necesito mi propio servidor. Donde podré hacer lo que mi alma desee.

Tengo un laptop antiguo que se encuentra sin batería (CPU — 900 MHz, RAM — 512 Mb). El viejo ya tiene 11 años. Para servidor es más que suficiente. Instalo Ubuntu 12.04. Luego instalo Apache2 y php 5.3, samba. Mi servidor está listo.

Decidí probar Icecast. Leí muchas guías al respecto. Pero me pareció complicado. Así que opté por volver a la opción del script en PHP. Pasé un par de días depurando este script. Y todo funcionó a la perfección. Luego escribí un script para reproducir podcasts. Y me gustó tanto que decidí hacer un pequeño proyecto. Lo llamé IWScast. Lo subí a GitHub..

Tu propia radio por Internet

Todo es muy simple. Los archivos mp3 y el archivo index.php los copio en la carpeta raíz de Apache /var/www/ y se reproducen aleatoriamente. Aproximadamente 300 canciones son suficientes para todo el día.
El archivo index.php es el script en sí. El script lee todos los nombres de los archivos mp3 en el directorio en un array. Crea un flujo de audio y asigna los nombres de los archivos mp3. Hay momentos en que escuchas una canción y te gusta. Piensas, ¿quién la canta? Para ese caso, hay un registro de los títulos de las pistas escuchadas en el log log.txt.
Código completo del script.

<?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: tu nombre");
header("icy-description: tu descripción"); 
$files = glob("*.mp3");
shuffle($files); //Aleatorio encendido

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
//Guardar en log 
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Canción - ' . $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 se necesita que las pistas se reproduzcan en orden, es necesario comentar la línea en index.php.

shuffle($files); //Aleatorio encendido

Para los podcasts utilizo /var/www/podcast/. Allí hay otro script index.php. En él se registra los episodios de los podcasts. En la próxima vez que se encienda el receptor de Internet, se reproduce el siguiente episodio del podcast. También hay un registro de los episodios reproducidos.
En el archivo counter.dat se puede indicar el número del episodio y desde ahí comenzará la reproducción de los podcasts.

Escribí un parser para descargar automáticamente podcasts. Toma de RSS los 4 últimos temas y los descarga. Todo funciona maravillosamente en smartphones, dispositivos IPTV y en el navegador.

Recientemente, por la mañana, se me ocurrió que sería genial recordar la posición de reproducción en la pista. Pero todavía no sé cómo hacerlo en PHP.

Puedes descargar el script github.com/iwsys/IWScast

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster