Menu Chiudi

Pillola #42: Realizzare uno streaming video/audio

L’idea di base è quella di poter trasmettere uno streaming audio/video live riprendendo tramite una videocamera “amatoriale”.

Il problema principale da risolvere, per far si che la cosa funzioni, è la tipologia delle connessioni Internet disponibili.

Questi i vari “scatolotti” utilizzati:
– videocamera con uscita firewire
– pc con connettore firewire
– dvgrab, per la cattura del segnale video/audio proveniente dalla videocamera
– ffmpeg2theora per la conversione dello streaming in un formato “non troppo voluminoso” e in formato aperto
– oggfwd per l’invio dello streaming verso un server remoto
– icecast, come server remoto (utilizzato per ricevere lo streaming e per soddisfare le richieste provenienti dai client remoti)

I soggetti che entrano in gioco sono i seguenti:

POSTAZIONE CHE TRASMETTE LO STREAMING LIVE
– videocamera firewire connessa al pc
– installare i pacchetti necessari per la trasmissionesudo apt-get install dvgrab ffmpeg2theora oggfwd
– utilizzare il seguente script per l’invio dello streaming

#!/bin/bash
HMS=”$(date +%H%M%S)”
NAME=”NOME_DEL_FLUSSO_DATI”
dvgrab –format raw – | tee >(split -d -a3 -b680MB – ${NAME}_${HMS}_) \
| ffmpeg2theora -a -1 -v 3 -f dv -x 360 -y 288 -o /dev/stdout – \
| oggfwd IP_DEL_SERVER_REMOTO  NR_PORTA_IN_ASCOLTO_SERVER_REMOTO  PASSWORD  /$NAME

alcune note sulla risoluzione del video trasmesso in streaming:
– risoluzione della videocamera piena, se l’ADSL in trasmissione regge il carico con 720×576
– risoluzione della videocamera dimezzata, se l’ADSL non regge il carico con 360×288

lo script si occupa di:
– catturare audio/video dalla videocamera
– fare una copia sul disco locale della registrazione
– convertire il tutto in un formato leggero e aperto
– inoltrare il flusso verso un server esterno

La trasmissione impegna circa 36kbps per l’audio e 163kbps per il video
Le dimensione del frame sono esattamente la metà della risoluzione della telecamera.

Come potete notare si è fatto uso dei ben noti comandi tee e split.
In tal modo vengono salvati spezzoni della dimensione di 680Mbyte che si possono copiare su CD.
Ovviamente la dimensione può essere adattata a piacimento.

Il taglio del flusso non coincide però con il singolo frame, ma per uso amatoriale l’errore è trascurabile.
Se vi fosse la necessità di effettuare il montaggio di una parte a cavallo dei due spezzoni potete semplicemente accodarli per poi elaborarli:

cat PRIMOFILE SECONDOFILE TERZOFILE > FILECOMPLETO.dv

SERVER REMOTO

– installo icecast2 http://www.icecast.org/
sudo apt-get install icecast2
– modificare il file /etc/icecast/icecast.xml impostando la PASSWORD corretta
– modificare il file /etc/default/icecast2 per abilitare l’esecuzione
del servizio
– avviare il servizio /etc/init.d/icecast start
– il server ovviamente deve avere un indirizzo ip pubblico ed essere
raggiungibile dall’esterno sulla porta NR_PORTA_IN_ASCOLTO_SERVER_REMOTO (es. 8000)

CLIENT REMOTI
– i client remoti si connettono al server remoto tramite browser sulla
porta NR_PORTA_IN_ASCOLTO_SERVER_REMOTO (es. http://serverremoto:8000) o sulla 80 facendo nat…. in base alla configurazione del server remoto
– i client utilizzano l’intuitiva interfaccia di icecast per visualizzare lo streaming
– in alternativa è possibile utilizzare VLC o il proprio lettore multimediale preferito (es. Totem) e aprire il flusso dati puntando a http://serverremoto:8000/NOME_DEL_FLUSSO_DATI.xspf o http://serverremoto:8000/NOME_DEL_FLUSSO_DATI.m3u
– in alcuni casi VLC o Totem potrebbero non riuscire a visualizzare lo stream, io ho risolto utilizzando un browser (nel mio caso anche Firefox non riusciva a visualizzare lo stream, mentre chrome ci riusciva !!)

Alcune note che devono essere tenute in considerazione per le varie connessioni:
– se la postazione che trasmette lo streaming usa una linea adsl in sola uscita, probabilmente, riuscira’ a saturare l’intera banda
– la linea lato server (che riceve lo stream remoto e trasmette alle
sedi remote) dovrà avere una banda sufficiente (nel caso di una linea
adsl, essendo “sbilanciata” ci potranno essere grossi problemi
nel momento in cui il numero di connessioni fossero eccessive)
– presso le sedi remote basta una qualunque linea adsl in quanto verrà
fatto del semplice download

Link utili:
http://write.flossmanuals.net/ogg-theora/live-streaming/ffmpeg2theora/

https://www.leader.it/Blog/Streaming_video_e_backup_locale_del_flusso_video

WordPress Appliance - Powered by TurnKey Linux