![无需重启 nginx 即可重新加载 nginx RTMP 配置文件](https://linux22.com/image/1621915/%E6%97%A0%E9%9C%80%E9%87%8D%E5%90%AF%20nginx%20%E5%8D%B3%E5%8F%AF%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%20nginx%20RTMP%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png)
我的场景是:我有一个 nginx 服务器,用于将 RTMP 直播流转发到 YouTube。我想在直播运行时在配置文件 (nginx.conf) 中添加一些其他目的地。
更改配置文件后,我使用 nginx reload 命令:
nginx -s reload
不幸的是,配置文件中的更改(即额外的目的地)直到使用以下命令重新启动 nginx 服务器后才会生效:
systemctl restart nginx
随着 nginx 服务器的重新启动,流中会出现几秒钟的停机时间。
有没有办法可以更改 nginx-rtmp 配置而不必重新启动 nginx 服务器?
答案1
我遇到了同样的问题,简而言之,你不能。原因是 nginx 会在处理这些请求的 nginx 进程死亡之前妥善处理任何待处理的请求。由于 rtmp 流是长连接,因此不会发生这种情况,只要您的视频流处于开启状态,旧配置就会保持不变。不过,您可以使用 ffmpeg 的解决方法,从您的服务器获取流并将其复制到您的首选目的地。
ffmpeg -y -analyzeduration 0 -rtmp_live live -i "rtmp://localhost:1935/live/my-live-stream" -c:v copy -c:a copy -max_muxing_queue_size 1024 -f flv "rtmp://a.rtmp.youtube.com/live2/<your-youtube-key-here>"