Dies ist eine alte Version des Dokuments!
Http Live Streaming (HLS) mit nginx
Installation
apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g zlib1g-dev
RTMP Modul clonen
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Aktuellen Build von nginx laden und entpacken
wget http://nginx.org/download/nginx-1.16.1.tar.gz tar -xf nginx-1.16.1.tar.gz cd nginx-1.16.1
nginx am besten in eigenes Verzeichnis kompilierern (über --prefix
)
./configure --prefix=/usr/local/nginx-rtmp --with-http_ssl_module --add-module=../nginx-rtmp-module make make install
Ordner erstellen in dem der Stream zur Auslieferung gespeichert wird. Konnte auch in einem bestehende documentroot eines anderen Webservers liegen.
Dann entfällt der http Teil der nginx Konfiguration
mkdir -p /stream/hls/
nginx Konfiguration
#user nginx; worker_processes auto; #server_tokens off; events { worker_connections 1024; } # We need to setup an rmtp server to stream video from client devices rtmp { server { listen 1935; chunk_size 4096; ping 30s; notify_method get; allow play all; # rmtp handler our clients connect to for live streaming, it runs on port 1935. It converts the stream to HLS and stores it on our server application live { live on; hls on; hls_path /var/www/hls/live; hls_nested on; # create a new folder for each stream record_notify on; record_path /var/www/videos; record all; record_unique on; } application vod { play /var/www/videos; } } } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; server { listen 80; server_name _; autoindex on; location / { root /var/www/html; index index.html index.htm; } # the http end point our web based users connect to see the live stream location /live { types { application/vnd.apple.mpegurl m3u8; } alias /var/www/hls/live; add_header Cache-Control no-cache; } } }
Web Player
/var/www/html/player.html
<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>videojs-contrib-hls embed</title> <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet"> </head> <body> <h1>Video.js Example Embed</h1> <video-js id="my_video_1" class="vjs-default-skin" controls preload="auto" width="640" height="480"> <source src="http://localhost/live/STREAM-KEY/index.m3u8" type="application/x-mpegURL"> </video-js> <script src="https://unpkg.com/video.js/dist/video.js"></script> <script src="https://unpkg.com/@videojs/http-streaming/dist/videojs-http-streaming.js"></script> <script> var player = videojs('my_video_1',{ liveui: true }); </script> </body> </html>
Streamen
STREAM-KEY ist ein freiwählbarer Name
Stream Ziel ist: rtmp://server_ip:1935/live/STREAM-KEY
Die Playlist des Stream dann unter http://server_ip/live/STREAM-KEY/index.m3u8
aufzurufen. Entweder über z.B. über VLC oder den Webplayer
ffmpeg
ffmpeg -i /path/to/video -c:v h264 -c:a aac -strict -2 -f flv rtmp://server_ip:1935/live/STREAM-KEY
OBS Studio
Stream-URL: rtmp://server_ip:1935/live
Stream-Key: frei wählbar z.B.: stream
Nach dem Stream Key richtet sich auch die playlist und clip Namen welche dann über den Webserver aufrufbar sind.
Quellen:
https://docs.peer5.com/guides/setting-up-hls-live-streaming-server-using-nginx/
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/
https://dev.to/samuyi/how-to-setup-nginx-for-hls-video-streaming-on-centos-7-3jb8