Come creare un server RTMP

Se siete interessati a creare un server RTMP per ricevere i video trasmessi dalla vostra telecamera o dal vostro smartphone si può utilizzare il server nginx.

Nginx è disponibile anche per windows 10 e si può scaricare a questo indirizzo: Index of /download/ (ecsds.eu).

Dall’elenco si può scegliere quello dal nome nginx 1.7.11.3 Gryphon.zip.

Le istruzioni per l’installazione sono molto semplici e si limitano a scompattare il file zip in un direttorio a scelta, come indicato al seguente sito: DJP – NGINX RTMP Streaming,

Da questa stessa pagina è possibile scaricare Il file nginx.conf da utilizzare come base di partenza. Tale file va copiato nel direttorio conf del server.

Nel file zip sono disponibili anche i due file start.bat e stop.bat che consentono di avviare e fermare il servizio e questi vanno copiati nel direttorio radice dell’installazione.

In sostanza, con nginx è possibile creare un server RTMP che rimanga in ascolto dei flussi da parte di una videocamera e questi flussi possono essere rediretti su altri canali RTMP (come per esempio diversi canali twitch oppure youtube) contemporaneamente.

Io ne farò un uso diverso: lo configurerò in modo da creare un canale hls che potrà essere interrogato da streamlabs, in modo da incanalare il flusso dallo smartphone verso streamlabs.

Infatti, qualunque smartphone android può essere trasformato in videocamera che invia flussi verso server RTMP. Per farlo è sufficiente installare l’app streamlabs dal playstore.

All’interno di streamlabs è necessario creare un collegamento rtmp indicando un URL come quello seguente: rtmp://localhost/show/stream. La porta utilizzata di default è la 1395, quindi si potrà operare anche da internet configurando il port forwarding su quella porta.

Così facendo, il server nginx convertirà il flusso in hls che sarà disponibile all’URL: http://localhost:8080/hls/stream.m3u8. Tale URL andrà impostato dentro streamlabs, attivando un canale “media source” e indicando tale URL come fonte. Ovviamente, essendo tipicamente il server nginx e streamlabs sullo stesso server, si potrà utilizzare l’indirizzo localhost.

Queste istruzioni sono fornite in maniera molto chiara anche al seguente indirizzo: Setting up HLS live streaming server using NGINX – Peer5 P2P Docs.

Il seguente pezzo di nginx.conf configura il servizio rtmp e indica di attivare il canale hls. A tale canale va indicato un path dove il server andrà a salvare i file temporanei che gli serviranno per la cache. Il direttorio hls_path dovrà esistere.

rtmp {
	server {
		listen 1935;
		chunk_size 4096;

		application live {
			live on;

			record off;
			# record all;
			# record_path /recordings;

			# To push to multiple locations, uncomment lines below and substitute in your RTMP URI and stream key
			# push rtmp://server/path/streamkey;
			# push rtmp://server/path/streamkey;

			# HLS options below
			hls on;
			hls_path c:/winapp/nginx/html/hls/;
			hls_fragment 3;
			hls_playlist_length 60;
			hls_continuous on;
		}
	}
}

Il seguente codice configura il server http attraverso il quale sarà disponibile il flusso hls:

http {
    sendfile off;
    tcp_nopush on;
    #aio on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            root c:/winapp/nginx/html/;
        }
    }
}