Knowledge Base
How to setup Nginx+RTMP live stream server
IMPORTANT UPDATE! These guide may be outdated. Please see the new guide here:
http://www.ustoopia.nl/featured/nginx-rtmp-hls-ssl-videojs-on-ubuntu-18-04/
AN EVEN MORE IMPORTANT UPDATE! This is the most recent guide I've put together: https://livestream.puntenel.nl/knowledge-base/create-a-secure-adaptive-bitrate-hls-stream-with-nginx-rtmp-ffmpeg-videojs-on-ubuntu-20-04/
I made a couple of Youtube video's with some instructions on how to setup your own private live-stream server using Nginx running on Ubuntu 18.04. . Click on the CONTINUE READING link below to see a copy of the variables that I used in the video's. You can also find it on my Pastebin if you prefer.
I'm assuming you have already installed Ubuntu 18.04. If not, please have a look at this following video first.
FIRST INSTALL THESE USEFUL / REQUIRED PACKAGES
sudo apt-get install wget unzip software-properties-common dpkg-dev git make gcc automake build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgd-dev libgeoip-dev libgoogle-perftools-dev libperl-dev pkg-config autotools-dev gpac ffmpeg mediainfo mencoder lame libvorbisenc2 libvorbisfile3 libx264-dev libvo-aacenc-dev libmp3lame-dev libopus-dev unzip
ADD THE NGINX REPOSITORY AND UPDATE
sudo add-apt-repository ppa:nginx/stable
apt update
INSTALL NGINX
sudo apt install nginx
INSTALL THE RTMP MODULE
sudo apt install libnginx-mod-rtmp
CLONE THE RTMP GIT
cd /usr/src
git clone https://github.com/arut/nginx-rtmp-module
COPY THE STAT.XSL FILE TO YOUR WEB FOLDER
cp /usr/src/nginx-rtmp-module/stat.xsl /var/www/html/stat.xsl
CREATE A NEW FILE CALLED CROSSDOMAIN.XML IN YOUR WEB FOLDER
nano /var/www/html/crossdomain.xml
PASTE THIS IN THE NEW FILE AND SAVE IT
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
EDIT THE NGINX CONFIG FILE
nano /etc/nginx/nginx.conf
AT THE END OF THE FILE ADD THIS
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
interleave off;
wait_key on;
meta on;
wait_video off;
idle_streams off;
sync 300ms;
session_relay on;
#allow publish 127.0.0.1;
#allow publish 192.168.2.0/24;
allow publish all;
#deny publish all;
allow play all;
# EDIT THESE SO THE LIVESTREAM_KEY IS REPLACED BY YOUR PERSONAL KEY THAT YOU CAN LOOK UP ON THE SITE OF THE PLATFORM.
# push rtmp://live-ams.twitch.tv/app/LIVESTREAM_KEY;
# push rtmp://a.rtmp.youtube.com/live2/LIVESTREAM_KEY;
# push rtmp://ingest-ams.mixer.com:1935/beam/LIVESTREAM_KEY;
}
}
}
EDIT THE DEFAULT SITE CONFIG
nano /etc/nginx/sites-enabled/default
SEARCH FOR THE FOLLOWING LINES:
#location ~ /\.ht {
# deny all;
AND DIRECTLY UNDER IT PASTE THE FOLLOWING
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/html/;
}
#location /control {
# you'll need a htpasswd auth file, that's outside the scope of this doc but any apache one will work
# auth_basic "stream";
# rtmp_control all;
#}
SO THAT IT WILL LOOK SOMETHING LIKE THIS AFTER PASTING:
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/html/;
}
#location /control {
# you'll need a htpasswd auth file, that's outside the scope of this doc but any apache one will work
# auth_basic "stream";
# rtmp_control all;
#}
}
# Virtual Host configuration for example.com
YOU ARE DONE SETTING UP THE SERVER. HAVE A LOOK AT THE WIKI OF THE RTMP MODULE WEBPAGE TO LEARN HOW TO USE DIFFERENT VARIABLES TO FURTHER SET UP YOUR SERVER. https://github.com/arut/nginx-rtmp-module