Jo eigen ynternetradio

In protte fan ús wolle moarns nei de radio harkje. En doe op in moaie moarn besefte ik dat ik net nei lokale FM-radiostasjons harkje woe. Net ynteressearre. Mar de gewoante blykte skealik te wêzen. En ik besleat de FM-ûntfanger te ferfangen troch in ynternetûntfanger. Ik kocht gau dielen op Aliexpress en sammele in ynternetûntfanger.

Oer it ynternet ûntfanger. It hert fan 'e ûntfanger is de ESP32 mikrocontroller. Firmware fan KA-radio. De dielen kostje my $ 12. Troch it gemak fan montage koe ik it yn in pear dagen gearstalle. Wurket goed en stabyl. Yn 10 moannen fan wurk befrear it mar in pear kear, en dan allinich fanwegen myn eksperiminten. In handige en goed trochtochte interface kinne jo kontrolearje fan in smartphone en kompjûter. Yn ien wurd, dit is in prachtige ynternetûntfanger.

Alles is ynoarder. Mar op in iere moarn kaam ik ta de konklúzje dat nettsjinsteande it hawwen fan tagong ta tsientûzenen radiostasjons, der wiene gjin nijsgjirrige stasjons. Ik hie argewaasje fan de reklame en de domme grappen fan de presintatoaren. Hieltyd springend fan it iene stasjon nei it oare. Ik hâld fan Spotify en Yandex.Music. Mar it tryste is dat se net wurkje yn myn lân. En ik soe har graach harkje wolle fia de ynternetûntfanger.

Ik tocht oan myn bernetiid. Ik hie in bandrecorder en twa tsientallen kassettes. Ik ruile kassettes mei freonen. En it wie prachtich. Ik besleat dat ik myn audio-argiven allinich nei in ynternetûntfanger moast streame. Fansels is d'r in opsje om in audiospieler of iPod te ferbinen oan 'e sprekkers en gjin soargen. Mar dit is net ús manier! Ik haatsje ferbinende ferbiningen)

Ik begon te sykjen nei klearebare oplossingen. D'r is in oanbod op 'e merke om jo eigen ynternetradio te meitsjen fan Radio-Tochka.com. Ik testte it foar 5 dagen. Alles wurke goed mei myn ynternetûntfanger. Mar de priis wie net oantreklik foar my. Ik wegere dizze opsje.

Ik haw betelle hosting 10 GB. Ik besleat in skript te skriuwen oer iets dat de audiostream fan myn mp3-bestannen streame soe. Ik besleat it te skriuwen yn PHP. Ik skreau it fluch en lansearre it. Alles wurke. It wie moai! Mar in pear dagen letter krige ik in brief fan de hostingadministraasje. It sei dat de limyt fan prosessorminuten waard oerskreaun en de needsaak om te upgrade nei in heger taryf. It skript moast wurde wiske en dizze opsje ferlitten.

Hoe is it bard? Ik kin net sûnder radio. As se jo net tastean om it skript op de hosting fan in oar út te fieren, dan hawwe jo jo eigen server nedich. Wêr't ik sil dwaan wat myn siel winsket.

Ik haw in âlde netbook sûnder batterij (CPU - 900 MHz, RAM - 512 Mb). De âld man is al 11 jier. Geskikt foar in tsjinner. Ik ynstallearje Ubuntu 12.04. Dan ynstallearje ik Apache2 en php 5.3, samba. Myn tsjinner is klear.

Ik besleat Icecast te besykjen. Ik lês der in protte mana oer. Mar ik fûn it dreech. En ik besleat om werom te gean nei de opsje mei in PHP-skript. In pear dagen waarden bestege oan it debuggen fan dit skript. En alles wurke geweldich. Doe haw ik ek in skript skreaun om podcasts te spyljen. En ik fûn it sa leuk dat ik besleat om in lyts projekt te dwaan. Neamde it IWScast. Pleatst op github.

Jo eigen ynternetradio

Alles is hiel ienfâldich. Ik kopiearje de mp3-bestannen en it index.php-bestân yn 'e Apache-rootmap /var/www/ en se wurde willekeurich spile. Sa'n 300 ferskes binne genôch foar likernôch de hiele dei.
It index.php-bestân is it skript sels. It skript lêst alle nammen fan MP3-bestannen yn in map yn in array. Meitsje in audiostream en ferfangt de nammen fan MP3-bestannen. D'r binne tiden dat jo nei in ferske harkje en it leuk fine. Wa tinkt jo dat sjongt? Foar sa'n gefal is der in opname fan de nammen fan harke spoaren yn it log log.txt
Folsleine skriptkoade

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

As jo ​​​​nedich hawwe dat de spoaren yn oarder wurde spile, dan moatte jo de line yn index.php kommentaar jaan

shuffle($files); //Random on

Foar podcasts brûk ik /var/www/podcast/ D'r is in oar skript index.php. It hat memorisaasje fan podcastsporen. De folgjende kear as jo de ynternetûntfanger ynskeakelje, wurdt it folgjende podcastspoar spile. D'r is ek in log fan spile tracks.
Yn 'e counter.dat-bestân kinne jo it spoarnûmer opjaan en it ôfspieljen fan podcast sil derfan begjinne.

Skreau parsers foar automatysk ynladen fan podcasts. It nimt de lêste 4 spoaren fan RSS en downloadt se. Dit alles wurket geweldich op in smartphone, IPTV set-top box, as yn in browser.

De oare moarns foel it my op dat it geweldich wêze soe om de ôfspielposysje op in spoar te ûnthâlden. Mar ik wit noch net hoe dit te dwaan yn PHP.

It skript kin ynladen wurde github.com/iwsys/IWScast

Boarne: www.habr.com

Add a comment