Streaming dell’audio da un pc Ubuntu al cellulare Android

Questo post nasce dalla mia esigenza di riuscire a sentire la musica da last.fm sullo stereo in soggiorno. Non so se sapete che l’applicazione di last.fm per Android, in Italia non permette di ascoltare una beneamata fava. Fino ad ora avevo utilizzato il plugin pulseaudio-raop per mandare l’audio in streaming dal pc ad una AirPort Express collegata allo stereo , tramite AirTunes. Sfortunatamente il modulo pulseaudio-raop funziona da schifo e dopo circa mezz’ora/un’ora va in crash, costringendomi a tornare davanti al pc, disabilitare airtunes dal pannello di pulseaudio, aspettare qualche secondo e riattivarlo. Tornare sul divano in soggiorno e ripetere l’operazione fino ad esaurimento (dei nervi).

Ma da quando ho messo le mani su un telefono android, mi è venuto in mente che molto prima che esistesse airtunes esisteva già un modo per inviare l’audio in streaming da un pc in giro per la rete e si chiamava ShoutCast! In particolare, nella sua variante libera, IceCast. (Si, lo so.. con AirTunes lo streaming è di qualità nettamente superiore..)

Allora ecco come fare per inviare l’audio, non importa quale applicazione.. qualsiasi cosa esca dagli speaker sarà “streammata” dal computer ad android.

Ingredienti:

Un pc con Ubuntu, connesso ad una rete WiFi casalinga

Un server IceCast, quello che ho usato io è icecast 2.3.2-6ubuntu1

Uno smartphone con sistema operativo Android, io ho usato l’Ideos U8150 con Froyo 2.2, kernel ufficiale.

Un client IceCast per Android, io ho usato StreamFurious

Nota: Non è obbligatorio usare linux o ubuntu, tecnicamente il tutto dovrebbe funzionare su qualsiasi computer su cui giri un server shoutcast/icecast.

Per prima cosa installate il server icecast sul pc:

sudo apt-get install icecast2

E’ necessaria una minimale configurazione, tramite il file /etc/icecast2/icecast2.xml:

<hostname>Qui ci va l'IP o l'hostname che avete assegnato al vostro PC sulla rete wireless di casta vostra</hostname>

<!-- You may have multiple <listener> elements -->
<listen-socket>
<port>8000</port>
<!-- <bind-address>127.0.0.1</bind-address> -->
<!-- <shoutcast-mount>/stream</shoutcast-mount> -->
</listen-socket>
<authentication>

Poi bisogna stabilire una password per le source che si collegheranno al server, cioè le applicazioni e i software che pomperanno materialmente l’audio dentro al server icecast2. Nel nostro caso l’applicazione sarà il comando gst-launch
del pacchetto GStreamer. Inoltre serve una password per l’accesso via web dell’utente amministratore del server icecast. Io ho usato una password uguale al nome dell’utente, admin, ma è una pessima idea, voi a casa non seguite il mio cattivo esempio.

<!-- Sources log in with username 'source' -->
<source-password>musica</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>hackme</relay-password>

<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>admin</admin-password>
</authentication>

Salvate il file e uscite.Poi modificate anche il file /etc/default/icecast2 cambiando la riga enable a true:

ENABLE=true

In questo modo ubuntu si occuperà dell’avvio e arresto del server al successivo avvio del pc, ma se volete lanciare subito il server icecast, vi basta dare il comando:

/etc/init.d/icecast2 start

Adesso viene la parte un pochino più complicata, bisogna capire qual’è il device della scheda audio che va dato in pasto al comando gst-launch.

Per avere l’elenco dei device pulseaudio presenti sul pc, potete usare questo pratico comando, che ho scoperto nelle istruzioni in inglese che ho seguito io e che vi invito a leggere:http://mikebeach.org/2011/06/broadcasting-a-multimedia-stream-using-icecast2-and-gst-launch-in-ubuntu-linux/

pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2

dovreste ottenere un elenco molto simile a questo:

alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
alsa_input.pci-0000_00_1b.0.analog-stereo
alsa_output.pci-0000_01_01.0.analog-stereo.monitor
alsa_input.pci-0000_01_01.0.analog-stereo

nel mio caso io ho due schede audio, per cui ho due dispositivi monitor, ma voi ne dovreste avere uno solo. La riga che contiene la parola monitor è quella che ci interessa.

A questo punto il comando da dare per iniziare lo streaming dell’audio sarà questo:

gst-launch pulsesrc device=alsa_output.pci-0000_01_01.0.analog-stereo.monitor ! audioconvert ! lame bitrate=128 ! shout2send ip=10.0.0.2 port=8001 password=musica mount=stream

ricordatevi di sostituire il parametro device con il vostro device e i parametri ip, port e password con quelli che avete
inserito prima nel file di configurazione icecast2.xml.Gli altri parametri servono a creare uno stream in formato mp3 a 128kb/s, il che vi darà una qualità del sonoro più che rispettabile e un traffico dati pienamente sopportabile per una connessione wifi.

Questo comando dovrete lanciarlo tutte le volte che volete attivare lo streaming dell’audio del pc via shoutcast, per cui conviene salvarlo in uno script. Come farlo lo lascio come esercizio per il lettore 🙂

Se il comando ha funzionato, l’output sarà simile a questo

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstAudioSrcClock

Una ulteriore verifica che tutto funzioni a dovere potete farla semplicemente aprendo l’URl del vostro server Icecast con un normale browser web. Nel mio caso l’ip è 10.0.0.2 su porta 8001 quindi l’URL corrispondente sarà http://10.0.0.2:8001/

Dovreste ritrovarvi una schermata simile a questa

 

 

 

 

 

A questo punto installate sul cellulare StreamFurious dal market. Ora, la cosa antipatica dei client icecast che ho provato è che non potete aggiungere manualmente l’URL dello stream che volete ascoltare direttamente nel programma, ma dovete aprire lo stream attraverso il browser del cellulare, che a sua volta aprirà l’applicazione giusta riconoscendo lo stream come di tipo icecast.

Quindi aprite il browser e dopo aver attivato la connessione wireless andate all’URl del vostro server:

 

Cliccate sul link M3U che compare in alto a destra e il browser dovrebbe scaricare e aprire automaticamente lo stream all’interno di streamfurious, così:

 

 

 

 

 

 

 

 

 

 

 

Buon ascolto!