как я могу уменьшить задержку в локальной сети, используя nginx с модулем rtmp

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;
        }
    }
}

я использую adobe live media encoder, а также obc в качестве кодировщиков, я пытался с vlc, а также rtmp-плеер в браузере. оба дают мне переменные задержки. Итак, где я могу настроить, чтобы уменьшить задержку. Я хочу просто нулевую задержку, мое приложение будет полностью локальным (LAN) нет потокового интернета

1 ответ

  1. Здесь важны 3 фактора:

    1) размер списка воспроизведения в секундах

    Если плейлист имеет 10 секунд (ваш имеет 10 минут), модуль rtmp должен ждать 10 секунд поглощения потока, чтобы генерировать 10 секунд фрагментов, верно? Он не может генерировать 10 секунд фрагмента, если кадры rtmp еще не прибыли.

    2) размер фрагментов в секунду s

    Когда ваш плейлист готов к доставке (скажем, 10 секунд), вы должны иметь 10 секунд в фрагментах. Итак, у вас есть следующие варианты: 10 / 1 = 1 фрагмент / 10 секунд, 10 / 2 = 2 фрагмента / 5 секунд каждый, 10 / 3 = 3 фрагмента / 3,33 секунды каждый (это не хорошо), но …

    3) ключевая рамка

    Каждый фрагмент разбит ключевым кадром, поэтому вы должны настроить кодировщик, чтобы добавить ключевой кадр каждые 1, 2 или 5 секунд, если ваш плейлист имеет 10 секунд. Если список воспроизведения имеет 12 секунд, необходимо настроить кодировщик для добавления ключевого кадра каждый 1, 2, 3, 4, 6 или 12.

    Продолжить:

    hls_playlist_length 6s;
    hls_fragment 2s;
    

    enconder key frames = 2 для плейлиста с 3 фрагментами.

    Задержка = + — 8 секунд.