Много от нас обичат да слушат радио сутрин. И ето, в едно прекрасно утро осъзнах, че не искам да слушам местните ФМ радиостанции. Не е интересно. Но навикът се оказа вреден. Реших да заменя ФМ приемника с интернет приемник. Бързо купих части от Алиекспрес и сглобих интернет приемника.
За интернет приемника. Сърцето на приемника е микроконтролер 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. .

Всичко е много просто. Копирам mp3 файловете и файла index.php в основната папка на апача /var/www/ и те се възпроизвеждат на случаен принцип. Около 300 песни стигат за целия ден.
Файлът index.php е именно самият скрипт. Скриптът прочита всички имена на mp3 файлове от директорията в масив. Създава аудиопоток и подставя имената на mp3 файловете. Понякога, когато слушаш песен и ти харесва, се чудиш, кой я изпълнява? За такава ситуация има запис на имената на изслушаните песни в лог файла 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 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.
Скриптът може да се изтегли
Източник: habr.com
