Live Webcam

Stream e restream con NGINX

Mi è capitato che mi chiedessero di fare lo streaming video di alcuni eventi su più piattaforme tipo youtube, facebook, …. . Ora fino a che si tratta di una piattaforma la cosa è fattibile in modo semplice utilizzando un singolo software o anche direttamente lo streaming del software con cui facciamo la call, ma quando si tratta di più piattaforme in contemporanea ci sono svariate scelte.


La prima scelta da fare è quella di scegliere se usare un software per la regia con un servizio di multistreaming tipo Wirecast o Xsplit oppure utilizzare delle piattaforme di restraming tipo restream appunto. Potendo sceglliere è sempre meglio utilizzare la tecnica del restream appunto in quanto la sorgente del flusso di stream in questo caso rimane una sola. Questo evidentemente consente un notevole risparmio di banda per chi da origine al flusso di streaming. Capita infatti che chi da origine ai flussi video di streaming non abbia una capienza di banda sufficiente con conseguente perdita di segnale.

Esiste però anche la possibilità che magari abbiate a disposizione, per altri motivi, un server con IP pubblico sul quale possiate installare un software. Bhé allora in questo caso vediamo come sia possibile trasformare questa macchina nel nostro personale server di restreaming.

La procedura che adesso vedremo è per un server Debian 10 ma può andare bene anche su server Ubuntu. Per prima cosa andiamo ad installare il nostro server web NGINX:

 

# apt install nginx

 

poi dobbiamo installare il modulo nginx che lo abilita a fare lo streaming

 
# apt install libnginx-mod-rtmp
 

a questo punto dobbiamo andare a modificare il file /etc/nginx/nginx.conf inserendo questa sezione alla fine del file

 
rtmp {
  server {
    listen 1935;
      chunk_size 4096;
      application live {
       live on;
      record off;
      # Sotto a questa riga si possono mettere le indicazioni per il restreaming
      # push rtmp://x.rtmp.youtube.com/live2/<copia_la streamkey_da_youtube>;   
    }
  }

}

 

Quindi possiamo riavviare il server web NGINX

 
systemctl restart nginx
 

A questo punto il server di streaming sarebbe pronto e lo stream viene avviato inserendo alla voce server del vostro software (tipo OBS-Studio) la stringa

 
rtmp://<IP_pubblico_del_vostro_server>/live

 

alla voce codice della diretta potete mettere un codice o una parola a caso che volete. Lo streaming lo potete, in questo caso, vedere da un qualsiasi software video che supporti lo streaming, tipo VLC, insterendo alla voce URL di rete il seguente URL.

 
rtmp://<IP_pubblico_del_vostro_server>/live/<codice_streaming_inserito in OBS_Studio>

 

Avviate e dopo qualche secondo potrete vedere la vostra diretta streaming.

Se vogliamo avviare, contemporaneamente, il restaream del video su Youtube dobbiamo, nel file visto soopra /etc/nginx/nginx.conf, abilitare la riga

 

push rtmp://x.rtmp.youtube.com/live2/<copia_la streamkey_da_youtube>;

 

cancellando il carattere # e inserendo la corretta streamkey fornita da youtube.

Ora una volta riavviato il server web NGINX con il comando

 
systemctl restart nginx
 

tutto ciò che verrà convogliato nel canale rtmp://<IP_pubblico_del_vostro_server>/live verrà anche restreammato anche su youtube con quei parametri.

Per fare lo streaming anche su facebook, però, la questione è leggermente diversa in quanto facebook accetta solo flussi su canale certificato rtmps. Per far questoo dobbiamo prevedere una ulteriore configurazione.

Installiamo un ulteriore pacchetto

 
apt install stunnel4
 

Controlliamo che nel file /etc/default/stunnel4 sia presente

 
ENABLE=1

 

e che nel file /etc/stunnel/stunnel.conf siano presenti le seguenti configurazioni

 
pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log
 
setuid = stunnel4
setgid = stunnel4
 
# https://www.stunnel.org/faq.html
socket = r:TCP_NODELAY=1
socket = l:TCP_NODELAY=1
 
debug = 4
 
[fb-live]
client = yes
accept = 1936
connect = live-api-s.facebook.com:443
verifyChain = no
 

Abilitiamo il servizio all’avvio automatico

 
systemctl enable stunnel4.service
 

Riavviamolo

 
systemctl restart stunnel4.service
 

Inseriamo nel file /etc/nginx/nginx.conf un ulteriore push per il restream, sotto a quella eventuale di youtube,

 
push rtmp://127.0.0.1:1936/rtmp/<Facebook_persistent_stream_key>

 

Riavviamo nginx

 
systemctl restart nginx
 

a questo punto tutto il flusso mandato sul canale

 

rtmp://<IP_pubblico_del_vostro_server>/live

 

viene restreammato su youtube e su facebook.

 

Buon Restream a tutti!!!!