Сваё інтэрнэт радыё

Многія з нас па раніцах любяць слухаць радыё. І вось адной раніцай я зразумеў, што не хачу слухаць мясцовыя ФМ радыёстанцыі. Не цікава. Але звычка аказалася шкоднай. І я вырашыў замяніць ФМ-прымач інтэрнэт прымачом. Хуценька купіў дэталі на Аліэкспрэс і сабраў інтэрнэт прыёмнік.

Аб інтэрнэце прыёмніку. Сэрца прымача - мікракантролер ESP32. Прашыўка ад KA-radio. Кошт дэталяў мне абышлася ў 12 долараў. Прастата зборкі мне дазволіла сабраць яго за пару дзён. Добра і стабільна працуе. За 10 месяцаў працы завісла толькі пару разоў і тое толькі з-за маіх эксперыментаў. Зручны і прадуманы інтэрфейс дазваляе кіраваць са смартфона і кампутара. Адным словам гэта цудоўны інтэрнэт прыёмнік.

Усё класна. Але адной раніцай прыйшоў да высновы, што пры наяўнасці доступу да дзясяткаў тысяч радыёстанцый няма цікавых станцый. Мяне раздражняла рэклама, тупыя жарты кіроўных. Увесь час скакаў з адной станцыі на іншую. Мне падабаецца Spotify і Яндэкс.Музыка. Але смутак у тым, што не працуюць яны ў маёй краіне. І хацеў бы іх слухаць праз інтэрнэт прымач.

Я ўспомніў сваё дзяцінства. У мяне быў магнітафон і два дзясяткі касет. Касетамі мяняўся з сябрамі. І было цудоўна. Я вырашыў, што трэба зрабіць стрымінг сваіх аўдыёархіваў толькі на інтэрнэт прымач. Вядома, ёсць варыянт падлучыць аўдыяплэер або ipod да калонак і не парыцца. Але гэта не наш шлях! Ненавіджу падключаць раздымы)

Пачаў шукаць гатовыя рашэнні. На рынку ёсць прапанова стварыць сваё інтэрнет-радыё ад Radio-Tochka.com. Я патэставаў 5 дзён. З маім інтэрнэт прымачом усё працавала выдатна. Але кошт аказаўся для мяне не прывабным. Адмовіўся ад гэтага варыянта.

У мяне ёсць аплачаны хостынг 10 GB. Вырашыў напісаць скрыпт на чым-небудзь, што б быў стрымінг аўдыё патоку маіх mp3 файлаў. Вырашыў напісаць на PHP. Хуценька напісаў і запусціў. Усё зарабіла. Было класна! Але праз пару дзён прыйшоў ліст ад адміністрацыі хостынгу. У ім гаварылася аб перавышэнні ліміту працэсарных хвілін і неабходнасці перайсці на тарыф вышэй. Скрыпт прыйшлося выдаліць і адмовіцца ад гэтага варыянту.

Ну як гэта? Не магу жыць без радыё. Калі не даюць запускаць скрыпт на чужым хостынгу, значыць трэба свой сервак. Дзе я буду рабіць тое, што душа мая пажадае.

У мяне нетбук старажытны ляжыць без акумулятара (CPU – 900 MHz, RAM – 512 Mb). Дзядку 11 гадоў ужо. Для сервака падыдзе суцэль. Стаўлю Ubuntu 12.04/2. Затым усталёўваю Apache5.3 і php XNUMX, samba. Мой сервак гатовы.

Вырашыў паспрабаваць Icecast. Шмат чытаў маны па ім. Але мне ён здаўся складаным. І я вырашыў вярнуцца да варыянту са скрыптам на PHP. Пару дзён было выдаткавана на адладку гэтага скрыпту. І ўсё выдатна зарабіла. Затым я яшчэ напісаў скрыпт для прайгравання падкастаў. І мне гэта так спадабалася, што вырашыў зрабіць невялікі праект. Назваў яго IWScast. Выклаў на github.

Сваё інтэрнэт радыё

Усё вельмі проста. Файлы mp3 і файл index.php капіюю ў каранёвую тэчку апача /var/www/ і яны рандомна прайграваюцца. Каля 300 песень хапае на ўвесь дзень прыблізна.
Файл index.php - гэта і ёсць сам скрыпт. Скрыпт счытвае ўсе імёны мр3 файлаў дырэкторыі ў масіў. Стварае аўдыё паток і падстаўляе імёны мр3 файлаў. Бываюць моманты, калі слухаеш песню і табе яна падабаецца. Ты думаеш, хто гэта спявае? Для такога выпадку ёсць запіс назваў праслуханых трэкаў у лог 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

Крыніца: habr.com

Дадаць каментар