Vaš internetni radio

Mnogi od nas zjutraj radi poslušamo radio. In potem sem nekega lepega jutra ugotovil, da nočem poslušati lokalnih FM radijskih postaj. Ne zanima me. Toda razvada se je izkazala za škodljivo. In sem se odločil zamenjati FM sprejemnik z internetnim sprejemnikom. Hitro sem kupil dele na Aliexpressu in sestavil internetni sprejemnik.

O internetnem sprejemniku. Srce sprejemnika je mikrokrmilnik ESP32. Firmware iz KA-radia. Deli so me stali 12 dolarjev. Enostavnost sestavljanja mi je omogočila, da sem ga sestavil v nekaj dneh. Deluje dobro in stabilno. V 10 mesecih dela je zmrznil le nekajkrat, in to samo zaradi mojih poskusov. Priročen in dobro premišljen vmesnik vam omogoča upravljanje s pametnim telefonom in računalnikom. Z eno besedo, to je čudovit internetni sprejemnik.

Vse je OK. Toda nekega zgodnjega jutra sem prišel do zaključka, da kljub dostopu do več deset tisoč radijskih postaj ni zanimivih postaj. Jezilo me je oglašanje in neumne šale voditeljev. Nenehno skakanje z ene postaje na drugo. Všeč sta mi Spotify in Yandex.Music. Toda žalostno je, da v moji državi ne delujejo. In rad bi jih poslušal preko internetnega sprejemnika.

Spomnil sem se svojega otroštva. Imel sem magnetofon in dva ducata kaset. Izmenjal sem si kasete s prijatelji. In bilo je čudovito. Odločil sem se, da moram svoje zvočne arhive pretakati samo na internetni sprejemnik. Seveda obstaja možnost, da na zvočnike povežete avdio predvajalnik ali iPod in brez skrbi. Ampak to ni naš način! Sovražim povezovanje konektorjev)

Začel sem iskati že pripravljene rešitve. Na trgu je ponudba za ustvarjanje lastnega internetnega radia na Radio-Tochka.com. Testiral sem ga 5 dni. Z mojim internetnim sprejemnikom je vse delovalo v redu. Toda cena mi ni bila privlačna. To možnost sem zavrnil.

Imam plačano gostovanje 10 GB. Odločil sem se napisati skript o nečem, kar bi pretakalo zvočni tok mojih datotek mp3. Odločil sem se, da ga napišem v PHP. Hitro sem ga napisal in zagnal. Vse je delovalo. Bilo je kul! Toda nekaj dni kasneje sem prejel pismo uprave gostovanja. Pisalo je, da je bila omejitev procesorskih minut presežena in da je treba nadgraditi na višjo tarifo. Skript je bilo treba izbrisati in to možnost opustiti.

Kako se je to zgodilo? Brez radia ne morem živeti. Če vam ne dovolijo izvajanja skripta na gostovanju nekoga drugega, potem potrebujete svoj strežnik. Kjer bom počel, kar mi duša poželi.

Imam star netbook brez baterije (CPU - 900 MHz, RAM - 512 Mb). Starec je star že 11 let. Primerno za strežnik. Nameščam Ubuntu 12.04. Nato namestim Apache2 in php 5.3, samba. Moj strežnik je pripravljen.

Odločil sem se poskusiti Icecast. Prebral sem veliko mane o tem. Vendar mi je bilo težko. In odločil sem se, da se vrnem k možnosti s PHP skriptom. Nekaj ​​dni smo porabili za odpravljanje napak v tem skriptu. In vse je delovalo odlično. Potem sem napisal tudi scenarij za predvajanje podcastov. In bilo mi je tako všeč, da sem se odločil narediti majhen projekt. Imenoval se je IWScast. Objavljeno na githubu.

Vaš internetni radio

Vse je zelo preprosto. Datoteke mp3 in datoteko index.php kopiram v korensko mapo Apache /var/www/ in predvajajo se naključno. Približno 300 skladb zadostuje za približno cel dan.
Datoteka index.php je sam skript. Skript prebere vsa imena datotek MP3 v imeniku v polje. Ustvari zvočni tok in nadomesti imena datotek MP3. So časi, ko poslušaš pesem in ti je všeč. Kaj misliš, kdo poje? Za tak primer obstaja zapis imen poslušanih skladb v dnevniku log.txt
Popolna koda skripta

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

Če želite, da se skladbe predvajajo po vrstnem redu, morate zakomentirati vrstico v index.php

shuffle($files); //Random on

Za poddaje uporabljam /var/www/podcast/ Obstaja še en skript index.php. Ima pomnjenje skladb podcastov. Ko naslednjič vklopite internetni sprejemnik, se predvaja naslednja podcast skladba. Obstaja tudi dnevnik predvajanih skladb.
V datoteki counter.dat lahko določite številko skladbe in od nje se bo začelo predvajanje poddaje.

Napisal razčlenjevalnike za samodejno nalaganje podcastov. Vzame najnovejše 4 skladbe iz RSS in jih prenese. Vse to odlično deluje na pametnem telefonu, sprejemniku IPTV ali v brskalniku.

Drugo jutro mi je prišlo na misel, da bi bilo super, če bi si zapomnil položaj predvajanja na skladbi. Vendar še ne vem, kako to narediti v PHP.

Skript je mogoče prenesti github.com/iwsys/IWScast

Vir: www.habr.com

Dodaj komentar