我正在使用 ffmpeg 通过网络将视频录制到由 sshfs 挂载的文件系统。我一直遇到的问题是,如果我的机器进入睡眠状态,ssh 连接会断开并必须重新连接(我正在使用-o reconnect
sshfs 选项,所以我不会失去连接)。对于大多数正在访问文件系统的进程,他们似乎甚至没有注意到瞬时断开连接,就好像文件系统只是需要很长时间才能达到超时并重新连接。
但是,对于 ffmpeg,我遇到了一个真正的问题,因为我收到了以下消息,而不是仅仅挂了一点:
av_interleaved_write_frame(): Input/output error
并且随着那个ffmpeg毫不客气地放弃并退出,留下一个无法播放的视频文件!
我尝试了各种 ffmpeg 选项,例如-reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 4962 -timeout 2000000000
. 当我尝试这些选项时,行为是相同的,除了单个输入/输出错误之外,它还有如下消息:
Last message repeated 135 times
Error writing trailer of /sshfs/test.mp4: Input/output error
这一切都发生在很短的时间内,就好像它正在重试一些随机次数(我看到它低至 39 次),中间没有任何延迟。
我不知道问题出在 sshfs 还是 ffmpeg 中,但我需要能够可靠地编写视频,而不是让它创建无法播放的视频文件,因为这是在定期进入睡眠状态的设备上。我怎样才能做到这一点?
注意:我在 Ubuntu 18.04 包中的默认 ffmpeg 二进制文件和直接从 ffmpeg.org 下载页面下载的 64 位预编译静态版本 4.2.2 中都看到了这个问题。
更新:我开始认为这是 sshfs 的错,因为如果我做类似cat /dev/zero > /sshfs/tmp.mp4
的事情并且连接断开,它不会重新连接(由于正在进行的猫),即使它重新连接(因为我尝试另一个访问戳它以重新连接)猫一直挂着。