nginx-rtmp-module
nginx-rtmp-module copied to clipboard
Consistent disconnections during long streams
Hello, I consistently get disconnections during long streams. When that happens I lose exactly 3 seconds of stream, probably due to push_reconnect which is 3s by default. Here is the log of a stream which has 1 disconnection in over 6 hours of stream (I usually get 1 or 2 disconnections per 3 hours):
2022/11/23 10:23:42 [info] 460#0: *1 client connected '[client IP redacted]'
2022/11/23 10:23:42 [info] 460#0: *1 connect: app='stream-live-[app key redacted]' args='' flashver='FMLE/3.0 (compatible; FMSc/1.0)' swf_url='rtmp://[server IP redacted]:1935/stream-live-[app key redacted]' tc_url='rtmp://[server IP redacted]:1935/stream-live-[app key redacted]' page_url='' acodecs=0 vcodecs=0 object_encoding=0, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 460#0: *1 createStream, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 460#0: *1 publish: name='[stream name redacted]' args='' type=live silent=0, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 460#0: *1 relay: create push name='[stream name redacted]' app='' playpath='' url='127.0.0.1:1935/watch-live-[app key redacted]', client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 456#0: *3 client connected '127.0.0.1'
2022/11/23 10:23:42 [info] 460#0: *1 relay: create push name='[stream name redacted]' app='' playpath='' url='127.0.0.1:1935/youtube', client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 457#0: *5 client connected '127.0.0.1'
2022/11/23 10:23:42 [info] 457#0: *5 connect: app='youtube' args='' flashver='LNX.11,1,102,55' swf_url='' tc_url='rtmp://127.0.0.1:1935/youtube' page_url='' acodecs=3575 vcodecs=252 object_encoding=0, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 456#0: *3 connect: app='watch-live-[app key redacted]' args='' flashver='LNX.11,1,102,55' swf_url='' tc_url='rtmp://127.0.0.1:1935/watch-live-[app key redacted]' page_url='' acodecs=3575 vcodecs=252 object_encoding=0, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 457#0: *5 createStream, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 457#0: *5 publish: name='[stream name redacted]' args='' type=live silent=0, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 457#0: *5 relay: create push name='[stream name redacted]' app='' playpath='' url='a.rtmp.youtube.com/live2/[stream key redacted]', client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 456#0: *3 createStream, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 456#0: *3 publish: name='[stream name redacted]' args='' type=live silent=0, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 10:23:42 [info] 457#0: *6 handshake: digest not found, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
2022/11/23 15:28:27 [info] 457#0: *6 disconnect, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
2022/11/23 15:28:27 [info] 457#0: *6 deleteStream, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
2022/11/23 15:28:30 [info] 457#0: *5 relay: create push name='[stream name redacted]' app='' playpath='' url='a.rtmp.youtube.com/live2/[stream key redacted]', client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 15:28:30 [info] 457#0: *8 handshake: digest not found, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
2022/11/23 16:55:55 [info] 460#0: *1 deleteStream, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 460#0: *4 disconnect, client: 127.0.0.1:1935/youtube, server: ngx-relay
2022/11/23 16:55:55 [info] 460#0: *4 deleteStream, client: 127.0.0.1:1935/youtube, server: ngx-relay
2022/11/23 16:55:55 [info] 457#0: *5 disconnect, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 457#0: *5 deleteStream, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 460#0: *2 disconnect, client: 127.0.0.1:1935/watch-live-[app key redacted], server: ngx-relay
2022/11/23 16:55:55 [info] 460#0: *2 deleteStream, client: 127.0.0.1:1935/watch-live-[app key redacted], server: ngx-relay
2022/11/23 16:55:55 [info] 456#0: *3 disconnect, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 460#0: *1 disconnect, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 456#0: *3 deleteStream, client: 127.0.0.1, server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 460#0: *1 deleteStream, client: [client IP redacted], server: 0.0.0.0:1935
2022/11/23 16:55:55 [info] 457#0: *8 disconnect, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
2022/11/23 16:55:55 [info] 457#0: *8 deleteStream, client: a.rtmp.youtube.com/live2/[stream key redacted], server: ngx-relay
Here is the nginx.conf:
user nginx;
worker_processes 4; # grep processor /proc/cpuinfo | wc -l
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log info;
rtmp_auto_push off;
rtmp {
server {
listen 1935;
chunk_size 4096;
max_message 13M; # input bitrate x2 = 51 Mbps x2 = 6.375 MBps x2
ping 0; # attempt to prevent disconnections
meta copy;
application watch-local-$WATCH_STREAM_KEY {
live on;
# to watch use:
# rtmp://$PUBLIC_IP:1935/watch-local-$WATCH_STREAM_KEY/<stream name = stream key in OBS>
allow publish 127.0.0.1;
deny publish all;
}
application watch-live-$WATCH_STREAM_KEY {
live on;
# to watch use:
# rtmp://$PUBLIC_IP:1935/watch-live-$WATCH_STREAM_KEY/<stream name = stream key in OBS>
allow publish 127.0.0.1;
deny publish all;
}
application stream-local-$MASTER_LOCAL_STREAM_KEY {
live on;
push rtmp://127.0.0.1:1935/watch-local-$WATCH_STREAM_KEY;
deny play all;
}
application stream-live-$MASTER_LIVE_STREAM_KEY {
live on;
push rtmp://127.0.0.1:1935/watch-live-$WATCH_STREAM_KEY;
push rtmp://127.0.0.1:1935/youtube;
# push rtmp://127.0.0.1:1935/twitch;
deny play all;
}
application youtube {
live on;
push rtmp://a.rtmp.youtube.com/live2/$YT_STREAM_KEY;
allow publish 127.0.0.1;
deny publish all;
deny play all;
}
application twitch {
live on;
exec_push /usr/local/bin/restream.sh $YT_CHANNEL_ID $TTV_STREAM_KEY \$app \$name;
exec_kill_signal term;
allow publish 127.0.0.1;
deny publish all;
deny play all;
}
}
}
events {
worker_connections 1024; # ulimit -n
}
http {}
I could include the restream.sh script but I tested with the push to twitch app commented out today and the log I provided is the result of that so the script is not the problem.
Thanks!
Sorry for bringing this back up, but I have seen the same thing. Did you ever resolve this?