Saját internetes rádióm

Sokan reggelente szívesen hallgatunk rádiót. Egy szép reggelen viszont rájöttem, hogy nem akarom hallgatni a helyi FM rádióállomásokat. Unalmas. De a szokásom károsnak bizonyult. Így úgy döntöttem, hogy az FM vevőt internetes vevőre cserélem. Gyorsan megvettem a szükséges alkatrészeket AliExpressen, és összeszereltem az internetes vevőt.

Az internetes vevőről. A vevő szíve az ESP32 mikrokontroller. A firmware a KA-radio-tól származik. Az alkatrészek összköltsége 12 dollár volt. Az egyszerű összeszerelés lehetővé tette, hogy pár nap alatt elkészüljek vele. Jól és stabilan működik. 10 hónap alatt csak párszor fagyott le, és az is csak a kísérleteim miatt. A jól átgondolt felhasználói felület lehetővé teszi a kezelést okostelefonon és számítógépen is. Egyszóval, ez egy csodálatos internetes vevő.

Minden szuper. De egy korai reggel arra a következtetésre jutottam, hogy a több ezer rádióállomás ellenére nincs érdekes adó. Idegesített a reklám, és a műsorvezetők buta viccei. Folyamatosan ugráltam egyik állomásról a másikra. Szeretem a Spotify-t és a Yandex.Music-ot. De sajnos ezek az országomban nem elérhetők. Szeretném őket hallgatni az internetes vevőn.

Eszembe jutott a gyerekkorom. Volt egy magnóm és huszonkét kazettám. Megosztottam a kazettákat a barátaimmal. Csodálatos volt. Úgy döntöttem, hogy az audioarchívumaimat csak az internetes vevőn szeretném streamelni. Persze, van lehetőség csatlakoztatni egy audioplayer-t vagy iPod-ot a hangszórókhoz és nem törődni semmivel. De ez nem a mi utunk! Utálom a kábelek csatlakoztatását.)

Elkezdtem keresni a kész megoldásokat. A piacon van lehetőség saját internetes rádió indítására a Radio-Tochka.com-tól. 5 napig teszteltem. Az internetes vevőmmel minden jól működött. De az ára számomra nem volt vonzó. Így elvetettem ezt a lehetőséget.

Van egy 10 GB-os előfizetett tárhelyem. Döntöttem, hogy írok egy szkriptet valamilyen nyelven, ami lehetővé teszi az MP3 fájljaim audio streamelését. PHP nyelven írtam. Gyorsan megírtam és elindítottam. Minden működött. Klassz volt! De pár nap elteltével egy levelet kaptam a tárhelyszolgáltató adminisztrációjától. Ebben arról értesítettek, hogy túlléptem a processzorláb perc limitet, és szükséges átállnom egy magasabb díjszabásra. A szkriptet el kellett távolítanom, és elvetettem ezt a lehetőséget.

Hogy lehet ez? Nem tudok élni rádió nélkül. Ha nem engedik, hogy egy külső hoszton futtassak szkriptet, akkor szükségem van a saját szerveremre. Hol tudom megtenni azt, amit a lelkem kíván.

Van egy régi netbookom, amely akkumulátor nélkül hever (CPU — 900 MHz, RAM — 512 Mb). Már 11 éves. Kiválóan alkalmas egy szervernek. Telepítem az Ubuntu 12.04-et. Ezután telepítem az Apache2-t és a php 5.3-at, valamint a sambát. A szerverem készen áll.

Úgy döntöttem, hogy kipróbálom az Icecast-ot. Sok kézikönyvet olvastam róla. De nekem bonyolultnak tűnt. Ezért úgy döntöttem, hogy visszatérek a PHP-szkripthez. Pár napot töltöttem a szkript hibakeresésével. És minden nagyszerűen működött. Ezután írtam egy szkriptet a podcastok lejátszásához. Olyan tetszett, hogy úgy döntöttem, készítek egy kis projektet. IWScast-nak neveztem el. F feltöltöttem a github-ra..

Saját internetes rádióm

Minden nagyon egyszerű. Az mp3 fájlokat és az index.php file-t a Apache gyökérmappájába másolom /var/www/ mappába, és azok véletlenszerűen lejátszásra kerülnek. Körülbelül 300 dal elegendő egy napra.
Az index.php a szkript maga. A szkript beolvassa az mp3 fájlok nevét a mappából egy tömbbe. Létrehoz egy audio folyamatot és beilleszti az mp3 fájlok nevét. Vannak pillanatok, amikor hallgatsz egy dalt és tetszik, és gondolkodsz, hogy ki énekel? Ilyen esetekre van egy bejegyzés a hallgatott számok neveivel a log.log.txt fájlban.
A szkript teljes kódja.

<?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); // Véletlenszerű

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header'=>'Accept-language: enrn'
       )
     )
   );
// Mentés a logba
  $fl = $filePath;
  $log = date('Y-m-d H:i:s') . ' Dal - ' . $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 a dalokat sorrendben szeretnéd lejátszani, akkor az index.php fájlban ki kell kommentálnod a sort.

shuffle($files); // Véletlenszerű

A podcastokhoz a /var/www/podcast/ mappát használom. Ott egy másik index.php szkript van. Ebben van a podcastok számainak megjegyzése. A következő internetvevő bekapcsolásakor a következő számot játssza le a podcastból. Van egy log is a lejátszott számokról.
A counter.dat fájlban megadhatod a szám számát, és onnan kezdődik a podcastok lejátszása.

Podcastek automatikus letöltésére írtam parser-eket. Az RSS-ből az utolsó 4 dalt veszi és letölti azokat. Mindez csodálatosan működik okostelefonon, IPTV set-top boxon és böngészőben.

Nemrég reggel eszembe jutott, hogy nagyszerű lenne a lejátszási pozíció megjegyzésének lehetősége a dalokon. De még nem tudom, hogyan lehetne ezt PHP-ban megvalósítani.

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

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster