Propriul radio pe internet

Multora dintre noi ne place să asculte radioul dimineața. Și apoi, într-o bună dimineață, mi-am dat seama că nu vreau să ascult posturile de radio FM locale. Nu sunt interesat. Dar obiceiul s-a dovedit a fi dăunător. Și am decis să înlocuiesc receptorul FM cu un receptor de internet. Am cumpărat rapid piese de pe Aliexpress și am asamblat un receptor de internet.

Despre receptorul de internet. Inima receptorului este microcontrolerul ESP32. Firmware de la KA-radio. Piesele m-au costat 12 dolari. Ușurința de asamblare mi-a permis să-l montez în câteva zile. Funcționează bine și stabil. În 10 luni de muncă, a înghețat doar de câteva ori și apoi numai din cauza experimentelor mele. O interfață convenabilă și bine gândită vă permite să controlați de pe un smartphone și computer. Într-un cuvânt, acesta este un receptor de internet minunat.

Totul este in regula. Dar într-o dimineață devreme am ajuns la concluzia că, deși aveam acces la zeci de mii de posturi de radio, nu existau posturi interesante. M-au enervat reclamele si glumele stupide ale prezentatorilor. Sărind constant de la o stație la alta. Îmi plac Spotify și Yandex.Music. Dar lucrul trist este că nu lucrează în țara mea. Și aș dori să le ascult prin receptorul de internet.

Mi-am amintit de copilăria mea. Aveam un magnetofon și două duzini de casete. Am schimbat casetele cu prietenii. Și a fost minunat. Am decis că trebuie să-mi transmit în flux arhivele audio numai către un receptor de internet. Desigur, există o opțiune de a conecta un player audio sau iPod la difuzoare și nu vă faceți griji. Dar aceasta nu este calea noastră! Urăsc conectarea conectorilor)

Am început să caut soluții gata făcute. Există o ofertă pe piață pentru a vă crea propriul radio pe Internet de la Radio-Tochka.com. L-am testat timp de 5 zile. Totul a funcționat bine cu receptorul meu de internet. Dar prețul nu a fost atractiv pentru mine. Am refuzat această opțiune.

Am plătit găzduire 10 GB. Am decis să scriu un script pentru ceva care să transmită fluxul audio al fișierelor mele mp3. Am decis să-l scriu în PHP. Am scris-o repede și l-am lansat. Totul a funcționat. A fost misto! Dar câteva zile mai târziu am primit o scrisoare de la administrația gazdă. S-a spus că limita de minute de procesor a fost depășită și necesitatea upgrade-ului la un tarif mai mare. Scriptul a trebuit să fie șters și această opțiune abandonată.

Cum s-a întâmplat? Nu pot trăi fără radio. Dacă nu vă permit să rulați scriptul pe găzduirea altcuiva, atunci aveți nevoie de propriul dvs. server. Unde voi face ce-mi dorește sufletul.

Am un netbook vechi fără baterie (CPU - 900 MHz, RAM - 512 Mb). Bătrânul are deja 11 ani. Potrivit pentru un server. Eu instalez Ubuntu 12.04. Apoi instalez Apache2 și php 5.3, samba. Serverul meu este gata.

Am decis să încerc Icecast. Am citit mult mana pe el. Dar mi s-a părut greu. Și am decis să revin la opțiunea cu un script PHP. Au fost petrecute câteva zile depanând acest script. Și totul a funcționat grozav. Apoi am scris și un scenariu pentru a reda podcasturi. Și mi-a plăcut atât de mult încât am decis să fac un mic proiect. L-a numit IWScast. Postat pe github.

Propriul radio pe internet

Totul este foarte simplu. Copiez fișierele mp3 și fișierul index.php în folderul rădăcină Apache /var/www/ și sunt redate aleatoriu. Aproximativ 300 de melodii sunt suficiente pentru aproximativ întreaga zi.
Fișierul index.php este scriptul în sine. Scriptul citește toate numele fișierelor MP3 dintr-un director într-o matrice. Creează un flux audio și înlocuiește numele fișierelor MP3. Sunt momente când asculți o melodie și îți place. Cine crezi că cântă? Pentru un astfel de caz, există o înregistrare a numelor pieselor ascultate în jurnalul log.txt
Cod script 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: 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);
}
?>

Dacă aveți nevoie ca piesele să fie redate în ordine, atunci trebuie să comentați rândul în index.php

shuffle($files); //Random on

Pentru podcasturi folosesc /var/www/podcast/ Există un alt script index.php. Are memorare piese podcast. Data viitoare când porniți receptorul de internet, va fi redată următoarea melodie de podcast. Există, de asemenea, un jurnal al melodiilor redate.
În fișierul counter.dat, puteți specifica numărul piesei și redarea podcastului va începe de la acesta.

Am scris analizoare pentru descărcarea automată a podcas-urilor. Preia cele mai recente 4 piese din RSS și le descarcă. Toate acestea funcționează excelent pe un smartphone, un set-top box IPTV sau într-un browser.

Dimineața trecută mi-a trecut prin minte că ar fi grozav să-mi amintesc poziția de redare pe o piesă. Dar nu știu încă cum să fac asta în PHP.

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

Sursa: www.habr.com

Adauga un comentariu