Via propra interreta radio

Multaj el ni ŝatas aŭskulti la radion matene. Kaj tiam iun belan matenon mi konstatis, ke mi ne volas aŭskulti lokajn FM-radiojn. Ne interesas. Sed la kutimo montriĝis malutila. Kaj mi decidis anstataŭigi la FM-ricevilon per Interreta ricevilo. Mi rapide aĉetis partojn ĉe Aliexpress kaj kunmetis Interretan ricevilon.

Pri la Interreta ricevilo. La koro de la ricevilo estas la mikroregilo ESP32. Firmvaro de KA-radio. La partoj kostis al mi $12. La facileco de muntado permesis al mi kunmeti ĝin en kelkaj tagoj. Funkcias bone kaj stabile. En 10 monatoj da laboro, ĝi frostiĝis nur kelkajn fojojn, kaj poste nur pro miaj eksperimentoj. Oportuna kaj bone pripensita interfaco permesas vin kontroli de inteligenta telefono kaj komputilo. Unuvorte, ĉi tio estas mirinda Interreta ricevilo.

Ĉio estas en ordo. Sed unu fruan matenon mi venis al la konkludo, ke malgraŭ havi aliron al dekmiloj da radiostacioj, ne ekzistas interesaj stacioj. Min ĝenis la reklamado kaj la stultaj ŝercoj de la prezentistoj. Senĉese saltante de unu stacio al alia. Mi ŝatas Spotify kaj Yandex.Music. Sed la malĝoja afero estas, ke ili ne laboras en mia lando. Kaj mi ŝatus aŭskulti ilin per la Interreta ricevilo.

Mi rememoris mian infanaĝon. Mi havis magnetofonon kaj du dekduojn da kasedoj. Mi interŝanĝis kasedojn kun amikoj. Kaj ĝi estis mirinda. Mi decidis, ke mi bezonas elsendi miajn sonarkivojn nur al Interreta ricevilo. Kompreneble, ekzistas eblo konekti sonludilon aŭ iPod al la laŭtparoliloj kaj ne zorgi. Sed ĉi tio ne estas nia maniero! Mi malamas konekti konektilojn)

Mi komencis serĉi pretajn solvojn. Estas oferto sur la merkato por krei vian propran Interretan radion de Radio-Tochka.com. Mi provis ĝin dum 5 tagoj. Ĉio bone funkciis kun mia interreta ricevilo. Sed la prezo ne estis alloga por mi. Mi rifuzis ĉi tiun opcion.

Mi pagis gastigadon 10 GB. Mi decidis skribi skripton pri io, kiu elsendos la sonfluon de miaj mp3-dosieroj. Mi decidis skribi ĝin en PHP. Mi rapide skribis ĝin kaj lanĉis ĝin. Ĉio funkciis. Estis mojose! Sed kelkajn tagojn poste mi ricevis leteron de la gastiga administracio. Ĝi diris, ke la limo de procesoraj minutoj estis superita kaj la bezono ĝisdatigi al pli alta tarifo. La skripto devis esti forigita kaj ĉi tiu opcio forlasita.

Kiel ĝi okazis? Mi ne povas vivi sen radio. Se ili ne permesas al vi ruli la skripton en la gastigado de aliulo, tiam vi bezonas vian propran servilon. Kie mi faros tion, kion mia animo deziras.

Mi havas antikvan netbook sen baterio (CPU - 900 MHz, RAM - 512 Mb). La maljunulo jam havas 11 jarojn. Taŭga por servilo. Mi instalas Ubuntu 12.04. Poste mi instalas Apache2 kaj php 5.3, samba. Mia servilo estas preta.

Mi decidis provi Icecast. Mi legis multe da manao sur ĝi. Sed mi trovis ĝin malfacila. Kaj mi decidis reveni al la opcio per PHP-skripto. Kelkaj tagoj pasigis sencimigi ĉi tiun skripton. Kaj ĉio funkciis bonege. Poste mi ankaŭ verkis skripton por ludi podkastojn. Kaj mi tiel ŝatis ĝin, ke mi decidis fari malgrandan projekton. Nomita ĝin IWScast. Afiŝita sur github.

Via propra interreta radio

Ĉio estas tre simpla. Mi kopias la mp3-dosierojn kaj la dosieron index.php en la radikan dosierujon de Apache /var/www/ kaj ili estas luditaj hazarde. Ĉirkaŭ 300 kantoj sufiĉas por proksimume la tuta tago.
La dosiero index.php estas la skripto mem. La skripto legas ĉiujn nomojn de MP3-dosieroj en dosierujo en tabelon. Kreas sonfluon kaj anstataŭigas la nomojn de MP3-dosieroj. Estas tempoj kiam vi aŭskultas kanton kaj vi ŝatas ĝin. Kiu laŭ vi kantas? Por tia kazo, estas registrado de la nomoj de aŭskultitaj trakoj en la protokolo log.txt
Kompleta skriptokodo

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

Se vi bezonas, ke la trakoj estu luditaj en ordo, tiam vi devas komenti la linion en index.php

shuffle($files); //Random on

Por podkastoj mi uzas /var/www/podcast/ Estas alia skripto indekso.php. Ĝi havas podkastan trakon enmemorigi. La venontan fojon kiam vi ŝaltas la Interretan ricevilon, la sekva podkasta trako estas ludata. Ekzistas ankaŭ protokolo de luditaj trakoj.
En la dosiero counter.dat, vi povas specifi la numeron de trako kaj podkasta reproduktado komenciĝos de ĝi.

Verkis analizilojn por aŭtomata elŝuto de podkastoj. Ĝi prenas la plej novajn 4 trakojn de RSS kaj elŝutas ilin. Ĉio ĉi funkcias bonege en inteligenta telefono, IPTV-aparato-skatolo aŭ en retumilo.

La alian matenon venis al mi en la kapon, ke estus bonege memori la reproduktan pozicion sur trako. Sed mi ankoraŭ ne scias kiel fari tion en PHP.

La skripto estas elŝutebla github.com/iwsys/IWScast

fonto: www.habr.com

Aldoni komenton