Paljud meist armastavad hommikuti raadiot kuulata. Ja ĂŒhel kaunil hommikul sain ma aru, et ei taha kuulata kohalikke FM raadiojaamu. Pole huvitav. Kuid harjumus osutus kahjulikuks. Otsustasin asendada FM-raadiosaatja internetiraadiosaatjaga. Kiirelt ostsin osad AliExpressilt ja kokkupanin internetiraadio.
Internetiraadio kohta. Raadio sĂŒdameks on mikrokontroller ESP32. Firmware on KA-radio. Osade maksumus oli mul 12 dollarit. Kokkupaneku lihtsus vĂ”imaldas mul selle kahe pĂ€evaga kokku panna. Töötab hĂ€sti ja stabiilselt. 10 kuu töötamise jooksul on see vaid paar korda hangunud ja siis ainult minu katsete tĂ”ttu. Mugav ja lĂ€bimĂ”eldud liides vĂ”imaldab juhtida nutitelefoni ja arvuti kaudu. ĂhesĂ”naga, see on suurepĂ€rane internetiraadio.
KĂ”ik on suurepĂ€rane. Kuid ĂŒhel varahommikul jĂ”udsin jĂ€reldusele, et kĂŒmnete tuhandete raadiojaamade olemasolu juures ei ole huvitavaid jaamu. Mind hĂ€iris reklaam ja idiotlikud saatejuhid. HĂŒppasin pidevalt ĂŒhelt jaamalt teisele. Mulle meeldib Spotify ja Yandex.Muusika. Kuid kurvastus on see, et need ei toimi minu riigis. Sooviksin neid kuulata internetiraadio kaudu.
MĂ€ mĂ€letan oma lapsepĂ”lve. Mul oli magnetofon ja kaks tosinat kassetti. Kasutasin kassetti ja vahetasin neid sĂ”pradega. See oli imeline. Otsustasin, et peaksin oma heliarhiivi voogedastama ainult interneti vastuvĂ”tja kaudu. Muidugi, on vĂ”imalus ĂŒhendada helimĂ€ngija vĂ”i iPod kĂ”laritega ja sellega mitte vaeva nĂ€ha. Kuid see ei ole meie tee! Ma vihkan ĂŒhenduste ĂŒhendamist.)
Hakkasin otsima valmis lahendusi. Turul on pakkumine luua oma internetiradio Radio-Tochka.com'i kaudu. Testisin 5 pÀeva. Minu interneti vastuvÔtjas töötas kÔik suurepÀraselt. Kuid hind osutus mulle ebatÀiuslikuks. Otsustasin sellest variandist loobuda.
Mul on tasutud hostimine 10 GB. Otsustasin kirjutada skripti millegiga, et voogedastada oma mp3 failide heli. Otsustasin kirjutada PHP-s. Kirjutasin kiiresti valmis ja kĂ€ivitasin. KĂ”ik töötab. See oli geniaalne! Kuid paar pĂ€eva hiljem tuli kiri hostimise halduselt. Kirjas rÀÀgiti protsessoriminutite piirmÀÀra ĂŒletamisest ja vajadusest tĂ”sta plaani. Skript tuli kustutada ja sellest variandist loobuda.
Kuidas see vĂ”imalik on? Ma ei suuda elada ilma raadiota. Kui ei lubata skripti kĂ€ivitada kellegi teise hostimisel, siis peab olema oma server. Kus ma saan teha seda, mida mu sĂŒda ihkab.
Mul on vana netbook, mis seisab ilma akuta (CPU â 900 MHz, RAM â 512 Mb). Vanamees on juba 11 aastat vana. Serveriks sobib kenasti. Paigaldan Ubuntu 12.04. Siis installin Apache2 ja php 5.3, samba. Minu server on valmis.
Otsustasin proovida Icecast'i. Olen palju lugenud selle kÀsiraamatust. Kuid see tundus mulle keeruline. Nii otsustasin naasta PHP skripti versiooni juurde. Kulutasin paar pÀeva selle skripti tÔrkeotsingule. Ja kÔik toimis ideaalselt. Siis kirjutasin veel skripti, et mÀngida podcaste. See meeldis mulle nii vÀga, et otsustasin teha vÀikese projekti. Nimetasin selle IWScast. .

KÔik on vÀga lihtne. MP3 failid ja index.php fail kopeerin Apache'i juurkatalooge /var/www/ ja need mÀngitakse juhuslikult. Umbes 300 laulu piisab terveks pÀevaks.
Fail index.php on see ise script. Skript loeb kÔik mp3 failide nimed kataloogis massiivi. Loob audio voolu ja asendab mp3 failide nimedega. On hetki, kui kuulate laulu ja see meeldib teile. MÔtlete, kes seda laulab? Selliseks juhuks on olemas kuulatud lugude nimede salvestamine log.txt-i.
Skripti kood tÀielikult
<?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 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);
}
?>Kui soovite, et lood mÀngitakse jÀrjekorras, peate index.php-s kommenteerima vÀlja rea
shuffle($files); //Random onPodkastide jaoks kasutan /var/www/podcast/. Seal on teine skript index.php. Selles on salvestamine podkastide lugudest. Interneti vastuvĂ”tja jĂ€rgmisel sisselĂŒlitamisel mĂ€ngitakse jĂ€rgmine podkasti lugu. Samuti on olemas mĂ€ngitud lugude logi.
Failis counter.dat saab mÀÀrata loo numbri, millest alates hakatakse podcaste mÀngima.
Olen kirjutanud parserid podkastide automaatseks allalaadimiseks. See vÔtab RSS-ist 4 viimast lugu ja laadib need alla. KÔik see töötab suurepÀraselt nutitelefonis, IPTV seadmes ja brauseris.
Hiljuti hommikul tuli mulle mÔte, et oleks suurepÀrane teha mÀngimise positsiooni mÀletamine loost. Kuid ma ei tea veel, kuidas seda PHP-s teha.
Skript on allalaetav
Allikas: habr.com
