Facciamo streaming D-Star con il raspberry

di | 25/07/2015

Vi presento una soluzione che può rivelarsi utile e facilmente implementabile per “girare” l’audio del nostro reflector sul web. Come tutti i progetti informatici, anche questo può essere ampliato e migliorato e ogni suggerimento o rivisitazione è ben accetta e sarà pubblicata con piacere. L’obiettivo è appunto quello di far ascoltare il traffico radio D-Star di un nostro ponte ripetitore (e conseguentemente del Reflector XRF 077 modulo B essendo a questi connesso di default) direttamente dal nostro sito web, utilizzando un plugin (nel nostro caso presente nel CMS che utilizziamo per la gestione del sito) o un lettore multimediale (indicando l’url di lettura del flusso audio). Le componenti impiegate sono: un minipc Raspberry Pi (versione B con 512 Mega di Ram, è sufficiente) con linux a bordo, un adattatore audio usb compatibile (si trova facilmente in rete anche su Amazon, basta indicare compatibile raspberry per evitare di perdere tempo nel compilare driver particolari) e un RTX (ICOM ID-31, va bene qualsiasi ricetrasmettitore digitale D-Star che abbia una uscita audio per cuffie). L’adattatore audio si collega al raspberry tramite usb e l’ID 31 alla scheda audio ingresso microfonico tramite un cavetto mini-jack (ho utilizzato l’uscita del microfono esterno connesso all’ ID-31 perchè il cavetto audio che avevo sottomano aveva uno spinotto jack e non mini …). Ecco alcune foto:

Adattatore audio usb

ID-31 collegato con un cavetto audio “standard” all’ingresso microfonico della scheda audio usb

Raspberry Pi che oltre allo streaming ha a bordo una scheda DV-MEGA che opera da hotspot

Ho utilizzato per comodità un raspberry che già operava come hotspot, quindi una distribuzione “raspbian” e nella fattispecie una immagine preparata da Roberto e presente sul sito. Ovviamente per un raspberry “nudo e crudo” è sufficiente una qualsiasi distribuzione linux. E’ importante controllare che l’adattatore audio venga correttamente visto dal sistema, quindi entrando in console (comunemente terminale) dare il comando lsusb

Successivamente con il comando aplay -l si hanno ulteriori informazioni. Digitando alsamixer è possibile invece gestire i volumi di ingresso e uscita, premere F6  e selezionare l’adattatore audio usb esterno, le freccie per evidenziare i canali e modificarne i valori.

Bene, adesso che sappiamo che la scheda audio è presente e correttamente riconosciuta dal sistema possiamo procedere nell’installare il sistema “streaming” che è composto da due software, il primo è il vero e proprio server (icecast2) e permette l’accesso della nostra risorsa dall’esterno, il secondo è un “client” (ices2) e si occupa di catturare il flusso audio e di “gestirlo” per poi passarlo al server. Entrambi in questa soluzione risiedono sullo stesso raspberry ma è possibile anche averli separati su due pc distinti localizzati in ambienti diversi. Per installare il server il comando è sudo apt-get install icecast2 (magari prima dare sudo apt-get update per aggiornare il software). Ulteriori informazioni si possono trovare sul  sito ufficiale icecast.org ove è presente una completa documentazione e anche la versione per Windows. Dopo aver installato icecast occorre procedere alla relativa configurazione, un file in formato XML che si trova sotto /etc/icecast2 chiamato icecast.xml 

Il contenuto è di facile interpretazione, tra i molteplici metatag <opzione> </opzione> ci sono i vari parametri da configurare, ovvero le password di accesso al pannello di amministrazione, al server, la porta di ascolto (default 8000), e altro. Ovviamente consiglio di modificare solo quanto necessario e lasciare il resto di default. Salvare ed eseguire quindi il server con il comando sudo icecast2 -c /etc/icecast2/icecast.xml

Possiamo verificare che il server sia correttamente in ascolto digitando nella barra degli indirizzi del browser di un qualsiasi pc presente nella nostra rete locale lan http://indirizzo-del-raspberry:8000

Bene, a questo punto occorre configurare il client, ovvero “chi” cattura l’audio proveniente dal ricetrasmettitore. Installiamo quindi ices2 con il comando sudo apt-get install ices2 ( anche in questo caso ottima documentazione è reperibile – al momento la versione 2 – all’indirizzo http://icecast.org/ices/docs/ices-2.0.2/ ). E’ necessario creare la directory /etc/ices2 e copiarvici il file di configurazione di esempio (anche in questo caso nel formato XML) dalla dir /usr/share/doc/ices2/example/ices-alsa.xml

Il file ices-alsa.xml contiene numerose opzioni (di facile interpretazione) ed occorre personalizzarlo. Decidiamo se farlo girare in background mettendo il valore 1, la descrizione del nostro flusso dati (stream), l’indicazione della scheda audio presente nel nostro sistema ( <param name=”device”>hw:1,0</param> ), la password per collegarci al server prima configurato e il nome del flusso che sarà raggiungibile dall’esterno ( per esempio:  <mount>/xrf077a.ogg</mount> ). Consiglio di scorrere lentamente tutti i vari parametri e di prestare attenzione ai “commenti” presenti nelle varie sezioni. NOTA BENE: icecast non riproduce nel formato MP3 bensi in OGG VORBIS, un algoritmo libero compatibile con i vari riproduttori audio ( https://it.wikipedia.org/wiki/Vorbis ). Riporto qui i parametri che ho configurato per il nostro streaming, estrapolandoli dalle varie sezioni, sarà facile confrontarli con quelli presenti nel vostro file di configurazione:

<input>
<module>alsa</module>
<param name=”rate”>44100</param>
<param name=”channels”>1</param>
<param name=”device”>hw:1,0</param>
<!– Read metadata (from stdin by default, or –>
<!– filename defined below (if the latter, only on SIGUSR1) –>
<param name=”metadata”>1</param>
<param name=”metadatafilename”>liveaudio</param>
</input>

<encode>
<quality>0</quality>
<samplerate>44100</samplerate>
<channels>1</channels>
</encode>

<downmix>0</downmix>

<!– resampling.

Set to the frequency (in Hz) you wish to resample to,

<resample>
<in-rate>44100</in-rate>
<out-rate>44100</out-rate>
</resample> –>

Nota bene che questa sezione “resampling” è totalmente “commentata” ( tra  <!– e –> ) quindi NON OPERATIVA; ho dovuto inibirla poichè veniva riprodotta sul web una voce “a paperino” … non ho avuto tempo nè voglia di fare ulteriori prove e verifiche, magari fatemi sapere. Salviamo la configurazione ed eseguiamo il client con il comando (magari mettendolo prima di exit 0 nel file /etc/rc.local per l’avvio all’accensione del raspberry) sudo ices2 /etc/ices2/ices-alsa.xml (se abbiamo abilitato l’opzione esecuzione in background nel file di configurazione ci verrà subito restituito il prompt dei comandi). Sarà possibile visionare il log del sistema con il comando cat /var/log/ices/ices.log (creare manualmente la dir se non esiste e corrisponda a <logpath>/var/log/ices</logpath> altrimenti il programma non parte e da un errore) e capire eventuali errori di configurazione. Per vedere se tutto funziona, sempre da dentro la nostra rete lan, possiamo dare l’indirizzo sul browser http://indirizzo-del-raspberry:8000/nomedelfile.ogg (dipende dal nome che è stato inserito nel file di configurazione tra i metatag <mount>) ed ascoltare quanto viene ricevuto dal ricetrasmettitore. Chiaramente sarà necessario eseguire una NAT sul router per rendere accessibile il raspberry (e la porta di ascolto 8000) dall’esterno, oltre che creare un nome dns (es. un fornitore di nomi di dominio è duckdns.org) per rendere “pubblico” il nostro indirizzo internet.

Se volete quindi ascoltare il nostro reflector visitate dstar.grupporadiofirenze.net e troverete il riproduttore (player) per avviare la ricezione del flusso dati. Buone prove e aspetto con piacere vostri suggerimenti ed integrazioni.