NGINX RTMP server

Da GolemWiki.
Versione del 9 ott 2020 alle 11:29 di Giomba (discussione | contributi) (Per il sistemista - piccole considerazioni sociali)

Come faccio a vedere la diretta?

Basta cliccare qui e premere Play.

E se non mi funziona?

Copia e incolla il seguente collegamento nel tuo lettore multimediale.

rtmp://golem.linux.it:8081/live/stream

Per esempio, puoi scaricare VLC, aprire il menù MediaApri flusso di rete..., inserire il collegamento e fare click su Riproduci.

Rtmp-vlc-00.png Rtmp-vlc-01.png

In caso di problemi, usare la pagina dei contatti.

Per la regia

Golem-template-note-info.png Quanto segue più avanti in questa pagina è dedicato a chi deve occuparsi della regia


Dal Linux Day 2017 registriamo almeno una parte dei nostri eventi, e saltuariamente li trasmettiamo anche in streaming. Queste registrazioni sono poi raccolte in molti posti oscuri e sconosciuti ai più come le Ore del GOLEM e i video pubblici. Da quando c'è la pandemia, tuttavia, l'esigenza di trasmettere i nostri incontri si è fatta sempre più pressante, e il nostro caro, vecchio, non-documentato relay RTMP con nginx si è rivelato essere sempre all'altezza di provvedere alle nostre esigenze, riuscendo a reggere lo streaming (uno-a-molti) con almeno 30 persone. Adesso va quantomeno documentato. Vergogna al sysop che non l'ha fatto prima.

Per chi trasmette

Per trasmettere si deve usare OBS Open Broadcaster Software.

Fai uno stream RTMP verso il nostro relay server, con i seguenti parametri:

  • Servizio: Personalizzato
  • Indirizzo: rtmp://ipv6.golem.linux.it:8081/live
  • Chiave: stream
  • Autenticazione: nessuna
  • Codifica: video x264 800kbps, audio aac 64kbps (rappresenta un buon compromesso di qualità per contenuti sui 720p)

Nota: stream è un parametro a piacere per identificare il particolare flusso video. Non cambiarlo: se lo modifichi, cambia anche l'indirizzo al quale ci si deve collegare per ricevere, e avere molti indirizzi diversi genera confusione.

Lo stream sarà riproducibile da chiunque, con un lettore multimediale, all'indirizzo

rtmp://golem.linux.it:8081/live/stream

Attenzione: puoi trasmettere solo se il tuo indirizzo IP è specificato nel file di configurazione di nginx: al momento, puoi trasmettere solo da un indirizzo della sottorete IPv6 del GOLEM (2001:470:c844::/48), oppure puoi chiedere al sysop se ti abilita temporaneamente il tuo IPv4 (es. 79.11.35.249/32).

Per il sistemista

Si deve installare il relay RTMP ricompilando un modulo specifico per nginx 1.13 (purtroppo questa cosa non è stata documentata a suo tempo, qualcuno vuole farlo ora?).

Lo streaming avviene nel seguente modo:

  • flusso RTMP in ingresso: il flusso audio/video RTMP viene trasmesso da OBS già codificato correttamente, e nginx si occuperà semplicemente di replicarlo e, eventualmente, di incapsularlo (vedere più avanti);
  • flusso RTMP in uscita: lo stesso flusso audio/video in ingresso viene inserito in un buffer in memoria (es. 4096k), e viene replicato ai client che si connettono per la riproduzione tramite RTMP;
  • lettore multimediale HLS web: nginx, tramite le direttive hls produce un file di playlist .m3u8 e spezza il flusso audio/video che gli giunge tramite RTMP in tanti piccoli file .ts (numerati in sequenza, e che mano a mano che la diretta procede, vengono eliminati a rotazione). Una semplice pagina web con video.js può essere approntata per la riproduzione: il lettore usa il file di playlist per rimanere aggiornato su quali sono gli ultimi "pezzi" .ts, li scarica e li mostra automaticamente in sequenza, senza discontinuità.

RTMP vs HLS

  • il flusso RTMP è riproducibile solo con un programma dedicato, non da browser; il buffer può essere ridotto "a piacere" e il ritardo di trasmissione ridotto fino a pochi secondi. È meno pratico da utilizzare, specialmente su smartphone e tablet.
  • il flusso HLS (HTTP Live Streaming) è riproducibile anche - e soprattutto - da un qualunque browser HTML5, comodo anche da smartphone e tablet, però la frammentazione introduce un notevole ritardo fino a 30 secondi.

Configurazione di nginx

File:Rtmp-nginx.conf.gz

Si notino in particolare le seguenti sezioni:

  • http server listen 8080, per esporre la pagina con il lettore multimediale web;
  • http server listen 8082, per esporre i file .ts e la playlist .m3u8;
  • rtmp server listen 8081, per ricevere la trasmissione da OBS, e per replicarla a chi si collega con un lettore multimediale;