Mnogi od nas vole jutarnje slušanje radija. I jednog divnog jutra shvatio sam da ne želim slušati lokalne FM radio stanice. Nisu zanimljive. No, ta navika pokazala se kao štetna. Odlučio sam da zamijenim FM prijemnik internetskim prijemnikom. Brzo sam kupio dijelove na AliExpressu i sastavio internet prijemnik.
O internetskom prijemniku. Srce prijemnika je mikrocontroller ESP32. Firmware od KA-radio. Cijena dijelova iznosila je 12 dolara. Jednostavnost sastavljanja omogućila mi je da ga sastavim za nekoliko dana. Dobro i stabilno radi. Za 10 mjeseci rada samo je nekoliko puta zakazao, i to zbog mojih eksperimenata. Praktično i promišljeno sučelje omogućava upravljanje putem pametnog telefona i računala. Jednom riječi, to je izvrstan internetski prijemnik.
Sve je super. Ali jednog ranog jutra došao sam do zaključka da, iako imam pristup desecima tisuća radio stanica, nema zanimljivih stanica. Reklamne poruke i glupi šale voditelja su me iritirale. Stalno sam prelazio s jedne stanice na drugu. Sviđa mi se Spotify i Yandex.Muzika. Ali, tužna vijest je da ne rade u mojoj zemlji. Htio bih ih slušati putem internetskog prijemnika.
Sjetio sam se svog djetinjstva. Imao sam kasetofon i dvadesetak kaseta. Kasete sam mijenjao s prijateljima. Bilo je predivno. Odlučio sam da treba izraditi streaming svojih audio arhiva samo za internetski prijemnik. Naravno, postoji opcija povezivanja audio playera ili iPoda s zvučnicima i ne brinuti se. Ali to nije naš put! Mrzim povezać jedne konektore)
Počeo sam tražiti gotova rješenja. Na tržištu postoji ponuda za izradu vlastitog internetskog radija od Radio-Tochka.com. Testirao sam to pet dana. Sa svojim internetskim prijemnikom sve je radilo savršeno. No, cijena mi se pokazala kao neprihvatljiva. Odustao sam od ove opcije.
Imam plaćeni hosting od 10 GB. Odlučio sam napisati skript u nečemu kako bih imao streaming audio toka mojih mp3 datoteka. Odlučio sam napisati u PHP-u. Brzo sam napisao i pokrenuo. Sve je radilo. Bilo je odlično! Ali nakon nekoliko dana stiglo je pismo od administracije hostinga. U njemu je pisalo o prekoračenju limita procesorskih minuta i potrebi prelaska na viši tarifni plan. Skript sam morao obrisati i odustati od ove opcije.
Kako to? Ne mogu živjeti bez radija. Ako ne mogu pokrenuti skriptu na tuđem hostingu, znači da treba vlastiti server. Gdje ću raditi ono što moja duša želi.
Imam stari netbook bez baterije (CPU — 900 MHz, RAM — 512 Mb). Starac već ima 11 godina. Sasvim dobar za server. Instaliram Ubuntu 12.04. Zatim instaliram Apache2 i PHP 5.3, Samba. Moj server je spreman.
Odlučio sam probati Icecast. Puno sam čitao dokumentacije o njemu. Ali mi se činilo složenim. Zato sam se odlučio vratiti na verziju sa skriptom u PHP-u. Provedeno je nekoliko dana u debugiranju te skripte. I sve je savršeno radilo. Zatim sam još napisao skriptu za reprodukciju podcasta. To mi se toliko svidjelo da sam odlučio napraviti mali projekt. Nazvao sam ga IWScast. .

Sve je vrlo jednostavno. MP3 datoteke i datoteka index.php kopiram u root mapu Apacha /var/www/ i reprodukuju se nasumično. Oko 300 pjesama dovoljno je za cijeli dan.
Datoteka index.php je sama skripta. Skripta čita sve nazive MP3 datoteka iz direktorija u niz. Stvara audio tok i dodaje nazive MP3 datoteka. Ponekad se dogodi da slušaš pjesmu i svidi ti se. Razmišljaš, tko pjeva ovu pjesmu? Za takav slučaj postoji zapis naziva slušane pjesme u logu log.txt.
Cjelokupni 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: vaše ime");
header("icy-description: vaš opis");
$files = glob("*.mp3");
shuffle($files); //Random on
for ($x=0; $x array(
'method' =>'GET',
'header' =>'Icy-MetaData: 1',
'header'=>"Accept-language: enrn"
)
)
);
//Save to log
$fl = $filePath;
$log = date('Y-m-d H:i:s') . ' Pjesma - ' . $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, potrebno je u index.php komentirati liniju
shuffle($files); //Random onZa podcast koristim /var/www/podcast/. Ondje je druga skripta index.php. U njoj se pamte naslovi podcasta. Pri sljedećem uključivanju internet prijemnika reproducira se sljedeća pjesma podcasta. Također postoji log reproduciranih pjesama.
U datoteci counter.dat možete navesti broj pjesme i s nje će početi reprodukcija podcasta.
Pisao sam parsere za automatsko preuzimanje podkasta. Uzimaju iz RSS-a četiri poslednja traka i preuzimaju ih. Sve to savršeno funkcioniše na pametnom telefonu, IPTV uređaju, u pretraživaču.
Nedavno mi je jutros pala na pamet misao da bi bilo sjajno napraviti pamćenje pozicije reprodukcije na traci. Ali još ne znam kako to uraditi u PHP-u.
Skript možete preuzeti
Izvor: habr.com
