Vaš vlastiti internet radio

Mnogi od nas vole slušati radio ujutro. A onda sam jednog lijepog jutra shvatio da ne želim slušati lokalne FM radio postaje. Ne zanima me. Ali navika se pokazala štetnom. I odlučio sam FM prijemnik zamijeniti internetskim prijemnikom. Brzo sam kupio dijelove na Aliexpressu i sastavio internetski prijemnik.

O Internet prijemniku. Srce prijemnika je mikrokontroler ESP32. Firmware iz KA-radija. Dijelovi su me koštali 12 dolara. Lakoća sastavljanja omogućila mi je da ga sastavim za nekoliko dana. Radi dobro i stabilno. U 10 mjeseci rada smrznuo se samo nekoliko puta, i to samo zbog mojih eksperimenata. Praktično i dobro osmišljeno sučelje omogućuje vam upravljanje s pametnog telefona i računala. Jednom riječju, ovo je prekrasan internetski prijemnik.

Sve je u redu. Ali jednog ranog jutra došao sam do zaključka da unatoč tome što sam imao pristup desecima tisuća radio postaja, nema zanimljivih postaja. Nervirala me reklama i glupe šale voditelja. Stalno skakanje s jedne postaje na drugu. Sviđaju mi ​​se Spotify i Yandex.Music. Ali tužno je to što oni ne rade u mojoj zemlji. I htio bih ih slušati preko internetskog prijemnika.

Sjetio sam se svog djetinjstva. Imao sam magnetofon i dva tuceta kazeta. Razmijenio sam kasete s prijateljima. I bilo je divno. Odlučio sam da svoje audio arhive moram prenijeti samo na internetski prijemnik. Naravno, postoji mogućnost da na zvučnike spojite audio player ili iPod i nemate brige. Ali ovo nije naš način! Mrzim spajati konektore)

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

Platio sam hosting 10 GB. Odlučio sam napisati skriptu o nečemu što će strujati audio tok mojih mp3 datoteka. Odlučio sam to napisati u PHP-u. Brzo sam to napisao i pokrenuo. Sve je radilo. Bilo je cool! Ali nekoliko dana kasnije primio sam pismo od administracije hostinga. Rečeno je da je ograničenje procesorskih minuta premašeno i da je potrebna nadogradnja na višu tarifu. Skripta je morala biti izbrisana i ova opcija je napuštena.

Kako se to dogodilo? Ne mogu živjeti bez radija. Ako vam ne dopuštaju pokretanje skripte na tuđem hostingu, onda vam je potreban vlastiti poslužitelj. Gdje ću raditi što mi duša želi.

Imam stari 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 poslužitelj je spreman.

Odlučio sam isprobati Icecast. Pročitao sam puno mana na njemu. Ali bilo mi je teško. I odlučio sam se vratiti na opciju s PHP skriptom. Nekoliko dana je potrošeno na otklanjanje pogrešaka ove skripte. I sve je radilo super. Zatim sam napisao i scenarij za reprodukciju podcasta. I toliko mi se svidjelo da sam odlučio napraviti mali projekt. Nazvao ga je IWScast. Objavljeno na githubu.

Vaš vlastiti internet radio

Sve je vrlo jednostavno. Kopiram mp3 datoteke i datoteku index.php u korijensku mapu Apache /var/www/ i one se reproduciraju nasumično. Oko 300 pjesama dovoljno je za otprilike cijeli dan.
Datoteka index.php sama je skripta. Skripta čita sve nazive MP3 datoteka u direktoriju u polje. Stvara audio stream i zamjenjuje nazive MP3 datoteka. Ima trenutaka kada poslušate pjesmu i svidi vam se. Što misliš tko pjeva? Za takav slučaj postoji zapis imena slušanih pjesama u dnevniku 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 pjesme reproduciraju redom, trebate komentirati redak u index.php

shuffle($files); //Random on

Za podcastove koristim /var/www/podcast/ Postoji još jedna skripta index.php. Ima memoriranje podcast zapisa. Sljedeći put kada uključite internetski prijamnik, reproducira se sljedeća podcast pjesma. Tu je i dnevnik odsviranih pjesama.
U counter.dat datoteci možete odrediti broj zapisa i reprodukcija podcasta će započeti od njega.

Napisao parsere za automatsko preuzimanje podcasta. Uzima najnovije 4 pjesme iz RSS-a i preuzima ih. Sve ovo odlično funkcionira na pametnom telefonu, IPTV prijemniku ili u pregledniku.

Drugo jutro palo mi je na pamet da bi bilo sjajno zapamtiti poziciju reprodukcije na pjesmi. Ali još ne znam kako to učiniti u PHP-u.

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

Izvor: www.habr.com

Dodajte komentar