React在线录屏App:如何通过AWS分片上传合并MP4至S3?
分片录屏上传与AWS视频合并解决方案
一、替代S3 Multipart Upload的分片上传方案
既然S3 Multipart Upload的5MB最小分片限制不符合你的需求,你可以直接用普通对象上传处理小片段:把前端录制的小分片(比如1-2MB级)逐个上传到S3,不需要依赖Multipart API。Laravel后端接收前端传来的分片后,通过AWS SDK直接上传到S3,同时记录每个分片的文件名、顺序编号和所属的用户录制任务ID。
二、AWS视频合并服务推荐
1. AWS Elemental MediaConvert
这是最适配的托管式视频处理服务,支持将S3上的多个视频片段按顺序合并为标准MP4:
- 所有分片上传完成后,Laravel后端创建MediaConvert作业,指定输入为S3上的分片文件列表(严格按录制顺序排列),输出格式设为MP4,输出路径指向S3目标存储位置。
- MediaConvert会自动处理分片的编码一致性问题(只要前端录制的分片保持相同分辨率、帧率、编码格式),无需手动处理编码逻辑。
- 优势:完全托管,支持大规模并发任务,提供作业状态回调,无需维护服务器。
2. AWS Lambda + FFmpeg
如果需要自定义合并逻辑,可采用Lambda运行FFmpeg的方案:
- 分片上传完成后,Laravel后端触发Lambda函数,函数从S3下载所有分片到临时存储,执行FFmpeg合并命令(例如
ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" ${分片路径列表}) -c copy output.mp4),再将合并后的MP4上传回S3。 - 注意事项:Lambda临时存储默认512MB,若分片总大小超出需挂载EFS扩展;可使用预打包FFmpeg的Lambda层简化环境配置。
- 优势:小任务场景成本更低,自定义程度高,适合有特殊合并规则的需求。
三、前后端配合关键要点
- 前端录制时按固定时长(如10秒)生成小分片,上传时携带任务ID和分片序号,确保后端能正确排序。
- Laravel后端维护每个录制任务的分片上传状态,待所有分片上传完成后再触发AWS合并服务。
- 合并完成后,后端可通知前端结果,同时可清理S3上的临时分片文件(按需选择)。
内容的提问来源于stack exchange,提问作者Matteo Robert
相关产品推荐
相关产品推荐

