nginx-rtmp-module

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
nginx-rtmp-module [2013/11/04 13:19] meisenginx-rtmp-module [2016/12/04 15:13] (current) – [hls] meise
Line 1: Line 1:
 += 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)
 +