Jūsų interneto radijas

Daugelis iš mūsų mėgstame klausytis radijo ryte. Ir tada vieną gražų rytą supratau, kad nenoriu klausytis vietinių FM radijo stočių. Nedomina. Tačiau įprotis pasirodė žalingas. Ir nusprendžiau FM imtuvą pakeisti interneto imtuvu. Greitai nusipirkau dalis Aliexpress ir surinkau interneto imtuvą.

Apie interneto imtuvą. Imtuvo širdis yra ESP32 mikrovaldiklis. Programinė įranga iš KA radijo. Dalys man kainavo 12 USD. Surinkimo paprastumas leido surinkti per porą dienų. Veikia gerai ir stabiliai. Per 10 darbo mėnesių užšalo vos porą kartų, o paskui tik dėl mano eksperimentų. Patogi ir gerai apgalvota sąsaja leidžia valdyti iš išmaniojo telefono ir kompiuterio. Žodžiu, tai nuostabus interneto imtuvas.

Viskas gerai. Tačiau vieną ankstyvą rytą padariau išvadą, kad nepaisant to, kad turiu prieigą prie dešimčių tūkstančių radijo stočių, nebuvo įdomių stočių. Mane erzino reklama ir kvaili vedėjų juokeliai. Nuolat šokinėja iš vienos stoties į kitą. Man patinka Spotify ir Yandex.Music. Tačiau liūdna tai, kad jie neveikia mano šalyje. Ir aš norėčiau jų klausytis per interneto imtuvą.

Prisiminiau savo vaikystę. Turėjau magnetofoną ir dvi dešimtis kasečių. Su draugais pasikeičiau kasetėmis. Ir tai buvo nuostabu. Nusprendžiau, kad garso archyvus reikia transliuoti tik į interneto imtuvą. Žinoma, yra galimybė prie garsiakalbių prijungti garso grotuvą ar iPod ir nesijaudinti. Bet tai ne mūsų kelias! Aš nekenčiu jungiamųjų jungčių)

Pradėjau ieškoti paruoštų sprendimų. Rinkoje yra pasiūlymas susikurti savo internetinį radiją iš Radio-Tochka.com. Aš išbandžiau 5 dienas. Su mano interneto imtuvu viskas veikė gerai. Bet kaina man nebuvo patraukli. Atsisakiau šio varianto.

Sumokėjau prieglobą 10 GB. Nusprendžiau parašyti scenarijų tam, kas transliuotų mano mp3 failų garso srautą. Nusprendžiau parašyti PHP. Greitai parašiau ir paleidau. Viskas veikė. Buvo šaunu! Bet po poros dienų gavau laišką iš prieglobos administracijos. Teigė, kad buvo viršytas procesoriaus minučių limitas ir poreikis pereiti prie didesnio tarifo. Scenarijus turėjo būti ištrintas ir šios parinkties atsisakyta.

Kaip tai nutiko? Negaliu gyventi be radijo. Jei jie neleidžia jums paleisti scenarijaus kieno nors kito priegloboje, jums reikia savo serverio. Kur aš darysiu tai, ko geidžia mano siela.

Turiu senovinį netbooką be baterijos (CPU – 900 MHz, RAM – 512 Mb). Senoliui jau 11 metų. Tinka serveriui. Įdiegiau Ubuntu 12.04. Tada įdiegiu Apache2 ir php 5.3, samba. Mano serveris paruoštas.

Nusprendžiau pabandyti Icecast. Perskaiciau daug mana apie tai. Bet man buvo sunku. Ir aš nusprendžiau grįžti prie parinkties su PHP scenarijumi. Pora dienų buvo praleista derinant šį scenarijų. Ir viskas veikė puikiai. Tada taip pat parašiau scenarijų podcast'ams leisti. Ir man tai taip patiko, kad nusprendžiau padaryti nedidelį projektą. Pavadinta IWScast. Paskelbta github.

Jūsų interneto radijas

Viskas labai paprasta. Nukopijuoju mp3 failus ir index.php failą į Apache šakninį aplanką /var/www/ ir jie paleidžiami atsitiktinai. Maždaug visai dienai užtenka apie 300 dainų.
Index.php failas yra pats scenarijus. Scenarijus nuskaito visus MP3 failų pavadinimus kataloge į masyvą. Sukuria garso srautą ir pakeičia MP3 failų pavadinimus. Būna atvejų, kai klausai dainos ir tau patinka. Kaip manai kas dainuoja? Tokiu atveju žurnale log.txt įrašomi klausytų takelių pavadinimai
Pilnas scenarijaus kodas

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

Jei norite, kad takeliai būtų grojami eilės tvarka, turite pakomentuoti eilutę index.php

shuffle($files); //Random on

Podcast'ams naudoju /var/www/podcast/ Yra dar vienas scenarijus index.php. Jame yra podcast takelio įsiminimas. Kitą kartą įjungus interneto imtuvą, bus grojamas kitas podcast takelis. Taip pat yra grojamų takelių žurnalas.
Faile counter.dat galite nurodyti takelio numerį ir nuo jo prasidės podcast'o atkūrimas.

Parašė analizatorius automatiniam podcast'ų atsisiuntimui. Paima naujausius 4 takelius iš RSS ir juos atsisiunčia. Visa tai puikiai veikia išmaniajame telefone, IPTV priedėlyje arba naršyklėje.

Kitą rytą man kilo mintis, kad būtų puiku prisiminti atkūrimo vietą takelyje. Bet aš dar nežinau, kaip tai padaryti PHP.

Scenarijų galima parsisiųsti github.com/iwsys/IWScast

Šaltinis: www.habr.com

Добавить комментарий