nginx-rtmp-module

debian pakete

<code> apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzip </code>

compile

<code> ./configure –add-module=../nginx-rtmp-module –with-ipv6 –with-http_stub_status_module </code>

rtmp

/usr/local/nginx/conf/nginx.conf: <code> user www-data;

multiple worker worker_processes 2;

important for multi worker processes!!1! rtmp_auto_push on;

error_log /var/log/nginx/error.log; pid /var/run/nginx.pid;

events { worker_connections 2048; }

http { server { listen [::]:80 default ipv6only=off;

root /srv/nginx/htdocs; index index.html index.htm;

server_name localhost;

html page stuff location / { try_files $uri $uri/ /index.html; }

location /releases { alias /srv/releases; autoindex on; }

location /releases/private { alias /srv/releases/private; auth_basic „Auf zum Atem!!1!“; auth_basic_user_file /etc/nginx/releases_htpasswd; autoindex on; }

hls location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; }

alias /tmp/hls; autoindex on; }

stats location /stats/rtmp { rtmp_stat all; allow 127.0.0.1; allow 195.54.164.160/29; # berlin allow 188.40.235.220; # oglarun → meise deny all; }

location /stats/nginx { stub_status on; access_log off; allow 127.0.0.1; allow 195.54.164.160/29; # berlin allow 188.40.235.220; # oglarun → meise deny all; } }

}

rtmp { server { listen [::]:1935 ipv6only=off;

ping 30s;

Disable audio until first video frame is sent. wait_video on;

Send NetStream.Publish.Start and NetStream.Publish.Stop to subscribers. publish_notify on;

Synchronize audio and video streams. If subscriber bandwidth is not

enough to receive data at ublisher rate some frames are dropped by

server. This leads to synchronization problem. When timestamp

difference exceeds the value specified as sync argument an absolute

frame is sent fixing that. Default is 300ms. sync 10ms;

application stream {

enable live streaming live on; meta copy;

hls on; hls_path /tmp/hls; hls_fragment 5;

publish only from localhost allow publish 127.0.0.1; deny publish all;

allow play all; } } } </code>

ffmpeg push: <code> ffmpeg -re -i catcontent.ogg -threads 0 -pix_fmt yuv420p -profile:v baseline -preset fast -tune zerolatency -c:v libx264 -strict -2 -c:a aac -f flv rtmp://localhost:1935/stream/katze </code>

hls

/usr/local/nginx/conf/nginx.conf:

→ siehe Abschnitt hls und http in der rtmp Konfiguration.

ffmpeg push: <code> ffmpeg -re -i catcontent.ogg -threads 0 -pix_fmt yuv420p -profile:v baseline -preset fast -tune zerolatency -c:v libx264 -strict -2 -c:a aac -f flv rtmp://localhost:1935/stream/katze </code>

Das Verhaeltnis aus Segmentlaenge, m3u8 cache duration und Kaskadentiefe war falsch. Die cache-duration muss < segment-laenge / 2 sein, bei 2 Cache-Stufen (wie bei uns) / 8. Fixed durch Setzen der Segmentlaenge auf 10s. (Unsere m3u8 cache-duration war und ist 1s)