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

pub/http-live-streaming.1586549322.txt.gz · Zuletzt geändert: (Externe Bearbeitung)