Radio-ul meu pe internet

Mulți dintre noi iubesc să asculte radio dimineața. Și, într-o dimineață frumoasă, mi-am dat seama că nu mai vreau să ascult stațiile FM locale. Nu mă interesează. Dar obiceiul s-a dovedit a fi dăunător. Așa că am decis să-mi înlocuiesc receptorul FM cu unul de internet. Am cumpărat rapid piesele de pe AliExpress și am construit un receptor de internet.

Despre receptorul de internet. Inima receptorului este microcontrollerul ESP32. Firmware de la KA-radio. Costul pieselor m-a costat 12 dolari. Ușurința asamblării m-a făcut să-l construiesc în câteva zile. Funcționează bine și stabil. În 10 luni de utilizare, a fost blocat doar de câteva ori și asta doar din cauza experimentelor mele. Interfața convenabilă și bine gândită permite controlul de pe telefonul mobil și computer. Pe scurt, este un receptor de internet minunat.

Totul este grozav. Dar într-o dimineață devreme, am ajuns la concluzia că, având acces la zeci de mii de stații de radio, nu există stații interesante. Publicitatea mă deranja, glumele proaste ale prezentatorilor. Sărutam constant de pe o stație pe alta. Îmi place Spotify și Yandex.Muzika. Dar tristețea este că nu funcționează în țara mea. Și mi-ar plăcea să le ascult prin receptorul de internet.

Mi-am amintit de copilăria mea. Aveam un magnetofon și douăzeci de casete. Schimbam casetele cu prietenii. Și era minunat. Am decis că trebuie să fac streaming cu arhivele mele audio doar pe receptorul de internet. Desigur, există opțiunea de a conecta un player audio sau un iPod la difuzoare și a nu-mi face griji. Dar nu acesta este calea noastră! Urăsc să conectez jack-uri)

Am început să caut soluții gata făcute. Pe piață există o ofertă de a crea propriul radiou de internet de la Radio-Tochka.com. Am testat timp de 5 zile. Cu receptorul meu de internet, totul a funcționat perfect. Dar prețul s-a dovedit a fi neatractiv pentru mine. Am renunțat la această opțiune.

Am un hosting plătit de 10 GB. Am decis să scriu un script pe ceva pentru a avea streaming audio al fișierelor mele mp3. Am decis să-l scriu în PHP. L-am scris rapid și l-am lansat. Totul a funcționat. A fost grozav! Dar după câteva zile am primit un e-mail de la administrația de hosting. În el se spunea despre depășirea limitei de minute procesor și necesitatea de a trece la un tarif mai mare. A trebuit să șterg scriptul și să renunț la această opțiune.

Cum așa? Nu pot trăi fără radio. Dacă nu pot rula un script pe un alt hosting, atunci e necesar să am propriul server. Acolo voi face ceea ce îmi dorește sufletul.

Am un netbook vechi care stă fără baterie (CPU – 900 MHz, RAM – 512 Mb). Are deja 11 ani. Este perfect pentru un server. Voi instala Ubuntu 12.04. Apoi voi instala Apache2 și php 5.3, samba. Serverul meu este gata.

Am decis să încerc Icecast. Am citit multe manuale despre el. Dar mi s-a părut complicat. Așa că am decis să revin la varianta cu scriptul PHP. Am petrecut câteva zile pentru a face debugging pe acest script. Și totul a funcționat perfect. Apoi am scris un script pentru redarea podcasturilor. Atât de mult mi-a plăcut, încât am decis să fac un mic proiect. L-am numit IWScast. L-am publicat pe github..

Radio-ul meu pe internet

Totul este foarte simplu. Fișierele mp3 și fișierul index.php le copiez în folderul rădăcină al apache-ului /var/www/ și se redau aleatoriu. Aproape 300 de melodii ajung pentru întreaga zi.
Fișierul index.php este de fapt scriptul. Scriptul citește toate numele fișierelor mp3 din director într-un array. Crează un flux audio și introduce numele fișierelor mp3. Există momente când asculți o melodie și îți place. Te gândești, cine o cântă? Într-un astfel de caz, există o înregistrare a titlurilor pieselor ascultate în log log.txt.
Codul scriptului complet

<?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: numele tău");
header("icy-description: descrierea ta"); 
$files = glob("*.mp3");
shuffle($files); //Random on

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

Dacă vrei ca piesele să fie redate în ordinea lor, trebuie să comentezi linia din index.php.

shuffle($files); //Random on

Pentru podcasturi folosesc /var/www/podcast/. Acolo se află un alt script index.php. În el există o funcționalitate de salvare a pieselor podcasturilor. La următoarea pornire a receptorului de internet, se va reda următoarea piesă a podcastului. De asemenea, există un log al pieselor redate.
În fișierul counter.dat poți specifica numărul piesei și de acolo va începe redarea podcasturilor.

Am scris parsere pentru descărcarea automată a podcasturilor. Acesta preia din RSS ultimele 4 piese și le descarcă. Totul funcționează minunat pe smartphone, pe set-top box IPTV, în browser.

Recent, într-o dimineață, mi-a venit ideea că ar fi minunat să implementăm salvarea poziției de redare pe piesă. Dar nu știu încă cum să fac acest lucru în PHP.

Scriptul poate fi descărcat github.com/iwsys/IWScast

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster