nginx-rtmp-module icon indicating copy to clipboard operation
nginx-rtmp-module copied to clipboard

Consistent disconnections during long streams

Open faureq opened this issue 3 years ago • 1 comments

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!

faureq avatar Nov 23 '22 20:11 faureq

Sorry for bringing this back up, but I have seen the same thing. Did you ever resolve this?

Jrubensson avatar Oct 30 '24 17:10 Jrubensson