FFmpeg RTSP 到 HLS 的转换导致随机冻结和错误

FFmpeg RTSP 到 HLS 的转换导致随机冻结和错误

因此,我有一个将 RTSP 转换为 HLS 的命令:

sudo ffmpeg -fflags nobuffer -rtsp_transport udp  -i rtsp://admin:'password'@10.2.10.201/video1  -vsync 0  -copyts  -vcodec copy  -movflags frag_keyframe+empty_moov  -an  -hls_flags delete_segments+append_list  -f segment  -segment_list_flags live  -segment_time 3  -segment_list_size 10  -segment_format mpegts  -segment_list /mnt/hls2/stream2.m3u8  -segment_list_type m3u8 /mnt/hls2/%d.ts

它似乎运行良好,但在控制台中,我会收到随机错误以及有关输出流中非单调 DTS 的偶尔警告。

其中一个错误

更多错误

另一个错误

另一种错误

最后错误类型

当我收到红色错误时,无论我从哪里查看流(网页、VLC 等,似乎都会停止流。出于某种原因,在 iOS 上似乎更糟糕),但如果我刷新网页或让 VLC 再次获取流,它就会恢复正常。有人能提供一些见解,说明发生了什么以及如何在将 RTSP 转换为 HLS 时防止随机中断吗?

如果有帮助的话,我在 Ubuntu 18.04 上使用 Nginx 1.15.3,它被设置为处理 HLS 流,并且可以从非 RTSP 源很好地处理它们。

编辑:有时我注意到它在关闭后会从由 nginx 管理的另一个 HLS 流中随机拾取一个剪辑,这是否暗示了更多的 nginx 问题?该流只是使用 ffmpeg 将 HLS 直接从 raspberry pi 的摄像头传输到服务器,不应该影响该流上的任何内容。

答案1

此处的 -rtsp_transport 标志必须切换为 tcp 而不是 udp,在这种情况下,udp 只会导致大量数据包丢失,从而导致所有问题,而 tcp 不会出现任何问题/错误。

相关内容