Oma internetiraadio

Paljud meist armastavad hommikuti raadiot kuulata. Ühel kaunil hommikul mõistsin, et ei taha kuulata kohalikku FM-raadiot. See ei ole huvitav. Kuid harjumus oli kahjulik. Otsustasin asendada FM-vastuvõtja internetivastuvõtjaga. Kiiresti ostsin AliExpressist osad ja kokkupanin internetivastuvõtja.

Interneti vastuvõtjast. Vastuvõtja süda on mikrokontroller ESP32. Tootmisversioon KA-radio. Osade maksumus oli 12 dollarit. Kokkupanemise lihtsus võimaldas mul selle kokku panna paarikümne päevaga. Töötab hästi ja stabiilselt. 10 kuu jooksul on see kokku jooksnud vaid paar korda ja ainult minu eksperimenti tõttu. Mugav ja läbimõeldud liides võimaldab hallata nutitelefoni ja arvuti kaudu. Üks sõna - see on suurepärane internetivastuvõtja.

Kõik on suurepärane. Kuid ühel varahommikul jõudsin järeldusele, et pääsedele kümnetele tuhandetele raadiojaamadele ei ole huvitavaid jaamu. Reklaamid ja juhtide rumalad naljad ajasid mind tigedaks. Hüppasin pidevalt ühest jaamast teise. Mulle meeldib Spotify ja Yandex.Muusika. Kuid kurb on see, et need ei tööta minu riigis. Soovin neid kuulata läbi internetivastuvõtja.

Mäletan oma lapsepõlve. Mul oli magnetofon ja kaks tosinat kassetti. Vahetsin kassette sõpradega. See oli imeline. Otsustasin, et pean oma heliarhiivide striimimist internetivastuvõtjaga tegema. Loomulikult on võimalus ühendada audio mängija või iPod kõlaritega ja mitte muretseda. Kuid see ei ole meie tee! Ma vihkan pistikupesade ühendamist)

Alustasin valmis lahenduste otsimist. Turul on pakkumine luua oma internetiraadio Radio-Tochka.com-ist. Testisin 5 päeva. Minu internetivastuvõtjaga töötas kõik suurepäraselt. Kuid hind osutus minu jaoks ebaatraktiivseks. Otsustasin sellest variandist loobuda.

Mul on makstud hostimine 10 GB. Otsustasin kirjutada skripti millegi jaoks, et oleks voogesitus muude mp3 failide audio voogest. Otsustasin kirjutada PHP-s. Kiiresti kirjutasin ja käivitasin. Kõik töötas. Oli suurepärane! Kuid paar päeva hiljem sain kirja hostimise haldustelt. Kirjas öeldi, et olen ületanud protsessoriminuutide piiri ja on vajalik kõrgemale plaanile üle minna. Skript tuli kustutada ja sellest variandist loobuda.

Kuidas see nii on? Ma ei suuda elada raadiota. Kui skripti ei lubata kasutada teises hostis, siis peab olema oma server. Kus ma teen seda, mida mu hing soovib.

Mul on vana netbook, mis seisab akuta (CPU — 900 MHz, RAM — 512 Mb). Vanamees on juba 11 aastat vana. Serveriks sobib täiesti. Panen peale Ubuntu 12.04. Siis installin Apache2 ja PHP 5.3, samba. Minu server on valmis.

Otsustasin proovida Icecasti. Olen selle kohta palju lugenud. Kuid see tundus mulle keeruline. Ja otsustasin naasta PHP-skripti variandi juurde. Kulutasin paar päeva selle skripti silumisele. Ja kõik töötab suurepäraselt. Siis kirjutasin veel skripti podcastide taasesitamiseks. See meeldis mulle nii palju, et otsustasin teha väikese projekti. Nimetasin selle IWScast. Laadisin üles GitHubi.

Oma internetiraadio

Kõik on väga lihtne. MP3-failid ja fail index.php kopeerin Apache'i juurkatalooge /var/www/ ja need mängitakse suvaliselt. Umbes 300 laulu piisab terve päevaks.
Fail index.php ongi see skript. Skript loeb kõik mp3-failide nimed kataloogist massiivi. Loob audiosööti ja lisab mp3-failide nimed. On hetki, kui kuulad laul, mis meeldib. Sa mõtled, kes seda laulab? Sellise juhtumi jaoks on olemas kuulatud lugude nimede salvestamine log.txt faili.
Skripti kood täielikult

<?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); // Suvaline sisse

for ($x=0; $x array(
       'method' =>'GET',
       'header' =>'Icy-MetaData: 1',
       'header' =>"Accept-language: enrn"
       )
     )
   );
// Salvesta logisse 
  $fl = $filePath; 
  $log = date('Y-m-d H:i:s') . ' Laul - ' . $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);
}
?>

Kui on vaja, et lood mängitakse järjekorras, siis tuleb index.php failis kommenteerida rida

shuffle($files); // Suvaline sisse

Podkastide jaoks kasutan /var/www/podcast/ Seal on teine skritp index.php. Sellel on podcastide lugude talletamine. Järgmise interneti vastuvõtja käivitamisel mängitakse järgmine podcasti lugu. Samuti on olemas mängitud lugude logi.
Failis counter.dat saab määrata loo numbri ja sealt alates algab podcastide taasesitamine.

Kirjutasin skripte, et automaatselt alla laadida podcaste. See võtab RSS-ist 4 viimast lugu ja laadib need alla. Kõik töötab suurepäraselt nutitelefonis, IPTV seadmes ja brauseris.

Hiljuti tuli mul hommikul mõte, et oleks tore teha mänguasade mälestuspunkti salvestamine. Kuid ma ei tea veel, kuidas seda PHP-s teha.

Skripti saab alla laadida github.com/iwsys/IWScast

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster