Ihr eigenes Internetradio

Viele von uns hören morgens gerne Radio. Und dann wurde mir eines schönen Morgens klar, dass ich keine lokalen UKW-Radiosender hören wollte. Nicht interessant. Aber die Angewohnheit erwies sich als schädlich. Und ich beschloss, den FM-Empfänger durch einen Internet-Empfänger zu ersetzen. Ich kaufte schnell Teile bei Aliexpress und baute einen Internetempfänger zusammen.

Über den Internet-Receiver. Das Herzstück des Empfängers ist der ESP32-Mikrocontroller. Firmware von KA-Radio. Die Teile haben mich 12 $ gekostet. Dank der einfachen Montage konnte ich es in ein paar Tagen zusammenbauen. Funktioniert gut und stabil. In 10 Monaten Arbeit fror es nur ein paar Mal ein, und das nur aufgrund meiner Experimente. Eine praktische und durchdachte Benutzeroberfläche ermöglicht die Steuerung über ein Smartphone und einen Computer. Mit einem Wort, dies ist ein wunderbarer Internet-Receiver.

Alles ist in Ordnung. Doch eines frühen Morgens kam ich zu dem Schluss, dass es trotz Zugang zu Zehntausenden von Radiosendern keine interessanten Sender gab. Mich haben die Werbung und die dummen Witze der Moderatoren genervt. Ständiges Springen von einer Station zur anderen. Ich mag Spotify und Yandex.Music. Aber das Traurige ist, dass sie in meinem Land nicht funktionieren. Und ich würde sie gerne über den Internet-Receiver hören.

Ich erinnerte mich an meine Kindheit. Ich hatte ein Tonbandgerät und zwei Dutzend Kassetten. Ich habe mit Freunden Kassetten getauscht. Und es war wunderbar. Ich entschied, dass ich meine Audioarchive nur auf einen Internet-Receiver streamen musste. Natürlich besteht die Möglichkeit, einen Audioplayer oder iPod an die Lautsprecher anzuschließen, ohne sich Sorgen machen zu müssen. Aber das ist nicht unser Weg! Ich hasse es, Steckverbinder anzuschließen)

Ich fing an, nach vorgefertigten Lösungen zu suchen. Auf dem Markt gibt es ein Angebot, ein eigenes Internetradio von Radio-Tochka.com zu erstellen. Ich habe es 5 Tage lang getestet. Mit meinem Internet-Receiver hat alles einwandfrei funktioniert. Aber der Preis war für mich nicht attraktiv. Ich habe diese Option abgelehnt.

Ich habe für das Hosting 10 GB bezahlt. Ich beschloss, ein Skript für etwas zu schreiben, das den Audiostream meiner MP3-Dateien streamen würde. Ich habe beschlossen, es in PHP zu schreiben. Ich habe es schnell geschrieben und gestartet. Alles hat funktioniert. Es war cool! Doch ein paar Tage später erhielt ich einen Brief von der Hosting-Administration. Darin hieß es, dass das Limit der Prozessorminuten überschritten sei und ein Upgrade auf einen höheren Tarif erforderlich sei. Das Skript musste gelöscht und diese Option aufgegeben werden.

Wie ist es passiert? Ohne Radio kann ich nicht leben. Wenn Ihnen die Ausführung des Skripts auf dem Hosting einer anderen Person nicht gestattet ist, benötigen Sie einen eigenen Server. Wo ich tun werde, was meine Seele begehrt.

Ich habe ein altes Netbook ohne Akku (CPU – 900 MHz, RAM – 512 MB). Der alte Mann ist bereits 11 Jahre alt. Geeignet für einen Server. Ich installiere Ubuntu 12.04. Dann installiere ich Apache2 und PHP 5.3, Samba. Mein Server ist bereit.

Ich habe beschlossen, Icecast auszuprobieren. Ich habe viel Mana darauf gelesen. Aber ich fand es schwierig. Und ich beschloss, mit einem PHP-Skript zur Option zurückzukehren. Es wurden einige Tage damit verbracht, dieses Skript zu debuggen. Und alles hat super funktioniert. Dann habe ich auch ein Skript geschrieben, um Podcasts abzuspielen. Und es gefiel mir so gut, dass ich beschloss, ein kleines Projekt zu machen. Habe es IWScast genannt. Gepostet auf Github.

Ihr eigenes Internetradio

Alles ist sehr einfach. Ich kopiere die MP3-Dateien und die Datei index.php in den Apache-Stammordner /var/www/ und sie werden zufällig abgespielt. Etwa 300 Lieder reichen für ungefähr den ganzen Tag.
Die Datei index.php ist das Skript selbst. Das Skript liest alle Namen von MP3-Dateien in einem Verzeichnis in ein Array. Erstellt einen Audiostream und ersetzt die Namen von MP3-Dateien. Es gibt Zeiten, in denen man ein Lied hört und es einem gefällt. Wer singt Ihrer Meinung nach? Für einen solchen Fall gibt es eine Aufzeichnung der Namen der gehörten Titel im Protokoll log.txt
Vollständiger Skriptcode

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

Wenn Sie möchten, dass die Titel der Reihe nach abgespielt werden, müssen Sie die Zeile in index.php auskommentieren

shuffle($files); //Random on

Für Podcasts verwende ich /var/www/podcast/. Es gibt ein weiteres Skript index.php. Es verfügt über die Speicherung von Podcast-Titeln. Wenn Sie den Internet-Receiver das nächste Mal einschalten, wird der nächste Podcast-Titel abgespielt. Es gibt auch ein Protokoll der gespielten Titel.
In der Datei counter.dat können Sie die Titelnummer angeben und die Podcast-Wiedergabe beginnt damit.

Ich habe Parser für das automatische Herunterladen von Podcasts geschrieben. Es übernimmt die neuesten 4 Titel von RSS und lädt sie herunter. All dies funktioniert hervorragend auf einem Smartphone, einer IPTV-Set-Top-Box oder in einem Browser.

Neulich kam mir der Gedanke, dass es toll wäre, sich die Wiedergabeposition auf einem Titel zu merken. Aber ich weiß noch nicht, wie man das in PHP macht.

Das Skript kann heruntergeladen werden github.com/iwsys/IWScast

Source: habr.com

Kommentar hinzufügen