Oma Interneti-raadio

Paljudele meist meeldib hommikuti raadiot kuulata. Ja siis ühel ilusal hommikul taipasin, et ma ei taha kohalikke FM-raadiojaamu kuulata. Ei ole huvitatud. Kuid harjumus osutus kahjulikuks. Ja ma otsustasin asendada FM-vastuvõtja Interneti-vastuvõtjaga. Ostsin kiiresti Aliexpressist osad ja panin kokku Interneti-vastuvõtja.

Interneti-vastuvõtja kohta. Vastuvõtja südameks on ESP32 mikrokontroller. KA-raadio püsivara. Osad maksid mulle 12 dollarit. Koostamise lihtsus võimaldas mul selle paari päevaga kokku panna. Töötab hästi ja stabiilselt. 10 töökuu jooksul külmus see vaid paar korda ja siis ainult minu katsetuste tõttu. Mugav ja läbimõeldud liides võimaldab juhtida nutitelefonist ja arvutist. Ühesõnaga, see on suurepärane Interneti-vastuvõtja.

Kõik on korras. Kuid ühel varahommikul jõudsin järeldusele, et vaatamata sellele, et mul on juurdepääs kümnetele tuhandetele raadiojaamadele, polnud huvitavaid jaamu. Mind ajas närvi reklaam ja saatejuhtide rumalad naljad. Pidevalt ühest jaamast teise hüppamine. Mulle meeldivad Spotify ja Yandex.Music. Kuid kurb on see, et nad ei tööta minu riigis. Ja ma tahaksin neid Interneti-vastuvõtja kaudu kuulata.

Mulle meenus lapsepõlv. Mul oli magnetofon ja kaks tosinat kassetti. Vahetasin sõpradega kassette. Ja see oli imeline. Otsustasin, et pean oma heliarhiive voogesitama ainult Interneti-vastuvõtjasse. Loomulikult on võimalus ühendada kõlaritega helipleier või iPod ja mitte muretseda. Kuid see pole meie tee! Ma vihkan pistikute ühendamist)

Hakkasin otsima valmislahendusi. Turul on pakkumine luua oma Interneti-raadio saidilt Radio-Tochka.com. Testisin seda 5 päeva. Minu Interneti-vastuvõtjaga töötas kõik hästi. Aga hind ei olnud minu jaoks atraktiivne. Keeldusin sellest variandist.

Olen maksnud hostimist 10 GB. Otsustasin kirjutada skripti millelegi, mis voogesitaks minu mp3-failide helivoogu. Otsustasin selle kirjutada PHP-s. Kirjutasin selle kiiresti ja käivitasin. Kõik toimis. See oli lahe! Kuid paar päeva hiljem sain majutusameti administratsioonilt kirja. Seal öeldi, et protsessoriminutite limiit on ületatud ja vajadus kõrgemale tariifile üle minna. Skript tuli kustutada ja sellest valikust loobuda.

Kuidas see juhtus? Ma ei saa elada ilma raadiota. Kui nad ei luba teil skripti kellegi teise hostimisel käivitada, vajate oma serverit. Kus ma teen seda, mida mu hing ihkab.

Mul on iidne akuta netbook (CPU - 900 MHz, RAM - 512 Mb). Vanamees on juba 11-aastane. Sobib serveriks. Installin Ubuntu 12.04. Seejärel installin Apache2 ja php 5.3, samba. Minu server on valmis.

Otsustasin Icecasti proovida. Lugesin selle kohta palju mana. Aga mulle tundus see raske. Ja otsustasin naasta PHP-skripti valiku juurde. Paar päeva kulus selle skripti silumisele. Ja kõik toimis suurepäraselt. Siis kirjutasin ka stsenaariumi podcastide esitamiseks. Ja see meeldis mulle nii väga, et otsustasin teha väikese projekti. Seda kutsuti IWScastiks. Postitatud githubis.

Oma Interneti-raadio

Kõik on väga lihtne. Kopeerin mp3 failid ja index.php faili Apache juurkausta /var/www/ ja neid mängitakse juhuslikult. Umbes 300 laulust piisab ligikaudu terveks päevaks.
Fail index.php on skript ise. Skript loeb kõik kataloogis olevate MP3-failide nimed massiiviks. Loob helivoo ja asendab MP3-failide nimed. On aegu, kui kuulate mõnda laulu ja see teile meeldib. Kes sinu arvates laulab? Selliseks juhuks on logis log.txt salvestatud kuulatud palade nimed
Täielik skripti kood

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

Kui teil on vaja lugusid esitada järjekorras, siis tuleb see rida indeks.php-s kommenteerida

shuffle($files); //Random on

Taskuhäälingusaadete jaoks kasutan /var/www/podcast/ On veel üks skript index.php. Sellel on taskuhäälingusaate lugude meeldejätmine. Järgmine kord, kui lülitate Interneti-vastuvõtja sisse, esitatakse järgmine taskuhäälingusaate lugu. Seal on ka mängitud radade logi.
Failis counter.dat saate määrata loo numbri ja sellest algab taskuhäälingusaadete taasesitus.

Kirjutas parsereid taskuhäälingusaadete automaatseks allalaadimiseks. See võtab RSS-ist 4 viimast lugu ja laadib need alla. Kõik see töötab suurepäraselt nutitelefonis, IPTV digiboksis või brauseris.

Teisel hommikul tuli mulle pähe, et oleks tore meenutada taasesituse asendit ühel rajal. Kuid ma ei tea veel, kuidas seda PHP-s teha.

Skripti saab alla laadida github.com/iwsys/IWScast

Allikas: www.habr.com

Lisa kommentaar