Сіздің жеке интернет радиоңыз

Көпшілігіміз таңертең радио тыңдағанды ​​ұнатамыз. Бір күні таңертең мен жергілікті FM радиостанцияларын тыңдағым келмейтінін түсіндім. Қызық емес. Бірақ бұл әдеті зиянды болып шықты. Ал мен FM қабылдағышты интернет қабылдағышқа ауыстыруды жөн көрдім. Мен Aliexpress-те бөлшектерді тез сатып алып, интернет-қабылдағышты жинадым.

Интернет қабылдағыш туралы. Қабылдағыштың жүрегі - ESP32 микроконтроллері. KA-радио микробағдарламасы. Бөлшектер маған 12 доллар тұрады. Құрастырудың қарапайымдылығы оны бірнеше күнде жинауға мүмкіндік берді. Жақсы және тұрақты жұмыс істейді. 10 айлық жұмыста ол бір-екі рет қана қатып қалды, содан кейін менің эксперименттерімнен ғана. Ыңғайлы және жақсы ойластырылған интерфейс смартфоннан және компьютерден басқаруға мүмкіндік береді. Бір сөзбен айтқанда, бұл тамаша интернет қабылдағыш.

Бәрі жақсы. Бірақ бір күні таңертең мен он мыңдаған радиостанцияларға қол жетімді болғанымен, қызықты станциялар жоқ деген қорытындыға келдім. Жүргізушілердің жарнамасы мен ақымақ әзілдері мені ренжітті. Бір станциядан екіншісіне үнемі секіру. Маған Spotify және Yandex.Music ұнайды. Бірақ өкініштісі, олар менің елімде жұмыс істемейді. Ал мен оларды интернет ресивер арқылы тыңдағым келеді.

Балалық шағым есіме түсті. Менде магнитофон мен екі ондаған кассеталар болды. Мен достарыммен кассета алмастым. Және бұл керемет болды. Мен аудио мұрағаттарымды тек интернет қабылдағышқа жіберу керек деп шештім. Әрине, аудио ойнатқышты немесе iPod-ты динамиктерге қосу және алаңдамау мүмкіндігі бар. Бірақ бұл біздің жолымыз емес! Мен қосқыштарды жек көремін)

Мен дайын шешімдерді іздей бастадым. Нарықта Radio-Tochka.com сайтынан өзіңіздің интернет радиоңызды жасау ұсынысы бар. Мен оны 5 күн бойы сынадым. Менің интернет қабылдағышыммен бәрі жақсы жұмыс істеді. Бірақ бағасы маған тартымды болмады. Мен бұл опциядан бас тарттым.

Мен хостингке 10 ГБ төледім. Мен mp3 файлдарымның аудио ағынын жіберетін нәрсеге сценарий жазуды шештім. Мен оны PHP тілінде жазуды шештім. Мен оны тез жазып, іске қостым. Барлығы жұмыс істеді. Керемет болды! Бірақ бір-екі күннен кейін хостинг әкімшілігінен хат алдым. Онда процессор минуттарының лимиті асып кеткені және жоғары тарифке көшу қажеттілігі айтылды. Скриптті жою керек болды және бұл опциядан бас тартты.

Бұл қалай болды? Мен радиосыз өмір сүре алмаймын. Егер олар басқа біреудің хостингінде сценарийді іске қосуға рұқсат бермесе, сізге өзіңіздің серверіңіз қажет. Қайда мен жаным қалаған нәрсені істеймін.

Менде батареясы жоқ ежелгі нетбук бар (CPU - 900 МГц, жедел жады - 512 Мб). Қария қазірдің өзінде 11 жаста. Сервер үшін қолайлы. Мен Ubuntu 12.04 орнатамын. Содан кейін мен Apache2 және php 5.3, samba орнатамын. Менің серверім дайын.

Мен Icecast-ты сынап көруді шештім. Мен ол туралы көп мана оқыдым. Бірақ маған қиын болды. Мен PHP сценарийі бар опцияға оралуды шештім. Бұл сценарийді жөндеуге бірнеше күн жұмсалды. Және бәрі тамаша жұмыс істеді. Содан кейін мен подкасттарды ойнату үшін сценарий жаздым. Маған ұнағаны сонша, шағын жобамен айналысуды жөн көрдім. Оны IWScast деп атады. Github сайтында жарияланған.

Сіздің жеке интернет радиоңыз

Барлығы өте қарапайым. Мен mp3 файлдарын және index.php файлын Apache түбірлік қалтасына /var/www/ көшіремін және олар кездейсоқ ойнатылады. Күні бойына шамамен 300 ән жеткілікті.
index.php файлы сценарийдің өзі болып табылады. Сценарий каталогтағы MP3 файлдарының барлық атауларын массивке оқиды. Аудио ағынды жасайды және MP3 файлдарының атын ауыстырады. Ән тыңдап, ұнатып қалатын кездер болады. Кім ән айтады деп ойлайсың? Мұндай жағдайда log.txt журналында тыңдалған тректер атауларының жазбасы бар
Толық сценарий коды

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

Егер сізге тректерді ретімен ойнату қажет болса, index.php ішіндегі жолға түсініктеме беруіңіз керек

shuffle($files); //Random on

Подкасттар үшін мен /var/www/podcast/ пайдаланамын index.php басқа сценарийі бар. Онда подкаст тректерін есте сақтау мүмкіндігі бар. Интернет қабылдағышты келесі рет қосқанда, келесі подкаст жолы ойнатылады. Сондай-ақ ойнатылған тректер журналы бар.
counter.dat файлында трек нөмірін көрсетуге болады және подкастты ойнату одан басталады.

Подкасттарды автоматты түрде жүктеп алу үшін талдаушылар жазды. Ол RSS-тен соңғы 4 жолды алып, жүктейді. Мұның бәрі смартфонда, IPTV приставкасында немесе браузерде тамаша жұмыс істейді.

Келесі күні таңертең тректегі ойнату орнын есте сақтау жақсы болар еді деген ой келді. Бірақ мен мұны PHP-де қалай жасау керектігін әлі білмеймін.

Сценарийді жүктеп алуға болады github.com/iwsys/IWScast

Ақпарат көзі: www.habr.com

пікір қалдыру