Minha rádio na internet

Muitos de nós gostam de ouvir rádio pela manhã. E numa bela manhã, percebi que não queria ouvir as estações de rádio FM locais. Não era interessante. Mas o hábito se tornou prejudicial. Decidi então substituir o rádio FM por um receptor de internet. Comprei rapidamente as peças no AliExpress e montei o receptor de internet.

Sobre o receptor de internet. O coração do receptor é o microcontrolador ESP32. O firmware é da KA-radio. O custo das peças foi de 12 dólares. A simplicidade da montagem me permitiu construí-lo em alguns dias. Funciona bem e de forma estável. Em 10 meses de uso, travou apenas algumas vezes e isso só por causa das minhas experiências. A interface conveniente e bem projetada permite o controle via smartphone e computador. Em uma palavra, é um ótimo receptor de internet.

Tudo é ótimo. Mas numa manhã cedo, cheguei à conclusão de que, com acesso a milhares de estações de rádio, não havia estações interessantes. A publicidade e as piadas sem graça dos locutores me irritavam. Eu pulava de uma estação para outra. Gosto do Spotify e do Yandex.Música. Mas a tristeza é que eles não funcionam no meu país. Eu gostaria de ouvi-los através do receptor de internet.

Lembrei da minha infância. Eu tinha um gravador e duas dúzias de fitas cassete. Eu trocava fitas com amigos. E era maravilhoso. Decidi que deveria fazer streaming dos meus arquivos de áudio apenas no receptor de internet. Claro, há a opção de conectar um reprodutor de áudio ou iPod às caixas de som e não se preocupar. Mas esse não é nosso caminho! Odeio conectar cabos)

Comecei a buscar soluções prontas. No mercado, há uma oferta para criar sua própria rádio na Radio-Tochka.com. Testei por 5 dias. Com meu receptor de internet, tudo funcionou perfeitamente. Mas o preço não era atraente para mim. Desisti dessa opção.

Eu tenho uma hospedagem paga de 10 GB. Decidi escrever um script em alguma linguagem para fazer streaming do áudio dos meus arquivos mp3. Resolvi escrever em PHP. Escrevi rapidamente e coloquei para funcionar. Tudo funcionou. Foi ótimo! Mas depois de alguns dias, recebi uma carta da administração da hospedagem. Ela informava sobre o excesso do limite de minutos de CPU e a necessidade de mudar para um plano superior. Tive que deletar o script e desistir dessa opção.

Como assim? Não consigo viver sem rádio. Se não posso rodar o script em outro host, é melhor ter meu próprio servidor. Onde eu poderei fazer o que minha alma deseja.

Eu tenho um notebook antigo sem bateria (CPU — 900 MHz, RAM — 512 Mb). O velho já tem 11 anos. É perfeito para um servidor. Vou instalar o Ubuntu 12.04. Depois, instalo o Apache2 e o PHP 5.3, samba. Meu servidor está pronto.

Decidi experimentar o Icecast. Li bastante documentação sobre ele. Mas me pareceu complicado. Então, decidi voltar à opção do script em PHP. Passei alguns dias depurando esse script. E tudo funcionou muito bem. Depois, escrevi um script para reprodução de podcasts. E gostei tanto que decidi fazer um pequeno projeto. Nomeei de IWScast. Postei no github.

Minha rádio na internet

É tudo muito simples. Copio os arquivos mp3 e o arquivo index.php para a pasta raiz do apache /var/www/ e eles são reproduzidos aleatoriamente. Cerca de 300 músicas são suficientes para o dia todo.
O arquivo index.php é o próprio script. O script lê todos os nomes dos arquivos mp3 do diretório em um array. Cria um fluxo de áudio e insere os nomes dos arquivos mp3. Às vezes, enquanto ouço uma música e gosto dela, me pergunto: quem está cantando? Para isso, há um registro dos títulos das faixas ouvidas no log log.txt
O código do 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: seu nome");
header("icy-description: sua descrição"); 
$files = glob("*.mp3");
shuffle($files); //Aleatório ativado

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
//Salvar no log
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Música - ' . $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 precisar que as faixas sejam reproduzidas em ordem, deve-se comentar a linha no index.php

shuffle($files); //Aleatório ativado

Para podcasts, uso /var/www/podcast/. Lá tem um script diferente, index.php. Nele, há um registro dos episódios dos podcasts. Na próxima vez que o rádio for ligado, ele reproduz o próximo episódio do podcast. Também há um log das faixas reproduzidas.
No arquivo counter.dat, pode-se especificar o número do episódio e a reprodução dos podcasts começará a partir dele.

Criei parsers para o download automático de podcasts. Ele pega os 4 últimos episódios do RSS e os baixa. Tudo isso funciona perfeitamente em smartphones, dispositivos IPTV e navegadores.

Recentemente, tive uma ideia de que seria ótimo memorizar a posição de reprodução em um episódio. Mas ainda não sei como fazer isso em PHP.

O script pode ser baixado github.com/iwsys/IWScast

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster