Многие из нас любят слушать радио по утрам.
И вот в одно прекрасное утро я понял, что не хочу слушать местные FM-радиостанции.
Не интересно.
Но привычка оказалась вредной.
И я решил заменить FM-приемник на интернет-приемник.
Быстро купил детали на Алиэкспресс и собрал интернет-ресивер.
Об интернет-приемнике.
Сердцем ресивера является микроконтроллер ESP32. Прошивка от КА-радио.
Детали обошлись мне в 12 долларов.
Легкость сборки позволила мне собрать его за пару дней.
Работает хорошо и стабильно.
За 10 месяцев работы зависало всего пару раз, и то только из-за моих экспериментов.
Удобный и продуманный интерфейс позволяет управлять со смартфона и компьютера.
Одним словом, это замечательный интернет-приемник.
Все хорошо.
Но однажды ранним утром я пришел к выводу, что, несмотря на доступ к десяткам тысяч радиостанций, интересных станций не было.
Меня раздражала реклама и глупые шутки ведущих.
Постоянно перескакиваю с одной станции на другую.
Мне нравится Spotify и Яндекс.
Музыка.
Но печально то, что они не работают в моей стране.
И хотелось бы их послушать через интернет-ресивер.
Я вспомнил свое детство.
У меня был магнитофон и две дюжины кассет. Я обменялся кассетами с друзьями.
И это было чудесно.
Я решил, что мне нужно стримить свои аудиоархивы только на интернет-ресивер.
Конечно, есть возможность подключить к колонкам аудиоплеер или iPod и не волноваться.
Но это не наш путь! Ненавижу соединять разъемы) Я начал искать готовые решения.
На рынке есть предложение создать свое интернет-радио от Radio-Tochka.com. Я тестировал его 5 дней.
С моим интернет-приемником все работало нормально.
Но цена меня не привлекла.
Я отказался от этого варианта.
Я оплатил хостинг 10 ГБ.
Я решил написать сценарий для потоковой передачи аудиопотока моих mp3-файлов.
Я решил написать это на PHP. Я быстро написал его и запустил.
Все работало.
Это было круто! Но через пару дней мне пришло письмо от администрации хостинга.
Там говорилось, что превышен лимит процессорных минут и необходимо перейти на более высокий тариф.
Скрипт пришлось удалить и отказаться от этого варианта.
Как это произошло? Я не могу жить без радио.
Если вам не дают запустить скрипт на чужом хостинге, то вам нужен свой сервер.
Где я буду делать то, что желает моя душа.
У меня древний нетбук без батареи (процессор - 900 МГц, оперативная память - 512 Мб).
Старику уже 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 есть запись названий прослушанных треков.
Полный код скрипта
Если вам нужно, чтобы треки воспроизводились по порядку, то нужно закомментировать строку в index.php<Э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); } ?>
shuffle($files); //Random on
Для подкастов я использую /var/www/podcast/.
Есть еще один скрипт index.php. Есть функция запоминания треков подкаста.
При следующем включении интернет-приемника будет воспроизводиться следующая дорожка подкаста.
Также имеется журнал проигранных треков.
В файле counter.dat можно указать номер трека и с него начнется воспроизведение подкаста.
Написал парсеры для автоматического скачивания подкастов.
Он берет последние 4 трека из RSS и загружает их.
Все это прекрасно работает на смартфоне, IPTV-приставке или в браузере.
На днях мне пришло в голову, что было бы здорово запомнить позицию воспроизведения трека.
Но я пока не знаю, как это сделать на PHP. Скрипт можно скачать github.com/iwsys/IWScast Теги: #linux #стриминг #php #Apache #интернет-радио
-
Откуда Приходит Внутренний Голос?
19 Oct, 24 -
Сетевой Предприниматель
19 Oct, 24 -
Neonray: Улучшен Веб-Доступ
19 Oct, 24 -
Как Робот 3D-Сканирует
19 Oct, 24