О интернет приемнике. Сердце приемника — микроконтроллер 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: en\r\n"
)
)
);
//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
Комментарии (29)
dikiykot
17.10.2019 21:16Можно подробнее, что нужно купить на али и как это собрать? Слушаю Di.fm но со смартфона по Bluetooth, хочется убрать смартфон, а лучше и вообще wifi
vladkorotnev
18.10.2019 04:37Увы, DI FM (если речь про Digitally Imported, который "Eliminate the ads, boost the quality!") отпилили все свои потоковые сервера и превратили сервис в банальный браузерный плеер с рандомайзером.
До того их можно было просто стримить любым интернет-радио, чуть позже — через прокси с добавлением заголовка реферера.
Теперь в лучшем случае поставить raspberry pi с браузером под это дело, если потянет.lord_of_demons
18.10.2019 09:18Позвольте поправить. Описанное Вами касается только бесплатной модели использования. Платная подписка спасёт «отца русской демократии».
Premium allows you to stream channels using popular hardware players including Sonos, Squeezebox, Denon, Phillips, Pioneer, Roku, or and that support vTuner or TuneIn. You can also use audio players like iTunes, Winamp, VLC, and others.
Backuper
18.10.2019 09:04присоединяюсь к вопросу и еще спрошу — как настроить собранный приемник на интернет радиостанции и на локальное воспроизведение?
kasigor Автор
18.10.2019 09:26Как настроить собранный приемник на интернет радиостанции?
Смотрите здесь
Как настроить собранный приемник на локальное воспроизведение?
Где вводите адреса интернет радиостанций нужно ввести
192.168.3.10/index.php
192.168.3.10 — это ip адрес вашего компьютера, где установлен сервер Apache
Salavat
18.10.2019 09:07+1Могу запилить пост в песочницу, с комплектующими, схемой, прошивкой. Если нужно обществу. Хотя в интернете полно информации, только собирать надо кратко в кучу.
Моя шарманка на кухнеkuza2000
17.10.2019 23:53+1Плюсанул. Но, на мой взгляд, статья была бы лучше, если было бы больше технических подробностей. Не хватает того, как устроен скрипт. Какие были проблемы при написании/отладке, как были решены, и т.д.
vin2809
18.10.2019 07:48Замысел отличный! Но, мне кажется, что в существующем виде статья больше похожа на отчет по практике на первом курсе.
Добавьте технических подробностей (хотя бы ссылки на тексты скриптов) и статья оживет.
kasigor Автор
18.10.2019 09:38Согласен с Вами. Это моя первая статья.
Ссылка есть в статье. github.com/iwsys/IWScast
kasigor Автор
18.10.2019 10:34Переписал. Добавил технических подробностей. Ошибки были в основном из-за неправильных прав на доступ к файлам. При этом создавались многомегабайтные логи ошибок в apache, из-за этого сервер подвисал.
kuza2000
19.10.2019 17:16Интересно. Не думал, что это можно сделать таким простым скриптом, возьму на заметку.
Еще можно маленькую веб-мордочку прикрутить, на которой исполнитель, трек, и список последних десятка треков. Просто отображать в ней хвост log.txt.
ibrin
18.10.2019 00:16а можно ссылку на поток?
kasigor Автор
18.10.2019 09:29192.168.3.10/index.php, она работает только в локальной сети
ibrin
19.10.2019 11:09Жаль, ну это тогда интранет радио, а совсем не «глобальный широковещательный». Было бы занятно послушать оцифровки со старых кассет.
kuza2000
19.10.2019 17:08Остается заказать провайдеру услугу внешнего IP и прокинуть порт через роутер, если есть. И слушать откуда угодно :)
О, уже ответили…
UrbanRider
18.10.2019 10:46Интересно, но ice cast как по мне все таки лучше.
А еще можно музыку сложить на удаленном диске, прицепить его по webdav и вообще будет счастье.
Я в свое время описывал набор своих костылей для радио.
Нужен iceCast + liquidsoap и будет красота.kasigor Автор
18.10.2019 10:59Согласен. Icecast можно сказать это профессиональное решение.
Много известных радио-компаний используют его.
Мне он показался сложным. Мой скрипт, который занимает 888 байт вполне выполняет поставленную мной задачу. И надо только скопировать файл index.php в корень апача.
JanisV
18.10.2019 13:23Никак не могу понять назначение icecast. У меня на серваке крутится mpd, натравленный на папку с Аэростатом. Пробовал его «пропускать» через icecast — преимуществ не обнаружил.
kot5150
18.10.2019 14:08Не совсем радио, а скорее open source аудио стриминговый сервис:
koel.phanan.net
Когда-то ставил по-баловаться — отлично работал. Выглядит тоже хорошо.
maxixx
19.10.2019 09:40Запилите пожалуйста плагин под AIMP? сам искал как сделать подобное, но знаний написать самому не было
kasigor Автор
19.10.2019 09:44Теоретически должно работать с любым аудио-плеером, в котором есть функционал воспроизведения потоков. Без всяких плагинов. К примеру mplayer воспроизводит замечательно, я проверял. Я AIMPом 10 лет не пользовался.
Tachyon
21.10.2019 09:22О интернет приемнике. Сердце приемника — микроконтроллер ESP32. Прошивка от KA-radio. Стоимость деталей мне обошлась в 12 долларов. Простота сборки мне позволила собрать его за пару дней.
А можно подробнее об этом?
alexander222
Тут скорее подошел бы аналог raspberry pi, в простой конфигурации примерно те же деньги, но решил бы обе задачи, и прослушивание интернет радио, и воспроизведние локальных файлов.
kasigor Автор
Согласен на 100%. Raspberry pi — замечательная вещь! Но нет его. Что было под рукой, то и использовал.