Το δικό σας διαδικτυακό ραδιόφωνο

Σε πολλούς από εμάς αρέσει να ακούμε ραδιόφωνο το πρωί. Και τότε ένα ωραίο πρωί συνειδητοποίησα ότι δεν ήθελα να ακούω τοπικούς ραδιοφωνικούς σταθμούς FM. Δεν ενδιαφέρομαι. Αλλά η συνήθεια αποδείχτηκε επιβλαβής. Και αποφάσισα να αντικαταστήσω τον δέκτη FM με έναν δέκτη Internet. Αγόρασα γρήγορα ανταλλακτικά στο Aliexpress και συναρμολόγησα έναν δέκτη Διαδικτύου.

Σχετικά με τον δέκτη Διαδικτύου. Η καρδιά του δέκτη είναι ο μικροελεγκτής ESP32. Υλικολογισμικό από το KA-radio. Τα ανταλλακτικά μου κόστισαν 12 $. Η ευκολία συναρμολόγησης μου επέτρεψε να το συναρμολογήσω σε μερικές μέρες. Λειτουργεί καλά και σταθερά. Σε 10 μήνες δουλειάς, πάγωσε μόνο μερικές φορές, και μετά μόνο λόγω των πειραμάτων μου. Μια βολική και καλά μελετημένη διεπαφή σάς επιτρέπει να ελέγχετε από smartphone και υπολογιστή. Με μια λέξη, αυτός είναι ένας υπέροχος δέκτης Διαδικτύου.

Ολα καλά. Όμως ένα νωρίς το πρωί κατέληξα στο συμπέρασμα ότι παρόλο που είχα πρόσβαση σε δεκάδες χιλιάδες ραδιοφωνικούς σταθμούς, δεν υπήρχαν ενδιαφέροντες σταθμοί. Με πείραξαν οι διαφημίσεις και τα χαζά αστεία των παρουσιαστών. Πηδώντας συνεχώς από τον ένα σταθμό στον άλλο. Μου αρέσει το Spotify και το Yandex.Music. Αλλά το λυπηρό είναι ότι δεν λειτουργούν στη χώρα μου. Και θα ήθελα να τους ακούσω μέσω του δέκτη Διαδικτύου.

Θυμήθηκα τα παιδικά μου χρόνια. Είχα ένα μαγνητόφωνο και δύο ντουζίνες κασέτες. Αντάλλαξα κασέτες με φίλους. Και ήταν υπέροχο. Αποφάσισα ότι έπρεπε να κάνω ροή των αρχείων ήχου μου μόνο σε έναν δέκτη Διαδικτύου. Φυσικά, υπάρχει η επιλογή να συνδέσετε μια συσκευή αναπαραγωγής ήχου ή iPod στα ηχεία και να μην ανησυχείτε. Αλλά δεν είναι αυτός ο τρόπος μας! Μισώ να συνδέω συνδέσμους)

Άρχισα να ψάχνω έτοιμες λύσεις. Υπάρχει μια προσφορά στην αγορά για να δημιουργήσετε το δικό σας διαδικτυακό ραδιόφωνο από το Radio-Tochka.com. Το δοκίμασα για 5 μέρες. Όλα λειτουργούσαν καλά με τον δέκτη μου στο Διαδίκτυο. Αλλά η τιμή δεν ήταν ελκυστική για μένα. Απέρριψα αυτήν την επιλογή.

Έχω πληρώσει φιλοξενία 10 GB. Αποφάσισα να γράψω ένα σενάριο για κάτι που θα έκανε streaming τη ροή ήχου των αρχείων mp3 μου. Αποφάσισα να το γράψω σε PHP. Το έγραψα γρήγορα και το ξεκίνησα. Όλα λειτούργησαν. Ήταν κουλ! Αλλά μερικές μέρες αργότερα έλαβα μια επιστολή από τη διοίκηση της φιλοξενίας. Είπε ότι το όριο των λεπτών του επεξεργαστή έχει ξεπεραστεί και η ανάγκη αναβάθμισης σε υψηλότερο τιμολόγιο. Το σενάριο έπρεπε να διαγραφεί και αυτή η επιλογή εγκαταλείφθηκε.

Πώς συνέβη? Δεν μπορώ να ζήσω χωρίς ραδιόφωνο. Εάν δεν σας επιτρέπουν να εκτελέσετε το σενάριο στη φιλοξενία κάποιου άλλου, τότε χρειάζεστε τον δικό σας διακομιστή. Που θα κάνω ότι θέλει η ψυχή μου.

Έχω ένα αρχαίο netbook χωρίς μπαταρία (CPU - 900 MHz, RAM - 512 Mb). Ο ηλικιωμένος είναι ήδη 11 ετών. Κατάλληλο για διακομιστή. Εγκαθιστώ το Ubuntu 12.04. Μετά εγκαθιστώ το Apache2 και php 5.3, samba. Ο διακομιστής μου είναι έτοιμος.

Αποφάσισα να δοκιμάσω το Icecast. Διάβασα πολλά μάνα σε αυτό. Αλλά το βρήκα δύσκολο. Και αποφάσισα να επιστρέψω στην επιλογή με ένα σενάριο PHP. Αφιερώθηκαν μερικές μέρες για τον εντοπισμό σφαλμάτων αυτού του σεναρίου. Και όλα λειτούργησαν υπέροχα. Μετά έγραψα και ένα σενάριο για να παίξω podcast. Και μου άρεσε τόσο πολύ που αποφάσισα να κάνω ένα μικρό έργο. Το ονόμασε 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 < 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);
}
?>

Εάν θέλετε τα κομμάτια να παίζονται με τη σειρά, τότε πρέπει να σχολιάσετε τη γραμμή στο index.php

shuffle($files); //Random on

Για podcast χρησιμοποιώ /var/www/podcast/ Υπάρχει ένα άλλο σενάριο index.php. Διαθέτει απομνημόνευση κομματιού podcast. Την επόμενη φορά που θα ενεργοποιήσετε τον δέκτη Διαδικτύου, αναπαράγεται το επόμενο κομμάτι podcast. Υπάρχει επίσης ένα αρχείο καταγραφής των κομματιών που παίζονται.
Στο αρχείο counter.dat, μπορείτε να καθορίσετε τον αριθμό του κομματιού και από αυτό θα ξεκινήσει η αναπαραγωγή podcast.

Έγραψε αναλυτές για αυτόματη λήψη podcast. Παίρνει τα τελευταία 4 κομμάτια από το RSS και τα κατεβάζει. Όλα αυτά λειτουργούν εξαιρετικά σε smartphone, αποκωδικοποιητή IPTV ή σε πρόγραμμα περιήγησης.

Το άλλο πρωί σκέφτηκα ότι θα ήταν υπέροχο να θυμηθώ τη θέση αναπαραγωγής σε ένα κομμάτι. Αλλά δεν ξέρω ακόμα πώς να το κάνω αυτό στην PHP.

Μπορείτε να κατεβάσετε το σενάριο github.com/iwsys/IWScast

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο