如何将实时视频流上传至AWS S3存储桶?
摄像头实时视频流上传至AWS S3的实现方案
方案一:通过Kinesis Video Streams中转(推荐专业视频流场景)
Kinesis Video Streams是AWS针对实时视频流的托管服务,可稳定接收、存储流数据,再转存至S3:
- 创建Kinesis Video Streams流,按需设置数据保留周期、存储类型等参数。
- 将摄像头推流目标配置为Kinesis的Ingest端点(控制台可获取),确保摄像头支持RTSP、HLS或Kinesis原生PutMedia协议。
- 开启流的「导出到S3」功能:在控制台指定目标存储桶、导出频率(如每5分钟导出一个分片),无需额外代码即可完成自动转存。
- 权限配置:给摄像头分配具备
kinesisvideo:PutMedia权限的IAM角色,同时确保Kinesis拥有s3:PutObject权限访问目标S3桶。
方案二:IoT Core + Lambda(适合轻量视频分片上传)
若摄像头支持MQTT/HTTP协议,可通过IoT Core转发数据到Lambda再写入S3:
- 在AWS IoT Core注册摄像头设备,获取设备证书、密钥及IoT端点。
- 配置摄像头通过MQTT主题或HTTP POST,将切分后的视频片段(如每10秒一个小文件)发送到IoT Core。
- 创建IoT规则,将接收到的视频数据转发至Lambda函数;在Lambda中调用S3的
PutObject接口,将片段上传至指定存储桶。 - 权限设置:给Lambda角色添加
s3:PutObject权限,同时配置IoT Core具备调用Lambda的权限。
方案三:S3预签名URL(适合支持HTTP PUT的摄像头)
无需中间服务,直接让摄像头通过预签名URL上传视频分片:
- 搭建后端服务(如EC2、Lambda),定时生成S3预签名URL(含上传权限、过期时间,比如1小时有效期),并下发给摄像头。
- 摄像头通过HTTP PUT请求,将切分好的视频片段上传至预签名URL对应的S3路径。
- 后端可定期更新预签名URL保证上传持续性,同时确保生成服务具备
s3:PutObject权限。
关键注意事项
- 视频格式:优先选择H.264编码的MP4、TS等标准格式,避免兼容问题。
- 权限最小化:遵循IAM权限最小化原则,仅分配必要操作权限。
- 成本优化:低频次小流量场景优先用预签名URL,高并发专业流场景选Kinesis Video Streams。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

