EZSTREAM per lo streaming

EZSTREAM per lo streaming

ezstream è un software a riga di comando in grado di eseguire lo streaming audio con/senza ricondizionamento a un server icecast o shoutcast. Nella sua modalità di funzionamento di base, esegue lo streaming di file multimediali o dati dall’input standard senza ricodifica e quindi richiede solo pochissime risorse della CPU. Può anche utilizzare vari decodificatori e codificatori esterni per ricodificare da un formato all’altro e quindi trasmettere il risultato a un server Icecast. Lo sto usando per trasmettere un elenco di file mp3 a un server webradio. Il mio caso d’uso è:

Voglio trasmettere in streaming i podcast che ospito in una cartella, con un meccanismo di aggiornamento automatico, in modo che se viene aggiunto un nuovo podcast, venga riprodotto (prima o poi).

ezstream può essere utilizzato per lo streaming con un file di configurazione e può essere avviato con:

ezstream -c mystream.xml

dove mystream.xml è il file di configurazione

Configurazione EZSTREAM

ezstream usa un file xml per la configurazione. Il mio è molto semplice e ho utilizzato una versione modificata dell’esempio fornito da ezstream stesso. Ecco la configurazione che sto usando:

<format>MP3</format>
<filename>/myfolder/playlist.txt</filename>
<stream_once>0</stream_once>

format: è il formato del file filename: è il nome e il percorso di un file di testo che contiene il percorso di ogni singolo podcast, uno per riga stream_once: zero (0) stream e quindi riavviare l’elenco, uno (1) stream dell’elenco una volta. Nel file ci sono altre configurazioni: <url>, <sourcepassword>, <svrinfobitrate> ma credo che queste siano banali.

La playlist

ezstream fornisce una funzionalità molto utile per mescolare un elenco di file, è documentato in modo da poterlo controllare con il flag -h e puoi eseguirlo con:

ezstream -s playlist.txt

questo comando recupera il file di input playlist.txt, lo riordina e lo invia allo stdoutput, quindi scrive l’elenco riordinato nella console. È possibile reindirizzare l’output std a un file in modo che l’elenco venga rimescolato. Ma, ad essere onesto, ho bisogno di qualcosa di simile… ma diverso. Voglio una versione mescolata dell’elenco ma ogni X podcast voglio inserire due suoni, due tagli musicali. Quindi ho usato un linguaggio di scripting per generare la playlist. Sfortunatamente per te, ho usato php, ma analizziamo solo la logica:

<?php
$baseFolder = "/music/";
$cutArray = array("jingle.mp3","spot.mp3");
$playlistFile = "/myfolder/playlist.txt";
$everySong =3;

if (file_exists($playlistFile)){
    unlink($playlistFile);
}

foreach (glob($baseFolder . '*.mp3', GLOB_NOSORT) as $file) {
     $tmp = basename($file);
     if (strpos($tmp, 'news-automatiche') === false) {
         $allfile[] = $baseFolder . basename($tmp);
     }
}
shuffle($allfile);

$f = fopen($playlistFile, "w+");
foreach ($allfile as $index => $file) {
    if ($index % $everySong == 0) {
        foreach ($cutArray as $sng) {
            fwrite($f, $sng . PHP_EOL);
        }
     }
     fwrite($f, $file . PHP_EOL);
}
fclose($f);

Controllo se il file esiste e, se sì, lo cancello. Quindi eseguo la scansione della cartella $baseFolder per i file mp3 e memorizzarli in un array (con percorso completo). L’array viene mescolato con shuffle($allfile) Poi scrivo il file della playlist riga per riga, e con % (operazione matematica mod), ogni 3 file podcast (definiti con la variabile $everySong), Scrivo i due suoni tagliati musicali.

Mischiare e aggiornare la playlist

Come posso ricaricare la playlist con i nuovi podcast aggiunti? Ho scritto uno script bash che eseguo con cron: Ogni 12 ore il cronjob esegue lo script php per scrivere un nuovo file di playlist. Questo file di playlist generato include tutti i podcast, compresi quelli aggiunti. Quindi, con l’utilizzo del meccanismo di segnale sig -HUP di ezstream, posso ricaricare questa nuova playlist.

#!/bin/bash

SERVICE="ezstream"
COMMAND="pidof $SERVICE"
EZSTREAMPID=$(eval $COMMAND)

# Randomize playlist and insert sounds
php createPlaylist.php

 # Rereads the playlist file
kill -HUP $EZSTREAMPID

Il punto principale qui è kill -HUP $EZSTREAMPID: questo comando invia il segnale -HUP all’ezstream in esecuzione. Questo segnale:

  1. Rilegge il file della playlist
  2. Controlla, nel nuovo file di playlist, dove si trova il file podcast attualmente in riproduzione
  3. Se il file podcast attualmente in riproduzione esiste, il brano successivo sarà quello sottostante. Altrimenti il brano successivo sarà il primo del file della playlist

Conclusioni

La necessità di un lettore client icecast in grado di riprodurre in streaming i file podcast con una funzionalità di aggiornamento viene risolta con ezstream e alcune righe di codice, facili da leggere e da configurare in base alle proprie esigenze. Ti è piaciuto questo articolo? Considera una donazione! 

MiroAdmin