Ваше сопствено интернет радио

Многумина од нас сакаат да слушаат радио наутро. И тогаш едно убаво утро сфатив дека не сакам да слушам локални FM радио станици. Не се заинтересирани. Но, навиката се покажа како штетна. И решив да го заменам FM ресиверот со Интернет ресивер. Брзо купив делови на Aliexpress и составив Интернет ресивер.

За интернет ресиверот. Срцето на ресиверот е микроконтролерот ESP32. Фирмвер од КА-радио. Деловите ме чинат 12 долари. Леснотијата на склопување ми овозможи да го склопам за неколку дена. Работи добро и стабилно. За 10 месеци работа, замрзна само неколку пати, а потоа само поради моите експерименти. Удобниот и добро осмислен интерфејс ви овозможува да контролирате од паметен телефон и компјутер. Со еден збор, ова е прекрасен Интернет приемник.

Се е во ред. Но, едно рано утро дојдов до заклучок дека и покрај тоа што имав пристап до десетици илјади радио станици, немаше интересни станици. Ме изнервира рекламирањето и глупавите шеги на водителките. Постојано скокање од една на друга станица. Ми се допаѓаат Spotify и Yandex.Music. Но, тажното е што тие не работат во мојата земја. И јас би сакал да ги слушам преку Интернет ресиверот.

Се сетив на моето детство. Имав магнетофон и дваесетина касети. Разменив касети со пријателите. И беше прекрасно. Решив дека треба да ги пренесувам моите аудио архиви само на Интернет-приемник. Секако, постои опција да поврзете аудио плеер или iPod на звучниците и да не се грижите. Но, ова не е наш начин! Мразам поврзување конектори)

Почнав да барам готови решенија. Има понуда на пазарот да креирате сопствено интернет радио од Radio-Tochka.com. Го тестирав 5 дена. Сè работеше добро со мојот интернет ресивер. Но, цената не ми беше привлечна. Ја одбив оваа опција.

Имам платено хостинг 10 GB. Решив да напишам скрипта за нешто што ќе го пренесува аудио-стримот на моите mp3-датотеки. Решив да го напишам во PHP. Брзо го напишав и го лансирав. Сè функционираше. Беше кул! Но, неколку дена подоцна добив писмо од администрацијата на хостинг. Се вели дека е надмината границата на процесорските минути и потребата да се надгради на повисока тарифа. Скриптата мораше да се избрише и оваа опција беше напуштена.

Како се случи тоа? Не можам да живеам без радио. Ако тие не ви дозволуваат да ја извршите скриптата на туѓ хостинг, тогаш ви треба сопствен сервер. Каде што ќе правам што ми сака душата.

Имам древен нетбук без батерија (процесор - 900 MHz, RAM - 512 Mb). Старецот веќе има 11 години. Погоден за сервер. Го инсталирам Ubuntu 12.04. Потоа инсталирам Apache2 и php 5.3, samba. Мојот сервер е подготвен.

Решив да го пробам Icecast. Читав многу мана на него. Но, ми беше тешко. И решив да се вратам на опцијата со PHP скрипта. Неколку дена беа потрошени за дебагирање на оваа скрипта. И сè функционираше одлично. Потоа напишав и сценарио за пуштање подкасти. И ми се допадна толку многу што решив да направам мал проект. Нарече IWScast. Објавено на github.

Ваше сопствено интернет радио

Сè е многу едноставно. Ги копирам mp3-датотеките и датотеката index.php во root фолдерот 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, можете да го наведете бројот на песната и репродукцијата на подкаст ќе започне од неа.

Напиша парсери за автоматско преземање на подкасти. Ги зема најновите 4 песни од RSS и ги презема. Сето ова функционира одлично на паметен телефон, IPTV сет-топ кутија или во прелистувач.

Пред некое утро ми текна дека би било одлично да се сетам на позицијата за репродукција на песна. Но, сè уште не знам како да го направам ова во PHP.

Скриптата може да се преземе github.com/iwsys/IWScast

Извор: www.habr.com

Додадете коментар