Uw eigen internetradio

Velen van ons luisteren 's ochtends graag naar de radio. En toen besefte ik op een mooie ochtend dat ik niet naar lokale FM-radiostations wilde luisteren. Niet geïnteresseerd. Maar de gewoonte bleek schadelijk te zijn. En ik besloot de FM-ontvanger te vervangen door een internetontvanger. Ik kocht snel onderdelen op AliExpress en monteerde een internetontvanger.

Over de internetontvanger. Het hart van de ontvanger is de ESP32-microcontroller. Firmware van KA-radio. De onderdelen kosten mij $12. Door het gemak van de montage kon ik hem binnen een paar dagen in elkaar zetten. Werkt goed en stabiel. In de tien maanden dat ik werkte, bevroor het slechts een paar keer, en dan alleen vanwege mijn experimenten. Dankzij een handige en goed doordachte interface kunt u het apparaat bedienen vanaf een smartphone en computer. In één woord: dit is een prachtige internetontvanger.

Alles is oke. Maar op een vroege ochtend kwam ik tot de conclusie dat er, ondanks dat ik toegang had tot tienduizenden radiostations, geen interessante stations waren. Ik ergerde me aan de reclame en de domme grappen van de presentatoren. Voortdurend van het ene station naar het andere springen. Ik hou van Spotify en Yandex.Music. Maar het trieste is dat ze in mijn land niet werken. En ik wil ze graag beluisteren via de internetontvanger.

Ik herinnerde me mijn kindertijd. Ik had een bandrecorder en twintig cassettes. Ik wisselde cassettes uit met vrienden. En het was geweldig. Ik besloot dat ik mijn audioarchieven alleen naar een internetontvanger hoefde te streamen. Uiteraard is er de mogelijkheid om zonder zorgen een audiospeler of iPod op de speakers aan te sluiten. Maar dit is niet onze manier! Ik haat het aansluiten van connectoren)

Ik ging op zoek naar kant-en-klare oplossingen. Er is een aanbieding op de markt om uw eigen internetradio te maken van Radio-Tochka.com. Ik heb het 5 dagen getest. Alles werkte prima met mijn internetontvanger. Maar de prijs vond ik niet aantrekkelijk. Ik heb deze optie afgewezen.

Ik heb hosting 10 GB betaald. Ik besloot een script te schrijven voor iets dat de audiostream van mijn mp3-bestanden zou streamen. Ik besloot het in PHP te schrijven. Ik heb het snel geschreven en gelanceerd. Alles werkte. Het was cool! Maar een paar dagen later ontving ik een brief van de hostingadministratie. Er stond dat de limiet van het aantal processorminuten was overschreden en dat er moest worden geüpgraded naar een hoger tarief. Het script moest worden verwijderd en deze optie werd verlaten.

Hoe is het gebeurd? Ik kan niet leven zonder radio. Als ze je niet toestaan ​​het script op de hosting van iemand anders uit te voeren, dan heb je je eigen server nodig. Waar ik zal doen wat mijn ziel verlangt.

Ik heb een oude netbook zonder batterij (CPU - 900 MHz, RAM - 512 Mb). De oude man is al 11 jaar oud. Geschikt voor een server. Ik installeer Ubuntu 12.04. Vervolgens installeer ik Apache2 en php 5.3, samba. Mijn server is klaar.

Ik besloot Icecast te proberen. Ik lees er veel mana over. Maar ik vond het lastig. En ik besloot terug te keren naar de optie met een PHP-script. Er zijn een paar dagen besteed aan het debuggen van dit script. En alles werkte prima. Vervolgens heb ik ook een script geschreven om podcasts af te spelen. En ik vond het zo leuk dat ik besloot een klein project te doen. Ik noemde het IWScast. Geplaatst op github.

Uw eigen internetradio

Alles is heel eenvoudig. Ik kopieer de mp3-bestanden en het index.php-bestand naar de Apache-hoofdmap /var/www/ en ze worden willekeurig afgespeeld. Ongeveer 300 nummers zijn genoeg voor ongeveer de hele dag.
Het index.php-bestand is het script zelf. Het script leest alle namen van MP3-bestanden in een map in een array. Creëert een audiostream en vervangt de namen van MP3-bestanden. Er zijn momenten waarop je naar een nummer luistert en je vindt het leuk. Wie denk je dat er zingt? Voor een dergelijk geval is er een opname van de namen van de beluisterde nummers in het log log.txt
Volledige scriptcode

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

Als je wilt dat de nummers in de juiste volgorde worden afgespeeld, moet je commentaar geven op de regel in index.php

shuffle($files); //Random on

Voor podcasts gebruik ik /var/www/podcast/. Er is een ander script index.php. Het heeft het onthouden van podcasttracks. De volgende keer dat u de internetontvanger inschakelt, wordt de volgende podcasttrack afgespeeld. Er is ook een logboek met afgespeelde nummers.
In het counter.dat-bestand kunt u het tracknummer opgeven, waarna het afspelen van de podcast vanaf dat punt zal beginnen.

Schreef parsers voor het automatisch downloaden van podcasts. Het neemt de nieuwste 4 nummers van RSS en downloadt deze. Dit alles werkt prima op een smartphone, IPTV settopbox of in een browser.

Laatst bedacht ik me dat het geweldig zou zijn om de afspeelpositie van een nummer te onthouden. Maar ik weet nog niet hoe ik dit in PHP moet doen.

Het script kan worden gedownload github.com/iwsys/IWScast

Bron: www.habr.com

Voeg een reactie