Собствено интернет радио

Много от нас обичат да слушат радио сутрин. И ето, в едно прекрасно утро осъзнах, че не искам да слушам местните FM радиостанции. Не е интересно. Но привичката се оказа вредна. И реших да заменя FM приемника с интернет приемник. Бързо купих детайлите от Алиекспрес и сглобих интернет приемника.

За интернет приемника. Сърцето на приемника е микроконтролерът 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 в основната папка на apache /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 можеш да укажеш номера на трака и от него ще започне възпроизвеждането на подкастите.

Написах парсери за автоматично изтегляне на подкасти. Той взима 4-те последни записа от RSS и ги изтегля. Всичко това прекрасно работи на смартфон, IPTV приставка и в браузър.

Напоследък сутрин ми дойде на ум, че би било чудесно да реализирам запомняне на позицията на възпроизвеждането на записа. Но все още не знам как да го направя на PHP.

Скриптът може да бъде изтеглен github.com/iwsys/IWScast

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster