Oma internetiraadio

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. Laadisin üles githubi.

Oma internetiraadio

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 on

Podkastide 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 github.com/iwsys/IWScast

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster