Din egen internettradio

Mange av oss liker å høre på radio om morgenen. Og så en vakker morgen innså jeg at jeg ikke ville høre på lokale FM-radiostasjoner. Ikke interessert. Men vanen viste seg å være skadelig. Og jeg bestemte meg for å erstatte FM-mottakeren med en Internett-mottaker. Jeg kjøpte raskt deler på Aliexpress og satte sammen en Internett-mottaker.

Om Internett-mottakeren. Hjertet til mottakeren er ESP32-mikrokontrolleren. Firmware fra KA-radio. Delene kostet meg $12. Den enkle monteringen gjorde at jeg kunne montere den på et par dager. Fungerer godt og stabilt. I løpet av 10 måneders arbeid frøs det bare et par ganger, og da kun på grunn av mine eksperimenter. Et praktisk og gjennomtenkt grensesnitt lar deg styre fra smarttelefon og datamaskin. Kort sagt, dette er en fantastisk Internett-mottaker.

Alt er bra. Men en tidlig morgen kom jeg til den konklusjonen at til tross for at jeg hadde tilgang til titusenvis av radiostasjoner, var det ingen interessante stasjoner. Jeg ble irritert over reklamene og de dumme vitsene til programlederne. Stadig hopper fra en stasjon til en annen. Jeg liker Spotify og Yandex.Music. Men det triste er at de ikke fungerer i mitt land. Og jeg vil gjerne høre på dem via Internett-mottakeren.

Jeg husket barndommen min. Jeg hadde en båndopptaker og to dusin kassetter. Jeg byttet kassetter med venner. Og det var fantastisk. Jeg bestemte meg for at jeg bare måtte streame lydarkivene mine til en Internett-mottaker. Selvfølgelig er det en mulighet for å koble en lydspiller eller iPod til høyttalerne og ikke bekymre deg. Men dette er ikke vår måte! Jeg hater å koble til kontakter)

Jeg begynte å lete etter ferdige løsninger. Det er et tilbud på markedet om å lage din egen internettradio fra Radio-Tochka.com. Jeg testet den i 5 dager. Alt fungerte bra med internettmottakeren min. Men prisen var ikke attraktiv for meg. Jeg takket nei til dette alternativet.

Jeg har betalt hosting 10 GB. Jeg bestemte meg for å skrive et manus på noe som ville streame lydstrømmen til mp3-filene mine. Jeg bestemte meg for å skrive det i PHP. Jeg skrev den raskt og lanserte den. Alt fungerte. Det var kult! Men et par dager senere fikk jeg et brev fra vertsadministrasjonen. Den sa at grensen for prosessorminutter ble overskredet og behovet for å oppgradere til en høyere tariff. Skriptet måtte slettes og dette alternativet forlates.

Hvordan skjedde det? Jeg kan ikke leve uten radio. Hvis de ikke tillater deg å kjøre skriptet på andres hosting, trenger du din egen server. Hvor jeg vil gjøre det sjelen min ønsker.

Jeg har en eldgammel netbook uten batteri (CPU - 900 MHz, RAM - 512 Mb). Den gamle mannen er allerede 11 år gammel. Egnet for en server. Jeg installerer Ubuntu 12.04. Så installerer jeg Apache2 og php 5.3, samba. Serveren min er klar.

Jeg bestemte meg for å prøve Icecast. Jeg leste mye mana om det. Men jeg syntes det var vanskelig. Og jeg bestemte meg for å gå tilbake til alternativet med et PHP-skript. Et par dager ble brukt på å feilsøke dette skriptet. Og alt fungerte utmerket. Så skrev jeg også et manus for å spille podcaster. Og jeg likte det så godt at jeg bestemte meg for å gjøre et lite prosjekt. Kalte det IWScast. Lagt ut på github.

Din egen internettradio

Alt er veldig enkelt. Jeg kopierer mp3-filene og index.php-filen til Apache-rotmappen /var/www/ og de spilles av tilfeldig. Omtrent 300 sanger er nok for omtrent hele dagen.
index.php-filen er selve skriptet. Skriptet leser alle navnene på MP3-filer i en katalog inn i en matrise. Oppretter en lydstrøm og erstatter navnene på MP3-filer. Det er tider når du hører på en sang og liker den. Hvem tror du synger? For et slikt tilfelle er det en registrering av navnene på lyttede spor i loggen log.txt
Komplett skriptkode

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

Hvis du trenger at sporene spilles i rekkefølge, må du kommentere linjen i index.php

shuffle($files); //Random on

For podcaster bruker jeg /var/www/podcast/ Det er et annet skript index.php. Den har memorering av podcastspor. Neste gang du slår på Internett-mottakeren, spilles neste podcastspor. Det er også en logg over spilte spor.
I counter.dat-filen kan du spesifisere spornummeret og podcastavspilling vil starte fra det.

Skrev parsere for automatisk nedlasting av podcaster. Den tar de siste 4 sporene fra RSS og laster dem ned. Alt dette fungerer bra på en smarttelefon, IPTV set-top-boks eller i en nettleser.

Her om morgenen gikk det opp for meg at det ville være flott å huske avspillingsposisjonen på et spor. Men jeg vet ennå ikke hvordan jeg gjør dette i PHP.

Skriptet kan lastes ned github.com/iwsys/IWScast

Kilde: www.habr.com

Legg til en kommentar