Archivio mensile 31 January 2021

Escursione Ostiense e Testaccio

Musei chiusi, cinema chiusi, teatri chiusi, locali chiusi, pub chiusi, discoteche chiuse, ristoranti chiusi.. e via dicendo. E allora che si fà? Io questo fine settimana ho cercato di scoprire pezzi della città, di Roma. Grazie all’associazione Ottavo Colle ho scoperta la storia del Rione Testaccio e del quartiere Ostiense (e la differenza di categoria non è casuale) Se volete anche voi scoprire cose, curiosità, posti, io vi consiglio di dare uno sguardo agli appuntamenti dell’associazione Ottavo Colle sul loro sito. Qui vi metto qualche foto

Gestire più di uno streaming provider per una web radio

Se gestisci una Web Radio, se sei un consulente IT, o sei solo “uno dei tecnici” dietro le quinte di tale radio, tieni a mente i seguenti suggerimenti. Potrebbe esserci una parte dell’integrazione web con il tuo sito che potrebbe causare problemi futuri o molto lavoro. La maggior parte di questi problemi è correlata a servizi di terze parti che potresti utilizzare o meno, quindi analizziamone alcuni.

Streaming services

Se gestisci una Web Radio, sai già che hai bisogno di un servizio web di streaming per far ascoltare il tuo audio in streaming. A meno che tu non scelga una soluzione “all-in-house”, in cui hai un server con il tuo sito web, il tuo server di streaming e anche spazi per i podcast, probabilmente ti affidi ad alcuni servizi di streaming di terze parti. Questo è conveniente anche dal punto di vista economico, perché i server di streaming possono essere molto economici, e alcuni di essi hanno anche una soluzione una-tantum (hai pagato una volta sola). Questo in pratica significa che il tuo sito web ha un URL

https://www.myradiowebsite.com

Mentre il tuo servizio di streaming ha un URL diverso, forse qualcosa del genere

https://stream.thirdparty.org:8021/stream

Sebbene questa sia una buona soluzione e funzioni bene senza alcun problema, tieni presente che il tuo URL di streaming (https://stream.thirdparty.org:8021/stream) può essere utilizzato in più punti: il tuo sito Web è uno di questi, ma anche la tua app mobile, altre tue integrazioni con altri siti web, altri siti web aggregatori di webradio e così via.

Il rpblema : l’indirizzo di streaming

Quando utilizzi un provider di server di streaming, questo significa sostanzialmente che sei accoppiato a un url di streaming e se vuoi cambiare provider di server di streaming, devi aggiornare tutto con il tuo nuovo url di streaming: il tuo sito web, la tua app mobile, l’aggregatore di webradio sito web (es. Tunein). Inoltre, se hai bisogno di più ascoltatori, l’unico modo per farlo è pagare il tuo fornitore di server di streaming per un piano aggiornato.

The solution: a redirect proxy

La soluzione è impostare un semplice reindirizzamento che possa essere facilmente gestibile internamente. Il reindirizzamento dovrebbe aggiungere un URL di streaming di proprietà del tuo sito Web, quindi qualcosa del genere:

https://www.myradiowebsite.com/mystreaming --redirect to--> https://stream.thirdparty.org:8021/stream

Questo può essere ottenuto in diversi modi: il più semplice potrebbe probabilmente essere l’aggiunta di una regola nel tuo file .htaccess (se hai un hosting Apache) o una direttiva nella configurazione di ngnix, se il tuo hosting supporta nginx. La sintassi del reindirizzamento non è trattata in questo post, probabilmente potresti trovare quelli giusti semplicemente cercando su Internet. Voglio coprire una soluzione leggermente diversa che utilizza un approccio programmatico. È una soluzione di reindirizzamento PHP, ma so che può essere eseguita con qualsiasi altro linguaggio lato server. Più che avere solo un reindirizzamento, ho aggiunto la possibilità di un reindirizzamento ponderato casuale. L’idea è che puoi impostare un reindirizzamento distribuito in modo casuale, quindi se hai 2 fornitori di servizi di streaming…

server1 = https://my.webradioserver.com:8201/stream 
server2 = https://another.server.com/8020/stream

… puoi quindi pesare ad esempio impostare 50-50 in modo che un utente possa ascoltare il server1 o il server2 con un 50% di probabilità. Questo ti dà la possibilità di spostarti su un altro server con una rampa, oppure puoi aggiungere un altro server per aumentare i possibili ascoltatori e assegnare l’utente in modo casuale. Questa è la mia soluzione:

<?php header("Expires: on, 01 Jan 1970 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); function getRandomWeightedElement(array $weightedValues) { $rand = mt_rand(1, (int) array_sum($weightedValues)); foreach ($weightedValues as $key => $value) { $rand -= $value; if ($rand <= 0) { return $key; } } } $serverSTreaming1 = 'https://my.webradioserver.com:8201/stream'; $serverSTreaming2 = 'https://another.server.com/8020/stream'; $wheights = array($serverSTreaming1=>0, $serverSTreaming2=>100); header("location: ".getRandomWeightedElement($wheigths)); die();

La sezione $wheights = array($serverSTreaming1=>0, $serverSTreaming2=>100);

fa tutta la magia spostando tutto il traffico verso il  $serverSTreaming2, ma si può anche configurare con un peso di 50 e 50% 

$wheights = array($serverSTreaming1=>50, $serverSTreaming2=>50);

Questa soluzione potrebbe essere facilmente estesa con più fornitori di streaming e pesi diversi.

Giveaways

Con una soluzione di reindirizzamento, puoi facilmente cambiare il tuo provider di streaming con tutti i tuoi clienti come il tuo sito Web, la tua applicazione mobile, aggregatori di siti Web di terze parti ecc. Perché utilizzi l’URL di origine e poi cambi solo la destinazione del reindirizzamento. Puoi aggiungere più fonti e pesarle, come nel mio esempio.   Ti è piaciuto questo articolo? Considera una donazione!

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! 

EZSTREAM for streaming

ezstream is a command line source client software that can stream audio with/without reconding to an icecast or shoutcast server.

In its basic mode of operation, it streams media files or data from standard input without reencoding and thus requires only very little CPU resources. It can also use various external decoders and encoders to reencode from one format to another, and then stream the result to an Icecast server. I’m using it to stream a list of mp3 files to a webradio server. My use case is:

I want to stream the podcasts that I host in a folder, with some auto-update mechanism, so that If a new podcast is added, then it’s played (sooner or later).

ezstream can be used for streaming with a configuration file and it can be launched with:

ezstream -c mystream.xml

where mystream.xml is the configuration file

EZSTREAM configuration

ezstream use an xml file for configuration. Mine is very simple and I’ve used a modified version of the example that ezstream itself provides. Here’s the configuration I’m using:

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

format: is the file format

filename: it’s the name and the path of a text file that contains a path of every single podcast, one per line

stream_once: zero (0) stream and then restart the list, one (1) stream the list once.

In the file there are other configurations: <url>, <sourcepassword>, <svrinfobitrate> but I think these are trivial.

The playlist

ezstream provide a very usefull feature to shuffle a list of file, it’s documented so you can check it with -h flag, and you can run it with:

ezstream -s playlist.txt

this command gets the playlist.txt input file, shuffles it, and sends it to the stdoutput, so it writes the shuffled list to the console. You can redirect the stdoutput to a file so that the list is shuffled. But, to be honest, I need something similar… but different. I want a shuffled version of the list but every X podcast, I want to insert two sounds, two musical cuts. So I’ve used a scripting language to generate the playlist. Unfortunately for you, I’ve used php, but let’s just analyze the logic:

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

I check if the file exists and, if yes, I delete it. Then I scan the folder $baseFolder for mp3 files and store them in an Array (with full path).

The array is shuffled with shuffle($allfile)

Then I write the playlist file line by line, and with % (mod mathematic operation), every 3 podcast files (defined with the variable $everySong), I write the two musical cut sounds.

Shuffle and update playlist

How can I reload the playlist with the new added podcasts? I’ve written a bash script that I run with cron:

Every 12 hours the cronjob runs the php script to write a new playlist file. This generated playlist file includes all the podcasts, including the added ones. Then, with the usage of sig -HUP signal mechanism of ezstream, I can reload this new 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

The main point here is kill -HUP $EZSTREAMPID: this command sends signal -HUP to the running ezstream. This signal:

  1. Rereads the playlist file
  2. Checks, in the new playlist file, where is the current playing podcast file
  3. If the current playing podcast file exists, the next song will be the one below it. Otherwise the next song will be the first of the playlist file

Conclusion

The need for an icecast client player that can stream podcast files with an update functionality is solved with ezstream and some lines of code, easy to read and to configure for your needs.

Liked this article? Consider a donation!

L’ottimismo VS il realismo

La pagina allegata fornisce dati sui tempi di somministrazione del vaccino anti Covid-19. Il vaccino sembra essere l’unico modo per uscire dalla pandemia, e la vaccinazione di massa indica quando saremo sufficientemente vaccinati per tornare alla “vita di prima“.

La domanda è: Si ma quando? Quanto ci mettiamo a vaccinarci tutti, o almeno il fatidico 70% dell’immunità di gregge?

La risposta è fornita dalla pagina allegata, che potete trovare anche qui che utilizza gli Open Data, ovvero fonti pubbliche di dati, e le elabora per fornirle in maniera leggibile agli utenti. A noi. La pagina si aggiorna in automatico via via che nuovi dati sono a disposizione.

La pagina è obiettiva. Non giudica, non accusa, non fornisce sensazionalismi o titoli acchiappaclick. La pagina si basa sui dati e su proiezioni e modelli matematici verosimili. Estrarre informazione dai dati è il compito e il lavoro del cervello umano.

Katzenjammer del 25 Gennaio 2020

Really Love (feat. Craig David & Digital Farm Animals) – KSI
Wrong – Depeche Mode
Ring My Bell – Anita Ward
Nothin’ but U – SLWJM
Emancipation Of The Mind – Bad Religion
Chase the Sun – Planet Funk
The Bandit – Kings of Leon
Saremo Giovani (feat. Selton) – Bianco
Drops of Jupiter – Train
Felicità (feat. Fulminacci) – Samuel
Dig, Lazarus, Dig!!! – Nick Cave & The Bad Seeds
I Cerchi Degli Alberi – Subsonica
Time is Running Out – Muse
Vivo – Andrea Laszlo De Simone

Katzenjammer 18 gennaio 2020

Coexist – Sonia Stein
Jump – Van Halen
Online Songs – blink-182
Waiting On A War – Foo Fighters
Too Much Information – Duran Duran
Chemtrails Over The Country Club – Lana Del Rey
La Faccia Di Briatore – Ministri
Demoni – Fast Animals and Slow Kids
Frogs – Alice In Chains
All Star – Smash Mouth
Mother – David Bowie
Vedrai, vedrai – Iosonouncane

Katzenjammer 11 Gennaio 2021

Whatsapp ha nuove regole sulla privacy e di privacy abbiamo parlato a Katzenjammer, insieme ad altri argomenti.

Ghost – Emma Holzer
Cocoricò – Samuel Colapesce
Believer – Black Honey
Tell Me What I Said – Kip Macklejar
It Ain’t Easy – Delta Spirit
Tryin’ To Get To Heaven – David Bowie
De Parade – Eefje de Visser
If I Ever Feel Better – Phoenix
By This River – Brian Eno
Mountain Song – Jane’s Addiction
Reason to Believe – Vagabon, Courtney Barnett
Extreme Ways – Moby
Hoppípolla – Sigur Rós