原因
之前的推流客户端断开时,TCP链接不能够被正常关闭,publishing会一直存在导致的。
查看服务端rtmp推流端口状态,都处于结束的状态
内部原因
TCP 连接一旦建立,只要通信双方之间的中间结点(包括网关和交换机、路由器等网络设备)工作正常,那么在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。TCP 连接的这种特性,使得一个长期不交换任何信息的空闲连接可以长期保持数小时、数天甚至数月。中间路由器可以崩溃、重启,网线可以被挂断再连通,只要两端的主机没有被重启,TCP 连接就可以被一直保持下来
解决办法
在/etc/nginx/nginx.conf 中加入红框中的内容
该内容含义为
最后一个ACK没有回复后隔了2秒开始TCP keep-alive 探活,间隔1秒,总共两次。
附listen选项说明
syntax: listen (addr[:port]|port|unix:path) [bind] [ipv6only=on|off] [so_keepalive=on|off|keepidle:keepintvl:keepcnt|proxy_protocol]
keepidle 对一个连接进行有效性探测之前运行的最大非活跃时间间隔
keepintvl 两个探测的时间间隔
keepcnt 关闭一个非活跃连接之前进行探测的最大次数t