Various documentation for setting up an RTMP server can be found. However, the instructions are often incomplete or the necessary information is missing. After extensive research and tests, I made this setup “fly”. It is a guide that has been successfully tested several times in 16 steps. Many thanks to the open source community for doing a lot of preparatory work.

// *************************************************************
Author: Gerhard Peilstoecker
Copyright (c) 2019 - 2021 [https://it-service-peilstoecker.de]
Changes:
05.01.2021 "mein.streaming-key" nach "mein.stream-key" geaendert
06.09.2020 nginx Version von 1.15.1. nach 1.18.0 geaendert
// *************************************************************
Requirements for the installation on Ubuntu, previously installed programs:
a) VLC-Media-Player
b) OBS Open Broadcast Software
c) Zip-archive
d) Linux operating system used here Ubuntu 18.03.
These instructions are to be carried out step by step. The following requirements are required for the installation.
– Basic knowledge of the Ubuntu operating system
– Using a simple text editor (HTML)
Tip: The command lines given here can simply be copied with [Ctrl] + [c] and with
[Ctrl] + [Shift] + [v] can be inserted into the console window.
Before installing, you should bring your system up to date.
With the key combination [Ctrl] + [Alt] + [T] you open the console and enter the following command line. Then enter your password and confirm with [Enter]. The update is carried out with [y].
$ sudo apt-get update && sudo apt-get dist-upgrade
2. The following necessary components are to be installed next:
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
3. Download the enginx (pronounced “engine-X”) web server. It is currently one of the most powerful web servers.
$ wget http://nginx.org/download/nginx-1.18.0.tar.gz
4. Download the source files for the RTMP module.
$ wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip
5. Unzip and change to the server directory
$ tar -zxvf nginx-1.18.0.tar.gz
$ unzip dev.zip
$ cd /nginx-1.18.0
6. Create and install the nginx server with the integrated RTMP module.
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-dev
$ make
$ sudo make install
7. Create the necessary directory structure for the fragments of the video stream.
$ sudo mkdir /HLS
$ sudo mkdir /HLS/live
$ sudo mkdir /HLS/mobile
$ sudo mkdir /video_recordings
$ sudo chmod -R 777 /video_recordings
There are 9 more steps to follow.
Wird ubuntu mit Firewall betrieben (Standard ist aus), dann muss folgende Regel eingefügt werden.
$ sudo ufw allow 80 $ sudo ufw allow 1935 sudo $ ufw enable
8. Der Server ist installiert im Standardverzeichnis: /usr/local/nginx und wird nun gestartet. Den Browser öffnen und http:// 127.0.0.1 oder http://localhost eingeben. Es erscheint die Startseite des Servers. (Die IP-Adresse des Servers wird über das Komando $ ifconfig ausgegeben.)
Server starten mit:
Wird ubuntu mit Firewall betrieben (Standard ist aus), dann muss folgende Regel eingefügt werden.
$ sudo /usr/local/nginx/sbin/nginx
Server stoppen mit:
$ sudo /usr/local/nginx/sbin/nginx -s stop
9. Installieren von FFmpeg zum Konvertieren und Packen des Streams.
$sudo apt-get install software-properties-common
$sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
10. Paketliste aktualisieren und installieren
$sudo apt-get update
$sudo apt-get install ffmpeg
11. Der Server konfigurieren vorher die original Konfigurationsdatei “nginx.conf “sichern.
$ sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.original
$ sudo nano /usr/local/nginx/conf/nginx.conf
12. Den gesamten Inhalt in die vorhandene Datei “nginx.conf” kopieren (überschreiben) und speichern. Die Platzhalter “meine-ip sind mit der IP-Adresse deines Server zu ersetzten. Beispiel: 192.168.254.178
Für “mein-stream-key”, dein frei erfundener key z.B. tuy31nevyqz9 einsetzen.
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
allow play all;
#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
record all;
record_path /video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_fragment 10s;
#creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://meine-ip:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://meine-ip:1935/mobile/$;
}
#creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/mobile;
hls_fragment 10s;
}
#allows you to play your recordings of your live streams using a URL like "rtmp://meine-ip:1935/vod/filename.flv"
application vod {
play /video_recordings;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name meine-ip;
#creates the http-location for our full-resolution (desktop) HLS stream - "http://meine-ip/live/mein-stream-key/index.m3u8"
location /live {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/live;
add_header Cache-Control no-cache;
}
#creates the http-location for our mobile-device HLS stream - "http://meine-ip/mobile/mein-stream-key/index.m3u8"
location /mobile {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/mobile;
add_header Cache-Control no-cache;
}
#allows us to see how stats on viewers on our Nginx site using a URL like: "http://meine-ip/stats"
location /stats {
stub_status;
}
#allows us to host some webpages which can show our videos: "http://meine-ip/my-page.html"
location / {
root html;
index index.html index.htm;
}
}
}
13. Das Program OBS (Open Broadcast Studio) starten und die Standard-Einstellungen belassen, bis auf den Eintrag “URL” und “Stream Key”
Encoder-x264
Variable bitrate (not CBR or Constant Bit Rate), Quality highest
Max bitrate-600kbps
Audio-Codec-AAC
Audio-Format-44.1khz
Audio-bitrate-64kbps
URL "rtmp://deine-ip:1935/live"
Stream Key-"mein-stream-key"
Resolution-640x480
FPS (frames per second)-30
CFR (Constant Frame Rate) - Yes
Keyframe interval-2 seconds (one keyframe every 2 seconds)
x264 Encoding Profile-baseline (may work with main—depends on player used)
x264 CPU Present-veryfast
a) In OBS eine Videoquelle auswählen, z.B. Webcam
b) die Schaltfläche “Streaming starten” betätigen
Ergebnis: Die Beschriftung der Schaltfläche wechselt in “Streaming stoppen” und es wird in der unteren Statuszeile die Übertragsrate angezeigt.
14. Nun folgt ein Test mit dem VLC-Media-Player. Den Menüpunkt des VLC, “Medien/Netzwerkstream öffnen” und die folgende Adresse eingeben:
http://meine-ip/live/mein-stream-key/index.m3u8
Wenn alles geklappt hat, zeigt der VLC-Player deinen Stream. Gratulation!
15. Stream in einer Website mit dem Media-Player “Video.js” einbinden.
a) Den video.js-Player herunter laden und im Verzeichnis /usr/local/nginx/html entpacken.
b) Folgende HTML-Seite mit dem Namen z.B. “meine-index.html” in dem o.g. Verzeichnis erstellen.
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Meine Live-Streaming-Server</title>
<link rel="stylesheet" type="text/css" href="videojs-matrix.css">
<link href="/video-js.css" rel="stylesheet">
<script src="/video.js"></script>
<script src="/videojs-contrib-hls.js"></script>
<script>
var player = videojs('example-video');
player.play();
</script>
</head>
<body>
<h1></h1>
<body>
<video poster="/logo.jpg" width="640px" height="267px" id="video" class="vjs-matrix video-js vjs-big-play-centered " controls autoplay preload="auto" data-setup='{ "aspectRatio":"640:267"}'>
<source src="http://<meine-ip>/live/123/index.m3u8" type="application/x-mpegURL">
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
</video>
</body>
</html>
16. Die erstellte Website im Browser aufrufen:
http://meine-ip/meine-index.html
Die Website erscheint mit dem eingefügtem Live-Player.
Glückwunsch!
Du hast konzentriert und exakt gearbeitet und besitzt nun einen eigenen Live-Streaming-Server !
Weiter hilfereiche Seiten für das von mir beschriebene Setup: