FFMPEG:RTSP 流冻结但 FFMPEG 继续录制

Kag*_*uki 5 ffmpeg rtsp

编辑:在撰写本文时,FFMPEG 中没有任何功能可以检测/处理 RTP/RTSP 流何时仍处于活动状态但不再传送有效帧。我能找到的唯一解决方案是通过停止录制来定期重置流,然后重新连接并开始新的录制,但这-f segment是行不通的。


我正在使用 FFMPEG 从网络摄像机录制 RTSP 流,并在一段时间后(通常大约一个半小时到两个小时)。我确信这具体是我使用的相机的问题,而不是 FFMPEG 或我的系统资源的问题。

具体发生的情况是视频冻结,但摄像机的网络流量仍在继续 - 它似乎没有发送新帧。由于这种行为,FFMPEG 不会断开连接/继续录制,因为网络连接仍然存在。几分钟后,FFMPEG 输出中总会出现一个警告: More than 1000 frames duplicated 但它会继续录制 - 只是一遍又一遍地显示同一帧。

我正在使用的命令是:

ffmpeg -stimeout 1000000 -rtsp_transport udp -fflags discardcorrupt -i rtsp://192.168.1.163/live/0/MAIN -vc libx265 -f segment -segment_time 300 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1  "163-%Y-%m-%d_%H-%M-%S-h265.mp4"
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • stimeout 似乎没有做任何事情,因为网络连接保持不变,相机似乎只是停止发送(有效)帧。
  • 更改复制的编解码器并不能改善问题
  • 更改 RTSP 传输并不能改善问题
  • 我知道有一个过滤器可以检测冻结帧,但我的 FFMPEG 似乎没有它 - 我现在要尝试自己构建 FFMPEG;但更喜欢与捆绑的 FFMPEG 一起使用的解决方案 ~> 4.1.3

让 FFMPEG 在复制 > 1000 帧后失败并退出实际上是理想的,因为这样我就可以从脚本中生成 FFMPEG,监视进程,并在进程结束时重新启动它。任何解决方案都会很棒。

小智 1

这个人会帮助你:

11.134 mp抽取

丢弃与前一帧差别不大的帧,以降低帧速率。

该过滤器的主要用途是用于极低比特率编码(例如通过拨号调制解调器进行流传输),但理论上它可以用于修复错误地反向电视传送的电影。

像这样使用:“-vf”,“mpdecimate,setpts = N / FRAME_RATE / TB”,

  • 我应该更新我的问题,但我实际上尝试过。因为帧中没有真实数据,所以 mpdecimate 无法实际执行比较,并且过滤器永远不会运行 - 数据仍然填满。问题不在于 ffmpeg 本身,我能找到的唯一解决方案是定期重置连接(停止并重新开始录制)。目前我知道/可以发现 ffmpeg 中没有任何功能可以检测流何时不被丢弃但不再传输帧。 (2认同)