Своє інтернет радіо

Багато хто з нас вранці любить слухати радіо. І ось одного чудового ранку я усвідомив, що не хочу слухати місцеві ФМ радіостанції. Не цікаво. Але звичка виявилася шкідливою. І я вирішив замінити ФМ-приймач інтернет приймачем. Швиденько купив деталі на Аліекспрес та зібрав інтернет приймач.

Про інтернет приймач. Серце приймача - мікроконтролер 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. Потім встановлюю Apache2 та php 5.3, 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

Додати коментар або відгук