Twoje własne radio internetowe

Wielu z nas lubi słuchać radia o poranku. I wtedy pewnego pięknego poranka zdałem sobie sprawę, że nie chcę słuchać lokalnych stacji radiowych FM. Nie zainteresowany. Ale nawyk okazał się szkodliwy. I zdecydowałem się na wymianę odbiornika FM na odbiornik internetowy. Szybko kupiłem części na Aliexpress i zmontowałem odbiornik internetowy.

O odbiorniku internetowym. Sercem odbiornika jest mikrokontroler ESP32. Firmware od KA-radia. Części kosztowały mnie 12 dolarów. Łatwość montażu pozwoliła mi złożyć go w ciągu kilku dni. Działa dobrze i stabilnie. W ciągu 10 miesięcy pracy zamarzł tylko kilka razy i to tylko na skutek moich eksperymentów. Wygodny i przemyślany interfejs pozwala na sterowanie z poziomu smartfona i komputera. Jednym słowem jest to wspaniały odbiornik internetowy.

Wszystko jest w porządku. Ale pewnego ranka doszedłem do wniosku, że pomimo dostępu do kilkudziesięciu tysięcy stacji radiowych, nie ma tam żadnych interesujących stacji. Denerwowały mnie reklamy i głupie żarty prezenterów. Ciągłe przeskakiwanie z jednej stacji na drugą. Lubię Spotify i Yandex.Music. Ale smutne jest to, że nie działają w moim kraju. A chciałbym ich posłuchać przez odbiornik internetowy.

Przypomniało mi się moje dzieciństwo. Miałem magnetofon i dwa tuziny kaset. Wymieniałem kasety ze znajomymi. I było cudownie. Zdecydowałem, że muszę przesyłać strumieniowo swoje archiwa audio tylko do odbiornika internetowego. Oczywiście istnieje możliwość podłączenia do głośników odtwarzacza audio lub iPoda i nie ma się o co martwić. Ale to nie jest nasza droga! Nienawidzę łączenia złączy)

Zacząłem szukać gotowych rozwiązań. Na rynku dostępna jest oferta stworzenia własnego radia internetowego z Radio-Tochka.com. Testowałem to przez 5 dni. Wszystko działało dobrze z moim odbiornikiem internetowym. Jednak cena nie była dla mnie atrakcyjna. Odrzuciłem tę opcję.

Zapłaciłem za hosting 10 GB. Postanowiłem napisać skrypt na coś, co będzie przesyłać strumieniowo strumień audio moich plików mp3. Postanowiłem napisać to w PHP. Szybko to napisałem i uruchomiłem. Wszystko działało. To było świetne! Ale kilka dni później otrzymałem list od administracji hostingowej. Stwierdzono, że został przekroczony limit minut procesora i konieczność przejścia na wyższą taryfę. Skrypt musiał zostać usunięty i porzucono tę opcję.

Jak to się stało? Nie mogę żyć bez radia. Jeśli nie pozwalają na uruchomienie skryptu na cudzym hostingu, potrzebujesz własnego serwera. Gdzie będę robić to, czego pragnie moja dusza.

Mam starego netbooka bez baterii (procesor - 900 MHz, RAM - 512 Mb). Starzec ma już 11 lat. Nadaje się na serwer. Instaluję Ubuntu 12.04. Następnie instaluję Apache2 i php 5.3, sambę. Mój serwer jest gotowy.

Postanowiłem spróbować Icecasta. Czytałem na ten temat dużo many. Ale wydawało mi się to trudne. I postanowiłem wrócić do opcji ze skryptem PHP. Debugowanie tego skryptu zajęło kilka dni. I wszystko działało świetnie. Następnie napisałem także skrypt do odtwarzania podcastów. I tak mi się to spodobało, że zdecydowałem się zrobić mały projekt. Nazwał to IWScast. Opublikowano na githubie.

Twoje własne radio internetowe

Wszystko jest bardzo proste. Kopiuję pliki mp3 i plik Index.php do folderu głównego Apache /var/www/ i są one odtwarzane losowo. Około 300 utworów wystarczy na mniej więcej cały dzień.
Plik indeks.php jest samym skryptem. Skrypt wczytuje do tablicy wszystkie nazwy plików MP3 w katalogu. Tworzy strumień audio i zastępuje nazwy plików MP3. Są chwile, kiedy słuchasz piosenki i podoba ci się. Jak myślisz, kto śpiewa? W takim przypadku w dzienniku log.txt zapisywane są nazwy odsłuchiwanych utworów
Kompletny kod skryptu

<?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: 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);
}
?>

Jeśli chcesz, aby utwory były odtwarzane w kolejności, musisz skomentować linię w pliku Index.php

shuffle($files); //Random on

Do podcastów używam /var/www/podcast/ Istnieje inny skrypt Index.php. Posiada funkcję zapamiętywania utworów podcastów. Następny utwór podcastu zostanie odtworzony po następnym włączeniu odbiornika internetowego. Dostępny jest także dziennik odtwarzanych utworów.
W pliku counter.dat możesz określić numer utworu i od niego rozpocznie się odtwarzanie podcastu.

Napisałem parsery do automatycznego pobierania podcastów. Pobiera najnowsze 4 utwory z kanału RSS i pobiera je. Wszystko to świetnie działa na smartfonie, dekoderze IPTV, czy w przeglądarce.

Któregoś ranka przyszło mi do głowy, że wspaniale byłoby zapamiętać pozycję odtwarzania na ścieżce. Ale nie wiem jeszcze, jak to zrobić w PHP.

Skrypt można pobrać github.com/iwsys/IWScast

Źródło: www.habr.com

Dodaj komentarz