将 .mov 视频文件上传到远程 sftp 位置时遇到一个奇怪的问题:
问题是,虽然本地 video1.mov 可播放,但远程 video1.mov 在尝试播放时会抛出 -2048 错误(以及“未找到 moov atom”之类的日志)。
前提:本地文件和远程文件的大小完全相同。那么会有什么问题呢?
答案1
某些视频格式不能像这样从头到尾进行编码;编码器返回到开头修改一些数据字段(大小、长度等)。分段复制无法处理这种情况,因此您现在得到的是损坏的视频文件。
答案2
据我所知(我找不到任何描述甚至承认其存在的文档),SFTP 恢复假定目标文件已存在的部分与源文件的第一部分相同,直到远程文件的大小为止。然后它将源文件的其余部分附加到现有目标文件后面,并假定这两个文件现在相同。
如果在恢复传输之前,任一文件中最初传输的部分发生变化,则此方法会失败。我猜想您的.mov
文件在文件的最开始部分有一些播放所需的标头,并且直到编码完成才会将其写入文件。那么您复制的远程文件将错过此标头,因为在传输时尚未写入此标头。
其他工具也rsync
有能力检测这些事情,并且在某些情况下避免重新传输整个文件,至少如果后期改变只是覆盖而不是插入。