Своё интернет радио

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

О интернет приемнике. Сердце приемника — микроконтроллер 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.

image

Все очень просто. Файлы 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
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 32

    0

    Тут скорее подошел бы аналог raspberry pi, в простой конфигурации примерно те же деньги, но решил бы обе задачи, и прослушивание интернет радио, и воспроизведние локальных файлов.

      0
      Согласен на 100%. Raspberry pi — замечательная вещь! Но нет его. Что было под рукой, то и использовал.
      0
      Можно подробнее, что нужно купить на али и как это собрать? Слушаю Di.fm но со смартфона по Bluetooth, хочется убрать смартфон, а лучше и вообще wifi
        0

        Увы, DI FM (если речь про Digitally Imported, который "Eliminate the ads, boost the quality!") отпилили все свои потоковые сервера и превратили сервис в банальный браузерный плеер с рандомайзером.
        До того их можно было просто стримить любым интернет-радио, чуть позже — через прокси с добавлением заголовка реферера.
        Теперь в лучшем случае поставить raspberry pi с браузером под это дело, если потянет.

          0
          Позвольте поправить. Описанное Вами касается только бесплатной модели использования. Платная подписка спасёт «отца русской демократии».
          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.
          0
          Очень подробная инструкция на ютубе
          Собирал по этой инструкции. Там все описано. Что и где купить, как прошить и собрать.
            0
            Элементарно: google->«KA-radio»
              0
              присоединяюсь к вопросу и еще спрошу — как настроить собранный приемник на интернет радиостанции и на локальное воспроизведение?
                0
                Как настроить собранный приемник на интернет радиостанции?
                Смотрите здесь

                Как настроить собранный приемник на локальное воспроизведение?
                Где вводите адреса интернет радиостанций нужно ввести
                192.168.3.10/index.php

                192.168.3.10 — это ip адрес вашего компьютера, где установлен сервер Apache

                +1

                Могу запилить пост в песочницу, с комплектующими, схемой, прошивкой. Если нужно обществу. Хотя в интернете полно информации, только собирать надо кратко в кучу.


                Моя шарманка на кухне

                За IWScast спасибо, соберу на raspberry pi первой версии.

                +2
                Плюсанул. Но, на мой взгляд, статья была бы лучше, если было бы больше технических подробностей. Не хватает того, как устроен скрипт. Какие были проблемы при написании/отладке, как были решены, и т.д.
                  +1

                  Замысел отличный! Но, мне кажется, что в существующем виде статья больше похожа на отчет по практике на первом курсе.


                  Добавьте технических подробностей (хотя бы ссылки на тексты скриптов) и статья оживет.

                    0
                    Согласен с Вами. Это моя первая статья.
                    Ссылка есть в статье. github.com/iwsys/IWScast
                    +1
                    Переписал. Добавил технических подробностей. Ошибки были в основном из-за неправильных прав на доступ к файлам. При этом создавались многомегабайтные логи ошибок в apache, из-за этого сервер подвисал.
                      0
                      Интересно. Не думал, что это можно сделать таким простым скриптом, возьму на заметку.
                      Еще можно маленькую веб-мордочку прикрутить, на которой исполнитель, трек, и список последних десятка треков. Просто отображать в ней хвост log.txt.
                    0
                    а можно ссылку на поток?
                      –1
                      192.168.3.10/index.php, она работает только в локальной сети
                        0
                        Жаль, ну это тогда интранет радио, а совсем не «глобальный широковещательный». Было бы занятно послушать оцифровки со старых кассет.
                          0
                          Покупаете внешний ip-адрес у провайдера и у вас глобальное широковещательное радио. Никаких проблем не вижу.
                            0
                            Проблема в контенте. Кассеты у Вас!
                          0
                          Остается заказать провайдеру услугу внешнего IP и прокинуть порт через роутер, если есть. И слушать откуда угодно :)
                          О, уже ответили…
                        0
                        Интересно, но ice cast как по мне все таки лучше.
                        А еще можно музыку сложить на удаленном диске, прицепить его по webdav и вообще будет счастье.
                        Я в свое время описывал набор своих костылей для радио.

                        Нужен iceCast + liquidsoap и будет красота.
                          0
                          Согласен. Icecast можно сказать это профессиональное решение.
                          Много известных радио-компаний используют его.
                          Мне он показался сложным. Мой скрипт, который занимает 888 байт вполне выполняет поставленную мной задачу. И надо только скопировать файл index.php в корень апача.
                            0
                            Никак не могу понять назначение icecast. У меня на серваке крутится mpd, натравленный на папку с Аэростатом. Пробовал его «пропускать» через icecast — преимуществ не обнаружил.
                              0

                              В теории, айскаст должен лучше справляться с нагрузкой, плюс с ним не замечал такой задержки, как у торчащего наружу mpd. Вроде как и играть из файлов айскаст тоже сам умеет.

                                0
                                По поводу нагрузки. Одновременно подсоединил 4 устройства. Работало нормально. Загрузка процессора 10-20%. Для моего использования хватает на 100%

                                Затем ради интереса пробросил порт на роутере. И через мобильный интернет запустил воспроизведение музыки на смартфоне в браузере. Все работало шикарно.
                                  0

                                  Это был ответ на вопрос "нафига айскаст, когда можно mpd высунуть наружу".


                                  С вашей-то задачей айскаст вообще мимо кассы и не нужен.

                            0
                            Не совсем радио, а скорее open source аудио стриминговый сервис:
                            koel.phanan.net

                            Когда-то ставил по-баловаться — отлично работал. Выглядит тоже хорошо.
                              0
                              Запилите пожалуйста плагин под AIMP? сам искал как сделать подобное, но знаний написать самому не было
                                0
                                Теоретически должно работать с любым аудио-плеером, в котором есть функционал воспроизведения потоков. Без всяких плагинов. К примеру mplayer воспроизводит замечательно, я проверял. Я AIMPом 10 лет не пользовался.
                                0
                                О интернет приемнике. Сердце приемника — микроконтроллер ESP32. Прошивка от KA-radio. Стоимость деталей мне обошлась в 12 долларов. Простота сборки мне позволила собрать его за пару дней.
                                А можно подробнее об этом?
                                  0
                                  Очень подробная инструкция на ютубе
                                  Собирал по этой инструкции. Там все описано. Что и где купить, как прошить и собрать.

                                  Only users with full accounts can post comments. Log in, please.