Өзүңүздүн интернет радиоңуз

Көптөрүбүз эртең менен радио укканды жакшы көрөбүз. Анан бир күнү эртең менен мен жергиликтүү FM радиостанцияларын уккум келбей турганын түшүндүм. Кызык эмес. Бирок бул адат зыяндуу болуп чыкты. Ал эми FM ресиверди интернет ресиверге алмаштырууну чечтим. Мен тез арада Aliexpressтен тетиктерди сатып алып, интернет ресиверди чогулттум.

Интернет кабылдагыч жөнүндө. Алуучунун жүрөгү ESP32 микроконтроллери болуп саналат. КА-радионун микропрограммасы. Бөлүктөр мага 12 доллар турат. Жыйноонун оцойлугу аны бир-эки кундун ичинде жыйноого мумкундук берди. Жакшы жана туруктуу иштейт. 10 ай иштегенде бир-эки жолу гана тоңду, анан менин эксперименттеримдин айынан гана. Ыңгайлуу жана жакшы ойлонулган интерфейс смартфондон жана компьютерден башкарууга мүмкүндүк берет. Бир сөз менен айтканда, бул сонун интернет-кабылдагыч.

Баары жакшы. Бирок бир күнү эртең менен мен он миңдеген радиостанцияларга кирүү мүмкүнчүлүгүнө ээ болгонуна карабастан, кызыктуу станциялар жок деген жыйынтыкка келдим. Алып баруучулардын жарнактары, келесоо тамашалары кыжырымды келтирди. Дайыма бир станциядан экинчи станцияга секирүү. Мага Spotify жана Yandex.Music жагат. Бирок өкүнүчтүүсү, алар менин өлкөдө иштебейт. А мен аларды интернет ресивер аркылуу уккум келет.

Балалыгымды эстедим. Менде магнитофон жана эки ондогон кассеталар бар болчу. Мен досторум менен кассеталарды алмаштырдым. Жана сонун болду. Мен аудио архивдеримди интернет ресиверге гана агылтышым керек деп чечтим. Албетте, аудио ойноткучту же iPodду динамиктерге туташтыруу мүмкүнчүлүгү бар жана кабатыр болбоңуз. Бирок бул биздин жолубуз эмес! Мен туташтыргычтарды жек көрөм)

Мен даяр чечимдерди издей баштадым. Базарда Radio-Tochka.com сайтынан өзүңүздүн интернет радиоңузду түзүү сунушу бар. Мен аны 5 күн сынап көрдүм. Менин интернет ресиверим менен баары жакшы иштеди. Бирок баасы мага жагымдуу болгон жок. Мен бул варианттан баш тарттым.

Мен 10 ГБ хостинг төлөдүм. Мен mp3 файлдарымдын аудио агымын агылтуучу нерсеге сценарий жазууну чечтим. Мен аны PHPде жазууну чечтим. Мен аны тез эле жазып, ишке киргиздим. Баары иштеди. Бул сонун болду! Бирок бир-эки күндөн кийин мен хостинг администрациясынан кат алдым. Анда процессорлордун мүнөттөрүнүн чеги ашып кеткени, тарифти жогорулатуу зарылдыгы айтылган. Скрипт жок кылынышы керек болчу жана бул параметрден баш тартты.

Бул кантип болду? Мен радиосуз жашай албайм. Эгер алар башка бирөөнүн хостингинде скриптти иштетүүгө уруксат бербесе, анда сизге өз сервериңиз керек. Кайда жаным каалаганын кылам.

Менде батарейкасы жок байыркы нетбук бар (CPU - 900 MHz, RAM - 512 Mb). Карыя буга чейин 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

Source: www.habr.com

Комментарий кошуу