Eigener Internet-Radiosender

Viele von uns hören morgens gerne Radio. Doch eines schönen Morgens stellte ich fest, dass ich keine lokalen FM-Radiosender mehr hören wollte. Es war uninteressant. Aber die Gewohnheit war schädlich. Also beschloss ich, mein FM-Radio durch einen Internetempfänger zu ersetzen. Schnell kaufte ich die Teile bei AliExpress und baute einen Internetempfänger zusammen.

Über den Internetempfänger. Das Herz des Empfangsgeräts ist der Mikrocontroller ESP32. Die Firmware stammt von KA-radio. Die Kosten für die Teile beliefen sich auf 12 Dollar. Die Einfachheit des Zusammenbaus ermöglichte es mir, ihn in ein paar Tagen zusammenzubauen. Er funktioniert gut und stabil. In 10 Monaten Betrieb ist er nur ein paar Mal abgestürzt, und zwar nur wegen meiner Experimente. Eine praktische und durchdachte Benutzeroberfläche ermöglicht die Steuerung über Smartphone und Computer. Mit einem Wort, es ist ein wunderbarer Internetempfänger.

Alles ist toll. Aber an einem frühen Morgen kam ich zu dem Schluss, dass es bei Zugang zu Tausenden von Radiosendern keine interessanten Sender gibt. Die Werbung und die dummen Witze der Moderatoren nervten mich. Ich sprengte ständig von einem Sender zum anderen. Ich mag Spotify und Yandex.Musik. Aber das Problem ist, dass sie in meinem Land nicht funktionieren. Ich würde sie gerne über den Internetempfänger hören.

Ich erinnerte mich an meine Kindheit. Ich hatte einen Kassettenrekorder und zwei Dutzend Kassetten. Ich tauschte Kassetten mit Freunden aus. Es war wunderbar. Ich beschloss, meine Audioarchive nur für den Internetempfänger zu streamen. Natürlich gibt es die Möglichkeit, einen Audioplayer oder iPod an die Lautsprecher anzuschließen und sich keine Gedanken zu machen. Aber das ist nicht unser Weg! Ich hasse es, Anschlüsse anzuschließen.)

Ich begann nach fertigen Lösungen zu suchen. Auf dem Markt gibt es ein Angebot, ein eigenes Internetradio von Radio-Tochka.com zu erstellen. Ich testete es 5 Tage lang. Mit meinem Internetempfänger funktionierte alles hervorragend. Aber der Preis war für mich unattraktiv. Ich lehnte diese Option ab.

Ich habe ein bezahltes Hosting von 10 GB. Ich entschied mich, ein Skript in einer Programmiersprache zu schreiben, um den Audio-Stream meiner MP3-Dateien zu streamen. Ich entschied mich für PHP. Ich schrieb es schnell und startete es. Alles funktionierte. Es war großartig! Aber nach ein paar Tagen erhielt ich einen Brief von der Hosting-Verwaltung. Darin wurde von einer Überschreitung der Prozessor-Minuten und der Notwendigkeit berichtet, auf einen höheren Tarif umzusteigen. Ich musste das Skript löschen und diese Option ablehnen.

Wie kann das sein? Ich kann nicht ohne Radio leben. Wenn ich das Skript auf einem fremden Host nicht ausführen kann, benötige ich meinen eigenen Server. Wo ich das tun kann, was meine Seele begehrt.

Ich habe ein altes Netbook ohne Akku (CPU - 900 MHz, RAM - 512 Mb). Der alte Knabe ist schon 11 Jahre alt. Dafür sollte er als Server gut geeignet sein. 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 darüber gelesen. Aber es erschien mir kompliziert. Und ich entschied mich, zum PHP-Skripten zurückzukehren. Einige Tage habe ich mit der Fehlersuche in diesem Skript verbracht. Und alles lief wunderbar. Dann habe ich ein Skript zum Abspielen von Podcasts geschrieben. Es hat mir so gut gefallen, dass ich beschlossen habe, ein kleines Projekt zu erstellen. Ich nannte es IWScast. Ich habe es auf GitHub veröffentlicht..

Eigener Internet-Radiosender

Alles ist ganz einfach. Ich kopiere die mp3-Dateien und die Datei index.php in das Stammverzeichnis von Apache /var/www/ und sie werden zufällig abgespielt. Etwa 300 Lieder reichen für den ganzen Tag.
Die Datei index.php ist das Skript selbst. Das Skript liest alle Namen der mp3-Dateien im Verzeichnis in ein Array ein. Es erstellt einen Audio-Stream und fügt die Namen der mp3-Dateien ein. Manchmal hört man ein Lied und es gefällt einem. Man denkt, wer das singt? Für diesen Fall wird der Titel der gehörten Titel im Log file_log.txt aufgezeichnet.
Der vollständige Code des Skripts

<?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: dein name");
header("icy-description: deine beschreibung"); 
$files = glob("*.mp3");
shuffle($files); //Zufällig ein

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header' =>"Accept-language: de"
       )
     )
   );
//In Log speichern 
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Lied - ' . $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 die Tracks in der Reihenfolge abgespielt werden sollen, ist es notwendig, die Zeile in index.php auszukommentieren

shuffle($files); //Zufällig ein

Für Podcasts benutze ich /var/www/podcast/. Dort gibt es ein anderes Skript index.php. Darin wird der Verlauf der Podcast-Titel gespeichert. Beim nächsten Einschalten des Internetradios wird der nächste Podcast-Titel abgespielt. Es gibt auch ein Log der abgespielten Titel.
In der Datei counter.dat kann man die Nummer des Titels angeben, und von dort wird das Abspielen der Podcasts beginnen.

Ich habe Parser für das automatische Herunterladen von Podcasts geschrieben. Er nimmt die letzten 4 Tracks aus dem RSS und lädt sie herunter. Das funktioniert alles wunderbar auf Smartphones, IPTV-Boxen und im Browser.

Vor kurzem kam mir morgens der Gedanke, dass es großartig wäre, die Wiedergabeposition auf dem Track zu speichern. Aber ich weiß noch nicht, wie ich das mit PHP umsetzen kann.

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

Quelle: habr.com

60GB SSD 8Gb DDR4