Reolink RTSP-->ffmpeg,RTP:PT=xx:如果快速停止/重新启动,则 cseq 错误

Reolink RTSP-->ffmpeg,RTP:PT=xx:如果快速停止/重新启动,则 cseq 错误

我的 BeeCam 是 Raspberry Pi3/Raspbian Stretch,带有新编译的 ffmpeg 版本 N-89882-g4dbae00bac,并将其作为服务运行:

#!/bin/bash
cd /usr/local/bin/
while true
do
./ffmpeg -re -thread_queue_size 512 -rtsp_transport tcp -i \
"rtsp://anonymous:[email protected]:554" -i WilliamTellOverture.mp3 \
-vcodec copy -acodec copy -t 00:11:51 -f flv \
"rtmp://a.rtmp.youtube.com/live2/my-youtube-streaming-key"
sleep 10s
done

其中 192.168.1.11 是我的新款 Reolink RLC-423S,-t 00:11:51是我的免版税 MP3 的长度。这通常很有效:

https://www.youtube.com/user/IAmTheWaterbug/live

并且会不断循环。YT 流在重新启动时会出现故障,但流会恢复,只会丢失大约 15 秒的视频。在我开始摆弄它之前,它至少连续运行了一整夜 8 个小时(例如多次循环)。

我将睡眠时间改为 5s,但这似乎并没有造成困扰。

但有时我会sudo systemctl 停止 StreamToYouTube其次是sudo systemctl 启动 StreamToYouTube,在 1-2 秒内(例如,我打字的速度向上 向上 向上进入),有时当我这样做时,流会失败,并且 ffmpeg 开始转储:

[rtsp @ 0x302c2f0] RTP: PT=60: bad cseq e680 expected=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: bad cseq 93ab expected=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: bad cseq 93ac expected=0b49
[rtsp @ 0x302c2f0] RTP: PT=60: bad cseq e682 expected=0b49

不休。

重启 Pi 并不能解决这个问题(例如 YT 流仍然失败,并且 sudosystemctl 状态 StreamToYouTube返回相同的“bad cseq”错误流),但重新启动相机确实可以解决问题。我想知道这个错误到底是什么意思,以及如何向 Reolink 报告。

在“失败”状态下,相机似乎在其他客户端上正常工作,例如,我可以在 Mac 上启动 Reolink.app 或从任何浏览器查看相机的网页,并且视频看起来很好。

但由于某种原因,RTSP 流变得异常,以至于 ffmpeg 无法解决。

如果我快速停止/启动服务,它是相当可重复的,但在我的脚本中暂停 5 秒重新启动似乎并不会困扰它。

谢谢!

答案1

我在 Reolink C2 上遇到了类似的问题,在一个用作ffmpeg子进程的自定义 NodeJS 程序中(在我的 Windows 计算机上)。

有相同类型的错误(“RTP:PT=60:坏 cseq a5b6 预期=4e9b”等),以及类似的高级症状(不久后启动第二个流会失败,但从其他设备(如我的手机)流可以正常工作)。

一个区别是,就我的情况而言,只要我让相机静置(不尝试启动任何流!)约 30 秒到 1 分钟,问题就会解决。所以也许这是固件差异,我的型号会在一定时间段后自动终止/清理旧流,而您的型号则不会。

无论如何,我最终找到了解决我的问题的方法:https://github.com/agsh/rtsp-ffmpeg/issues/35

摘要:我用来启动流的库在希望流结束时ffmpeg没有“正常终止”进程。它只是调用,这导致了问题。ffmpegprocess.kill()

一旦我将该process.kill()行更改为process.stdin.write("q\r\n"),问题就完全解决了。(显然,某些版本通过其标准输入ffmpeg接受q命令以正常退出,而其他版本则不然 - 因此 Linux 和 Mac 的解决方案可能不同)

我不知道您启动和停止方法的细节ffmpeg,但我建议仔细查看终止该过程的代码,并确保它允许ffmpeg“正常退出”,因为这为我解决了问题。

相关内容