Saját internetes rádió

Sokan szeretünk reggelente rádiót hallgatni. Aztán egy szép reggel rájöttem, hogy nem akarok helyi FM rádióállomásokat hallgatni. Nem érdekel. De a szokás károsnak bizonyult. És úgy döntöttem, hogy lecserélem az FM-vevőt egy internetes vevőre. Gyorsan vásároltam alkatrészeket az Aliexpressen, és összeállítottam egy internetes vevőt.

Az internetes vevőről. A vevő szíve az ESP32 mikrokontroller. Firmware a KA-rádióból. Az alkatrészek 12 dollárba kerültek. Az egyszerű összeszerelés lehetővé tette, hogy néhány nap alatt összeszereljem. Jól és stabilan működik. 10 hónapos munka alatt csak párszor fagyott le, aztán csak a kísérleteim miatt. A kényelmes és jól átgondolt felület lehetővé teszi az okostelefonról és számítógépről történő vezérlést. Egyszóval ez egy csodálatos internetes vevő.

Minden rendben. De egy kora reggel arra a következtetésre jutottam, hogy annak ellenére, hogy több tízezer rádióállomáshoz férek hozzá, nincsenek érdekes állomások. Idegesítettek a reklámok és a műsorvezetők hülye poénjai. Folyamatosan ugrál egyik állomásról a másikra. Szeretem a Spotify-t és a Yandex.Music-ot. De az a szomorú, hogy az én országomban nem működnek. És szeretném meghallgatni őket az internetes vevőn keresztül.

Eszembe jutott a gyerekkorom. Volt egy magnóm és két tucat kazettám. Barátokkal kazettát cseréltem. És csodálatos volt. Úgy döntöttem, hogy a hangarchívumot csak egy internetes vevőre kell továbbítanom. Természetesen van lehetőség audiolejátszó vagy iPod csatlakoztatására a hangszórókhoz, és ne aggódjon. De ez nem a mi utunk! Utálom a csatlakozókat)

Elkezdtem kész megoldásokat keresni. A piacon van egy ajánlat saját internetes rádió létrehozására a Radio-Tochka.com webhelyen. 5 napig teszteltem. Minden rendben működött az internetes vevőmmel. De az ára nem volt vonzó számomra. Elutasítottam ezt a lehetőséget.

10 GB tárhelyet fizettem. Úgy döntöttem, írok egy forgatókönyvet valamire, ami streameli az mp3 fájljaim hangfolyamát. Úgy döntöttem, hogy PHP-ben írom meg. Gyorsan megírtam és elindítottam. Minden működött. Ez király volt! De néhány nappal később levelet kaptam a fogadó adminisztrációtól. Azt mondta, hogy túllépték a processzorpercek korlátját, és magasabb tarifára kell frissíteni. A szkriptet törölni kellett, és ezt a lehetőséget el kellett hagyni.

Hogy történt? Nem tudok rádió nélkül élni. Ha nem teszik lehetővé a szkript futtatását valaki más tárhelyén, akkor saját szerverre van szüksége. Ahol azt teszem, amit a lelkem kíván.

Van egy régi netbookom akkumulátor nélkül (CPU - 900 MHz, RAM - 512 Mb). Az öreg már 11 éves. Szervernek alkalmas. Telepítem az Ubuntu 12.04-et. Aztán felteszem az Apache2-t és a php 5.3-at, a sambát. A szerverem készen áll.

Úgy döntöttem, hogy kipróbálom az Icecastot. Sok manát olvastam róla. De nehéznek találtam. És úgy döntöttem, hogy visszatérek a PHP szkripttel rendelkező opcióhoz. Néhány napot a szkript hibakeresésével töltöttek. És minden remekül működött. Aztán írtam egy forgatókönyvet is a podcastok lejátszásához. És annyira megtetszett, hogy úgy döntöttem, csinálok egy kis projektet. IWScastnak hívták. A githubon közzétéve.

Saját internetes rádió

Minden nagyon egyszerű. Az mp3 fájlokat és az index.php fájlt bemásolom az Apache /var/www/ gyökérmappájába, és véletlenszerűen lejátszanak. Körülbelül 300 dal nagyjából egész napra elegendő.
Az index.php fájl maga a szkript. A szkript beolvassa az összes MP3 fájl nevét egy könyvtárban egy tömbbe. Hangfolyamot hoz létre, és helyettesíti az MP3 fájlok neveit. Van, amikor meghallgatsz egy dalt, és tetszik. szerinted ki énekel? Ilyen esetre a napló log.txt fájljában rögzítésre kerül a meghallgatott műsorszámok neve
Teljes script kód

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

Ha sorrendben kell lejátszani a számokat, akkor az index.php-ben kommentelje ki a sort

shuffle($files); //Random on

Podcastokhoz a /var/www/podcast/ fájlt használom. Van egy másik index.php szkript. Podcast-számok memorizálásával rendelkezik. Amikor legközelebb bekapcsolja az internetes vevőt, a következő podcast műsorszám kerül lejátszásra. Van egy napló is a lejátszott számokról.
A counter.dat fájlban megadhatja a szám számát, és attól indul el a podcast lejátszás.

Elemzőket írt a podcastok automatikus letöltéséhez. Elveszi a legújabb 4 számot az RSS-ről, és letölti azokat. Mindez nagyszerűen működik okostelefonon, IPTV set-top boxon vagy böngészőben.

Másnap reggel eszembe jutott, hogy jó lenne visszaemlékezni egy szám lejátszási helyzetére. De még nem tudom, hogy kell ezt PHP-ben csinálni.

A szkript letölthető github.com/iwsys/IWScast

Forrás: will.com

Hozzászólás