/nginx-rtmp-streaming-server-setup

This guide will explain how to setup your own streaming server on ubuntu.

Setting up HLS live streaming server using NGINX + nginx-rtmp-module on Ubuntu

Compile nginx with rtmp module

Clone nginx-rtmp-module

 git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

Install nginx dependencies

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

Download NGINX

wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -xf nginx-1.10.1.tar.gz
cd nginx-1.10.1`

Compile nginx

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make
sudo make install

Create nginx configuration file

the complete nginx.conf

The default location for nginx conf is /usr/local/nginx/conf/nginx.conf or /etc/nginx/nginx.conf

	worker_processes  auto;
events {
	worker_connections  1024;
		}

rtmp {
	server {
		listen 1935; # Listen on standard RTMP port
		chunk_size 4000;

    application show {
        live on;
        # Turn on HLS
        hls on;
        hls_path /mnt/hls/;
        hls_fragment 3;
        hls_playlist_length 60;
        # disable consuming the stream from nginx as rtmp
        deny play all;
  	  }
	}
}

	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 /mnt/;
		}
	}
}

Start nginx

The nginx binary is located wherever you compiled it to - /usr/local/nginx/sbin/nginx by default. Change it to reflect your path.

Test the configuration file
/usr/local/nginx/sbin/nginx -t
Start nginx in the background
/usr/local/nginx/sbin/nginx
Start nginx in the foreground
/usr/local/nginx/sbin/nginx -g 'daemon off;'
Reload the config on the go
/usr/local/nginx/sbin/nginx -t && nginx -s reload
Kill nginx
/usr/local/nginx/sbin/nginx -s stop