Vaš vlastiti internet radio

Mnogi od nas vole da slušaju radio ujutro. A onda sam jednog lepog jutra shvatio da ne želim da slušam lokalne FM radio stanice. Nezainteresovan. Ali navika se pokazala štetnom. Odlučio sam zamijeniti FM prijemnik sa Internet prijemnikom. Brzo sam kupio dijelove na Aliexpressu i sastavio internet prijemnik.

O Internet prijemniku. Srce prijemnika je ESP32 mikrokontroler. Firmware sa KA-radija. Dijelovi su me koštali 12 dolara. Lakoća montaže mi je omogućila da ga sastavim za nekoliko dana. Radi dobro i stabilno. Za 10 mjeseci rada smrzla se svega par puta, i to samo zbog mojih eksperimenata. Zgodno i dobro osmišljeno sučelje omogućava vam upravljanje sa pametnog telefona i računara. Jednom riječju, ovo je divan internet prijemnik.

Sve je u redu. Ali jednog ranog jutra došao sam do zaključka da uprkos tome što imam pristup desetinama hiljada radio stanica, nema zanimljivih stanica. Iznervirale su me reklame i glupe šale voditelja. Stalno skakanje s jedne stanice na drugu. Sviđaju mi ​​se Spotify i Yandex.Music. Ali tužna stvar je što oni ne rade u mojoj zemlji. I volio bih da ih slušam preko internet prijemnika.

Sjetio sam se svog djetinjstva. Imao sam kasetofon i dva tuceta kaseta. Razmijenio sam kasete sa prijateljima. I bilo je divno. Odlučio sam da svoju audio arhivu trebam strimovati samo na internet prijemnik. Naravno, postoji mogućnost da povežete audio plejer ili iPod na zvučnike i ne brinite. Ali ovo nije naš način! Mrzim spajanje konektora)

Počeo sam tražiti gotova rješenja. Na tržištu postoji ponuda za kreiranje vlastitog internet radija sa Radio-Tochka.com. Testirao sam ga 5 dana. Sve je funkcionisalo u redu sa mojim internet prijemnikom. Ali cijena mi nije bila privlačna. Odbio sam ovu opciju.

Platio sam hosting 10 GB. Odlučio sam da napišem skriptu na nečemu što će prenositi audio tok mojih mp3 datoteka. Odlučio sam da to napišem u PHP-u. Brzo sam to napisao i pokrenuo. Sve je funkcionisalo. Bilo je cool! Ali nekoliko dana kasnije dobio sam pismo od administracije domaćina. Rečeno je da je prekoračen limit procesorskih minuta i potreba za nadogradnjom na višu tarifu. Skripta je morala biti obrisana i ova opcija napuštena.

Kako se to dogodilo? Ne mogu živjeti bez radija. Ako vam ne dozvoljavaju da pokrenete skriptu na tuđem hostingu, onda vam je potreban vlastiti server. Gde ću raditi šta mi duša želi.

Imam starinski netbook bez baterije (CPU - 900 MHz, RAM - 512 Mb). Starac ima već 11 godina. Pogodno za server. Instaliram Ubuntu 12.04. Zatim instaliram Apache2 i php 5.3, samba. Moj server je spreman.

Odlučio sam isprobati Icecast. Pročitao sam dosta mana o tome. Ali bilo mi je teško. I odlučio sam da se vratim na opciju sa PHP skriptom. Nekoliko dana je potrošeno na otklanjanje grešaka u ovoj skripti. I sve je funkcionisalo odlično. Zatim sam napisao i scenario za puštanje podcasta. I toliko mi se svidjelo da sam odlučio napraviti mali projekat. Zvao se IWScast. Objavljeno na github-u.

Vaš vlastiti internet radio

Sve je vrlo jednostavno. Kopiram mp3 fajlove i index.php fajl u Apache root folder /var/www/ i oni se nasumično reprodukuju. Oko 300 pjesama je dovoljno za otprilike cijeli dan.
Datoteka index.php je sama skripta. Skripta čita sva imena MP3 datoteka u direktoriju u niz. Kreira audio stream i zamjenjuje imena MP3 datoteka. Ima trenutaka kada slušate pjesmu i sviđa vam se. Šta mislite ko peva? Za takav slučaj postoji zapis naziva slušanih numera u log log.txt
Kompletan kod skripte

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

Ako želite da se numere reprodukuju po redu, onda morate da komentarišete red u index.php

shuffle($files); //Random on

Za podcaste koristim /var/www/podcast/ Postoji još jedna skripta index.php. Ima memorisanje podcast zapisa. Sljedeći put kada uključite internet prijemnik, pušta se sljedeća podcast pjesma. Tu je i dnevnik reprodukovanih numera.
U datoteci counter.dat možete odrediti broj numere i reprodukcija podcasta će početi od njega.

Napisao parsere za automatsko preuzimanje podcasta. Uzima najnovije 4 pjesme sa RSS-a i preuzima ih. Sve ovo odlično funkcionira na pametnom telefonu, IPTV set-top boxu ili u pretraživaču.

Pre neko jutro palo mi je na pamet da bi bilo sjajno zapamtiti poziciju reprodukcije na stazi. Ali još ne znam kako to da uradim u PHP-u.

Skripta se može preuzeti github.com/iwsys/IWScast

izvor: www.habr.com

Dodajte komentar