Ang iyong sariling internet radio

Marami sa atin ang gustong makinig ng radyo sa umaga. At pagkatapos ay isang magandang umaga napagtanto ko na ayaw kong makinig sa mga lokal na istasyon ng radyo ng FM. Hindi interesado. Pero nakakasama pala ang ugali. At nagpasya akong palitan ang FM receiver ng isang Internet receiver. Mabilis akong bumili ng mga bahagi sa Aliexpress at nag-assemble ng isang Internet receiver.

Tungkol sa Internet receiver. Ang puso ng receiver ay ang ESP32 microcontroller. Firmware mula sa KA-radio. Ang mga bahagi ay nagkakahalaga sa akin ng $12. Ang kadalian ng pagpupulong ay nagpapahintulot sa akin na tipunin ito sa loob ng ilang araw. Gumagana nang maayos at matatag. Sa 10 buwan ng trabaho, ito ay nagyelo ng ilang beses, at pagkatapos ay dahil lamang sa aking mga eksperimento. Ang isang maginhawa at mahusay na pinag-isipang interface ay nagbibigay-daan sa iyo upang makontrol mula sa isang smartphone at computer. Sa madaling salita, ito ay isang kahanga-hangang Internet receiver.

Okay na ang lahat. Ngunit isang madaling araw ay naisip ko na sa kabila ng pagkakaroon ng access sa libu-libong mga istasyon ng radyo, walang mga kawili-wiling istasyon. Naiinis ako sa advertising at mga kalokohang biro ng mga nagtatanghal. Patuloy na tumatalon mula sa isang istasyon patungo sa isa pa. Gusto ko ang Spotify at Yandex.Music. Ngunit ang nakakalungkot ay hindi sila nagtatrabaho sa aking bansa. At gusto kong makinig sa kanila sa pamamagitan ng Internet receiver.

Naalala ko ang aking pagkabata. Mayroon akong tape recorder at dalawang dosenang cassette. Nakipagpalitan ako ng cassette sa mga kaibigan. At ito ay kahanga-hanga. Napagpasyahan ko na kailangan kong i-stream ang aking mga audio archive lamang sa isang Internet receiver. Siyempre, mayroong isang pagpipilian upang ikonekta ang isang audio player o iPod sa mga speaker at huwag mag-alala. Ngunit hindi ito ang aming paraan! Ayaw ko sa pagkonekta ng mga konektor)

Nagsimula akong maghanap ng mga handa na solusyon. Mayroong isang alok sa merkado upang lumikha ng iyong sariling Internet radio mula sa Radio-Tochka.com. Sinubukan ko ito ng 5 araw. Naging maayos ang lahat sa aking internet receiver. Ngunit ang presyo ay hindi kaakit-akit sa akin. Tinanggihan ko ang opsyong ito.

Nagbayad ako ng hosting ng 10 GB. Nagpasya akong magsulat ng script sa isang bagay na mag-stream ng audio stream ng aking mga mp3 file. Nagpasya akong isulat ito sa PHP. Mabilis kong isinulat ito at inilunsad. Lahat ay gumana. Ito ay cool! Ngunit makalipas ang ilang araw nakatanggap ako ng liham mula sa hosting administration. Sinabi nito na nalampasan ang limitasyon ng minuto ng processor at ang pangangailangan na mag-upgrade sa mas mataas na taripa. Kinailangang tanggalin ang script at inabandona ang opsyong ito.

Paano ito nangyari? Hindi ako mabubuhay nang walang radyo. Kung hindi ka nila pinapayagang patakbuhin ang script sa pagho-host ng ibang tao, kailangan mo ng sarili mong server. Kung saan gagawin ko ang nais ng aking kaluluwa.

Mayroon akong isang sinaunang netbook na walang baterya (CPU - 900 MHz, RAM - 512 Mb). 11 years old na ang matanda. Angkop para sa isang server. Nag-install ako ng Ubuntu 12.04. Pagkatapos ay nag-install ako ng Apache2 at php 5.3, samba. Ready na ang server ko.

Nagpasya akong subukan ang Icecast. Marami akong nabasang mana dito. Pero nahirapan ako. At nagpasya akong bumalik sa opsyon na may PHP script. Ilang araw ang ginugol sa pag-debug sa script na ito. At lahat ay gumana nang mahusay. Pagkatapos ay nagsulat din ako ng isang script upang maglaro ng mga podcast. At nagustuhan ko ito kaya napagpasyahan kong gumawa ng isang maliit na proyekto. Tinawag itong IWScast. Nai-post sa github.

Ang iyong sariling internet radio

Napakasimple ng lahat. Kinokopya ko ang mga mp3 file at ang index.php file sa Apache root folder /var/www/ at random na nilalaro ang mga ito. Humigit-kumulang 300 kanta ay sapat para sa humigit-kumulang sa buong araw.
Ang index.php file ay ang script mismo. Binabasa ng script ang lahat ng mga pangalan ng mga MP3 file sa isang direktoryo sa isang array. Lumilikha ng audio stream at pinapalitan ang mga pangalan ng mga MP3 file. May mga pagkakataon na nakikinig ka ng kanta at gusto mo ito. Sino sa tingin mo ang kumakanta? Para sa ganoong kaso, mayroong recording ng mga pangalan ng napakinggang track sa log log.txt
Kumpletuhin ang code ng script

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

Kung kailangan mo ang mga track upang i-play sa pagkakasunud-sunod, pagkatapos ay kailangan mong magkomento sa linya sa index.php

shuffle($files); //Random on

Para sa mga podcast na ginagamit ko /var/www/podcast/ May isa pang script na index.php. Mayroon itong memorization ng podcast track. Sa susunod na i-on mo ang Internet receiver, ipe-play ang susunod na podcast track. Mayroon ding log ng mga na-play na track.
Sa counter.dat file, maaari mong tukuyin ang numero ng track at magsisimula dito ang pag-playback ng podcast.

Nagsulat ng mga parser para sa awtomatikong pag-download ng mga podcast. Kinakailangan ang pinakabagong 4 na track mula sa RSS at dina-download ang mga ito. Ang lahat ng ito ay mahusay na gumagana sa isang smartphone, IPTV set-top box, o sa isang browser.

Noong isang umaga, naisip ko na magandang alalahanin ang posisyon ng pag-playback sa isang track. Ngunit hindi ko pa alam kung paano gawin ito sa PHP.

Maaaring ma-download ang script github.com/iwsys/IWScast

Pinagmulan: www.habr.com

Magdagdag ng komento