AWS MediaConvert处理Safari录制视频报错1076,提示文件读取失败疑似截断
报错根因
你遇到的Demuxer: [ReadPacketData File read failed - end of file hit at length [13155941]. Is file truncated?]报错,核心是AWS MediaConvert对iOS浏览器录制的MP4封装兼容性不足,和本地MP4的差异点如下:
- iOS端Safari/Chrome录制的MP4默认将
moov元数据块放在文件尾部,而MediaConvert读取输入文件时会优先校验文件头部的元数据,找不到对应元数据就会判定文件被截断。本地导出的MP4一般默认将moov块放在头部,所以可以正常处理。 - 部分iOS版本浏览器录制的MP4采用fMP4(碎片化MP4)封装结构,默认的MediaConvert输入配置未开启碎片化输入支持,导致解复用失败。
补充说明:AWS Elastic Transcoder默认兼容尾部
moov块以及碎片化MP4输入,做了额外的兼容适配,所以处理相同文件不会触发报错。
解决方案
你可以任选以下一种方案修复:
- 前端预处理录制文件:录制完成后,在前端调用FFmpeg.wasm执行命令
ffmpeg -i 原录制文件.mp4 -movflags +faststart 输出文件.mp4,将moov块移到文件头部同时标准化封装结构,再上传到S3触发转码任务。 - 修改MediaConvert任务配置:通过
aws-sdk提交任务时,在Inputs参数对应的输入配置项中,将InputScanType设置为FRAGMENTED,开启碎片化输入兼容。 - 服务端中转处理:如果前端修改成本较高,可以新增Lambda中转节点,给Lambda绑定FFmpeg层,收到S3文件上传事件后先标准化视频封装,再触发MediaConvert任务。
排查校验点
修改前可以先做以下校验排除其他问题:
- 确认前端上传逻辑是在MediaRecorder的
onstop事件完全触发后再执行上传,避免上传未完成的录制文件。 - 下载触发报错的S3文件到本地,用普通播放器测试是否可以正常播放,排除文件上传截断问题。
内容的提问来源于stack exchange,提问作者Ravi Singh
相关产品推荐
相关产品推荐

