Eigener Live-Streaming-Server setup

Es gibt einige Dokumentation zu diesem Aufbau, die auf YT gezeigt werden. Oft sind die Anleitungen unvollständig oder es fehlen notwendige Informationen. Nach umfangreichen Recherchen und dem Einlesen in das Thema, habe ich dieses Setup zu fliegen gebracht. Vielen Dank an die Open Source Gemeinschaft, die unendliche viel Vorarbeit dazu geleistet hat.

Voraussetzung für die Installation auf Ubuntu vorher installierte Programme:
a) VLC-Media-Player
b) OBS Opern Broadcast System
c) Zip-Entpacker
d) hier genutztes Linux-Betriebssystem Ubuntu 18.03.

Die Anleitung ist Schritt für Schritt auszuführen. Für diese Installation sind folgende Grundkenntnisse erforderlich. Die Befehlszeilen können mit Strg+x kopiert werden und mit Strg+Shift in das Konsolen-Fenster eingefügt werden.
– Grundkenntnisse von dem Betriebssystem Ubuntu
– Umgang mit einem einfachen Text-Editor (HTML)

  1. Eine Konsole starten und die folgenden notwendigen Tools installieren:
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

2. Den Webserver enginx (gesprochen “engine-X”) herunterladen. Es derzeit einer der leistungsfähigen Webserver.

$ wget http://nginx.org/download/nginx-1.15.1.tar.gz

3. Quellen für das RTMP-Modul herunterladen

$ wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip

4. Entpacken und in das Server-Verzeichnis wechseln

$ tar -zxvf nginx-1.15.1.tar.gz
$ unzip dev.zip
$ cd /nginx-1.15.1

5. Erstellen und Installieren des nginx-Server mit dem eingebundenem RTMP-Modul.

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

6. Notwendige Verzeichnisstruktur anlegen für die Fragmente des Video-Streams.

$ sudo mkdir /HLS
$ sudo mkdir /HLS/live
$ sudo mkdir /HLS/mobile
$ sudo mkdir /video_recordings
$ sudo chmod -R 777 /video_recordings

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

6. Der Server ist installiert im Standardverzeichnis: /usr/local/nginx und wird nun gestartet. Den Browser öffnen und http://<deine ip-adresse>/  oder “localhost” eingeben. Es erscheint die Startseite des Servers. (Die IP-Adresse des Servers wird über das Komando $ ifconfig ausgegeben.)

Server starten mit:

$ sudo /usr/local/nginx/sbin/nginx

Server stoppen mit:

$ sudo /usr/local/nginx/sbin/nginx -s stop

6. Installieren von FFmpeg zum Konvertieren und Packen des Streams.

$sudo apt-get install software-properties-common
$sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

6. Paketliste aktualisieren und installieren

$sudo apt-get update
$sudo apt-get install ffmpeg

7. 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

8. 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-streaming-key”, dein frei erfundener key z.B. 123 überall 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;
}   
}
}

8. Das Program OBS (Open Broadcast Studio) starten und die Standard-Einstellungen belassen, bis auf den Eintrag “URL” und “Stream-Schlüssel”

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.

9. 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!

10. 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>Willkommen zu meiner Streaming-Seite!</title>
<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>

<video poster="/logo.png" id="example-video" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268" data-setup='{}'>

<source src="http://meine-ip/live/mein-streamkey/test.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>

12. Die erstellte Website im Browser aufrufen:

http://meine-ip/meine-index.html

Die Website erscheint mit dem eingefügtem Live-Player. Glückwunsch!

Hilfereiche Seiten für das beschriebene Setup
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/

https://www.vultr.com/docs/setup-nginx-on-ubuntu-to-stream-live-hls-video

https://www.vultr.com/docs/setup-nginx-rtmp-on-ubuntu-14-04

https://selimatmaca.com/index.php/live-streaming

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.