我有一个脚本,可以使用 ffmpeg 从 wifi 摄像头捕获图像。 它工作正常,直到由于网络问题无法访问相机为止。 该脚本卡在 ffmpeg 捕获中并且永远不会退出。是否可以有某种超时? -stimeout(以毫秒为单位)似乎不起作用。
脚本中有一部分捕获图像。 (之后还有一些操作)
#!/bin/bash
week="$(date '+%Y_%U')"
ts="$(date '+%Y-%m-%d_%H:%M:%S')"
ffmpeg -rtsp_transport tcp -y -i "rtsp://192.168.64.101" -frames:v 1 $week/$ts.jpg -stimeout 3000 -y
我在其他相机上进行了测试,结果是:
ffmpeg -y -i "rtsp://192.168.64.112:8554/profile0" -frames:v 1 Ilatest.jpg
工作正常,但超时 5 秒
ffmpeg -timeout 5000000 -y -i "rtsp://192.168.64.112:8554/profile0" -frames:v 1 Ilatest.jpg
没有,我得到的错误报告为:
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
...
...
[rtsp @ 0x55d250488740] Unable to open RTSP for listening
rtsp://192.168.64.112:8554/profile0: Cannot assign requested address
RTSP协议文档表示有
timeout
选项。我会尝试:
ffmpeg -rtsp_transport tcp -stimeout 3000 -y -i "rtsp://192.168.64.101" ...
跳出框框思考...您可以使用一个看门狗脚本来查找指定目录中最新的 jpg 文件。如果它比应有的旧,则终止 ffmpeg 进程并重新启动它。
这是我从 DVR 连续录制 RTSP 流的解决方案。导致 ffmpeg 挂起的网络问题将在很长一段时间内被发现并尽快纠正。
我想说
-rw_timeout 5000000
非常适合我。如果流媒体停止 5 秒,ffmpeg
命令将检测到它并在退出前保存视频文件。