Ultimo Urlo - non visibile
Gli urli sono visibili solo agli utenti autorizzati.
punto_vert.gif (43 byte)
PicoStreamer: cos'è e come funziona

PicoStreamer è un sistema di trasmissione audio live via web. Fornisce tutto il necessario per poter distribuire su internet un canale audio proveniente da un qualsiasi pc, ascoltabile con qualsiasi pc.

Introduzione.

Trasmettere voce o musica via internet non è una novità. Chiunque può mettere dei file audio compressi in mp3 o altri formati su un server web e dare la possibilità a tutti di poterli scaricare o, tramite appositi software, ascoltarli in streaming (in pratica riprodurli man mano che si stanno scaricando, senza aspettare che tutto il file sia in locale).

PicoStreamer non adotta nessun nuovo metodo di compressione, usa il comunissimo mp3: la differenza è nei costi. Questo documento ti spiegherà il perchè.

Le alternative.

Esistono diversi produttori di software che rilasciano in maniera gratuita il software necessario a comprimere un file nel formato nativo dei propri lettori multimediali, in primis Microsoft WindowsMedia e RealAudio. In alternativa è possibile usare il formato mp3, e come lettore un qualsiasi software che legga mp3 in streaming come il famosissimo Winamp o anche le ultime versioni di WindowsMediaPlayer.

Avendo a disposizione un comunissimo webserver, quindi, è possibile trasmettere audio in streaming via internet a costo zero.

E se volessimo trasmettere musica live? Per live, intendo un segnale audio che non sia presente sotto forma di file, ma che sia acquisito con una scheda audio in tempo reale.

Qui le cose si complicano perchè, in questo caso, non c'è nessun file compresso da uploadare sul server.

Gli stessi produttori di software che forniscono i compressori di file, rilasciano anche in maniera gratuita degli applicativi che acquisiscono l'audio, lo comprimono, e lo mandano... dove? Su un WindowsMediaServer nel caso Microsoft, su un RealServer nel caso Real.

Bene, cosa devo fare per avere un WindowsMediaServer o un RealServer? Devo, prima di tutto mettere su un mio server dedicato (attenzione, non un web server ma una macchina completa) installandolo da qualche parte e mantenendolo connesso in rete; poi ho bisogno dell'applicativo proprietario da tenerci su, che ha un costo, in termini di licenza d'uso, non indifferente.

Potrei anche acquistare un server in housing (macchina dedicata, a differenza dell'hosting che consiste in uno spazio web condiviso) ma i costi non sono alla portata di tutti (google ti darà una mano a scoprirli).

Esiste un'ottima alternativa a questi prodotti: ShoutCast (o il suo clone open source IceCast). ShoutCast è stato inventato dagli stessi programmatori che hanno fatto Winamp, che usano anche come "source" (il software che acquisisce e invia in tempo reale).

Essendo ShoutCast e IceCast gratuiti (free il primo, free e con codice sorgente il secondo) i costi per mettere su una radio su internet si abbassano. Si abbassano, ma non si azzerano, perchè è sempre necessario dover mantenere un server dedicato connesso ad internet. Infatti, nessun hosting provider (le società che affittano spazio web) permette di installare software sulle proprie macchine e men che meno di compilare dai sorgenti (per macchine *nix è necessario compilarci sopra il sorgente, o in ogni caso avere una versione già compilata per quella specifica piattaforma).

Tutto questo senza aver menzionato un altro grossissimo problema: il firewall. Nessun hosting permette di aprire porte a piacere sulle macchine e, poiché ShoutCast o IceCast devono aprire una porta che non sia la 80 (quella standard, e già aperta dal web server) anche potendo installare software, gli utenti non riuscirebbero a collegarsi per via del firewall che blocca le porte.

Nelle mie ricerche mi sono imbattuto in un hoster provider particolare che dà la possibilità di eseguire ShouCast o WindowsMedia sulle proprie macchine: purtroppo, i prezzi non sono per nulla simili a quelli di un normale hosting, e variano in base ai kilobit (la qualità audio) e al massimo numero di utenti contemporanei che si possono connettere. Come minimo è necessario sostenere una spesa di almeno 300 euro al mese.

Va da sè, che allo stato attuale delle cose, realizzare una web radio a costo zero è praticamente impossibile, a meno che non si voglia usare la connessione ADSL casalinga, con le ovvie limitazioni di utenti (l'adsl ha una banda di upload solitamente di 128 o 256 kilobit).

Questa situazione esclude dalla possibilità di realizzare una web radio tutte quelle entità che non dispongono di fondi, ma che hanno comunque idee e contenuti da trasmettere: è il caso di una piccola associazione del mio paese, di moltissimi studenti, di piccoli gruppi locali, ecc...

La soluzione.

Dopo alcuni mesi di esperimenti e tentativi ho realizzato quello che secondo "la teoria" era possibile fare: PicoStreamer.

Per realizzare una radio via internet con PicoStreamer ci vuole solo uno spazio web (hosting) che dia la possibilità di eseguire script Perl e Php (quest'ultimo non è neanche strettamente necessario), praticamente tutti!

Il tipo di compressione usato è l'ottimo mp3 che offre, tra l'altro, la possibilità di far ascoltare la radio con un filmato flash, con Winamp, con WindowsMediaPlayer, con RealOne e, in genere, con qualsiasi software che legge mp3 in streaming.

E' stato fatto un test su quello che in Italia è il peggior provider e... funziona! Così le spese si riducono al solo prezzo da pagare per avere un normalissimo sito web: pochissimi euro all'anno!

Il meccanismo.

Per funzionare, PicoStreamer usa un sistema "subdolo" per ingannare un web server.

L'upload.

Per trasmettere in streaming dei dati verso un webserver, usando l'HTTP, esiste un'unica soluzione: il metodo POST.

Quando si invia un form, quello che succede è che il browser codifica i dati nella forma www-url-encoded e li invia con una action POST. Il webserver manda questi dati allo script in esecuzione che li elabora a proprio piacimento.

Fin qui tutto normale: i problemi sorgono quando questi dati non hanno una dimensione predefinita (un form non può essere infinito!). Usando PHP, si ha il controllo dei dati del form quando questi sono giunti interamente al server, che ne conosce la lunghezza tramite l'header Content-Length. Inviando un file, per esempio, lo si può salvare solo quando il file è stato già trasferito sul server e quindi la trasmissione del file è terminata.

Il Perl invece, non avendo un framework apposito per il web, è trattato dal web server (Apache, chiaramente...) come un comune script di sistema (un file di testo che ha come prima riga il path all’eseguibile che lo interpreterà). Ciò significa che un eventuale invio di dati tramite POST sarà ignorato nel contenuto dal web server e verrà inviato come standard input dello script in esecuzione. Lo script di PicoStreamer (pisosource.cgi) prende perciò i dati dallo standard input, ignorando totalmente il Content-Lenght, (che ha comunque un valore enorme ed è presente per rispettare il protocollo HTTP).

L'applicazione che trasmette non fa altro che acquisire dalla scheda audio il segnale, convertirlo in mp3 (con l'ottima libreria Lame) e inviarlo allo script Perl con un metodo POST e Content-Type: application/octet-stream.

Questo sistema ha anche il vantaggio di superare firewall aziendali che lasciano passare solo le connessioni web, o usano un proxy per accedere ad internet.

Chiaramente è possibile fare la stessa cosa con qualsiasi altro software appositamente realizzato, per Windows, Linux, BSD etc.

Il download.

L'utente che vuole ascoltare la radio, non deve far altro che collegarsi ad un altro script Perl, http://www.sitoweb.com/cgi-bin/picoreader.cgi. Nel caso non abbia nessun software adatto ad ascoltare mp3 in streaming, quello che succederà e che il browser tenterà di effettuare un download del "file". Ma i dati in arrivo non sono di un file e non avranno mai termine: così il download sarà infinito. Poichè il Content-Type è settato su audio/mpeg, sui nuovi sistemi Windows partirà WindowsMediaPlayer, che riprodurrà il "file" dopo un cospicuo tempo di buffering.

Per evitare problemi, è meglio consigliare agli utenti l'uso di software come Winamp, realizzando un file di playlist allo scopo (maggiori informazioni sul formato dei file playlist le trovi sul solito google).

Poichè, negli anni, ho avuto a che fare con utenti poco pratici, incapaci di installare qualsiasi software, men che meno Winamp, ho anche realizzato un filmato flash che non fa altro che eseguire un mp3 in streaming con la funzione actionscript MySound.attachSound("http://www.sitoweb.com/cgi-bin/picoreader.cgi", true).

Anche in questo caso, essendo normale download HTTP, si può ascoltare la radio anche in presenza di firewall e proxy.

Nel server.

Il problema principale era quello di trasmettere i dati dallo script che riceveva l'audio a quelli che lo inviavano senza bloccarsi nel caso in cui un ascoltatore avesse una banda troppo limitata. Grazie all'uso del protocollo UDP (che a differenza del TCP non è bloccante) lo script picosource.cgi manda i dati, a blocchi, ad una lista di porte presa da un file. Gli script picoreader.cgi si mettono in ascolto su una porta in UDP e inseriscono il numero della porta nella lista a cui accede picosource.cgi; non appena ricevono dati, li inviano al client.

Poichè le trasmissioni UDP avvengono in localhost (127.0.0.1), nessun firewall interferirà.

 
punto_vert.gif (43 byte)



[ Script Execution time: 0.1151 ]   [ 22 queries used ]


MKPortal 1.0.1a A ©2003-2004 - Tutti i diritti riservati