how can i reduce latency in local network, am using nginx with rtmp module

5.2k views Asked by At
here is my config file:


#user  nobody;
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

    location /stat.xsl {

    }

    # rtmp control
    location /control {
        rtmp_control all;
    }

    location /hls {
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        root F:/PD/Temp;
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }





    }


}
rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        buflen 10s;

        application live {
            allow publish all;
            allow play all;
            live on;
            record off;
            drop_idle_publisher 5s;

            hls on;
            hls_sync 100ms;
            hls_path F:/PD/Temp/hls;
            hls_fragment 2s;
            hls_playlist_length 10m;
        }
    }
}

am using adobe live media encoder and also obc as encoders, I tried with vlc and also rtmp player in browser. both are giving me variable latencies. So, where can i tune to decrease the latency. I want merely zero latency, my application will be entirely local(LAN) no internet streaming

1

There are 1 answers

0
Sylvio Ruiz Neto On

3 factors are important here:

1) size of playlist in seconds

If a playlist has 10 seconds (the yours has 10 minutes), the rtmp module must to wait 10 seconds of ingest stream to generate 10 seconds of fragments, right? It can't generate 10 seconds of fragment, if the rtmp frames did not arrive yet.

2) size of fragmentes in seconds

When your playlist is ready for delivery (let's say 10 seconds), you must to have 10 seconds in fragments. So, you have these choices: 10 / 1 = 1 fragment / 10 seconds, 10 / 2 = 2 fragments / 5 seconds each, 10 / 3 = 3 fragments / 3.33 seconds each (this is not good) but ...

3) key frame

Each fragment is broken by a keyframe, so you must to adjust your encoder to add a keyframe each 1, 2 or 5 seconds, if your playlist has 10 seconds. If your playlist has 12 seconds, your must to adjust your encoder to add a keyframe each 1, 2, 3, 4, 6 or 12.

Resume:

hls_playlist_length 6s;
hls_fragment 2s;

enconder key frames = 2 for a playlist with 3 fragments.

Delay = +- 8 seconds.