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
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:
enconder key frames = 2 for a playlist with 3 fragments.
Delay = +- 8 seconds.