亚马逊AWS官方博客
利用云上托管服务和AI构建安防视频云存
安防视频云存业务特点与面临挑战
传统视频数据因为缺乏元数据索引,因此在无法确定精确的事件发生时间时,无法快速有效的定位视频信息,需要大量人力对存量视频信息进行检索。由此引入巨大的人力成本,并需要更多时间完成视频检索。
此外,传统安防视频具有以下特点:
- 使用RTMP/RTSP协议实现视频流收流。
- 需要海量、可靠的视频存储。
- 仅在有事件发生,并需要了解现实情况时才进行回看。
- 回看框架需要确保7*24可用,在需要时可以快速访问从而实现回看功能。
以上特点意味着:
- 需要在云端或本地部署额外的软/硬件资源,实现视频流接收,引入额外成本。
- 传统的本地视频存储受限于单一副本,存在单点故障导致的视频丢失风险。固定的本地存储容量,使得增加摄像头数量时需要配套考虑存储设施容量规划和部署方案,使得项目周期变长,项目规划更加复杂。
- 回看框架访问频率不高,但7*24可用意味着即使没有回看需求的时间段内,仍然需要支付对应的系统运行成本。
针对以上困难和特点,我们针对IPC视频云存成本优化场景,开发了可以植入到IPC内部的视频切片云存SDK,并利用亚马逊云科技提供的云上托管服务构建视频检索、回看平台,从而降低回看平台基础运行成本,实现回看成本与累积回看时长相关,在不使用回看平台时,几乎无需支付平台运行成本,而当有人访问时又可以快速提供服务。
解决方案架构与主要功能模块
主要功能模块:
- IPC C SDK
植入到IPC内部的SDK,用于实现视频分片和封装,将可以直接回看的视频分片存储到S3存储桶中。并通过IAM权限管理,实现IPC上传权限的管理,从而确保各IPC视频上传权限相互独立。
利用SDK直接将视频上传至S3存储桶,从而摆脱本地或云端视频流转存所需的资源,实现云存成本与存储视频累计时长相关。
- S3视频存储桶
用于存储IPC视频分片信息,支持使用S3对象标签和生命周期管理功能,实现视频分片保存周期管理和视频存储成本优化。
同时,利用S3每个前缀提供3500 PUT和5500 GET请求的性能,利用前缀命名规则,实现云存空间性能自动扩展,从而实现使用统一的框架支持从几个到数以百万计的IPC设备。
- 对视频抽帧并调用AI接口和DynamoDB元数据存储
针对传统IPC视频存储难以检索的情况,引入云上AI服务,实现智能视频分析,并根据视频内容,生成相应元数据信息,并保存在DynamoDB之中。用户可以选择使用DynamoDB中信息,对视频内容进行检索,从而快速定位到所需的视频片段和对应时间,进而有效提升视频检索效率,缩短视频检索所需时间。
- AI服务
亚马逊云科技提供了丰富的AI服务可以用于视频分析与检索。目前支持的主要AI服务可以参考以下解决方案:
https://www.amazonaws.cn/solutions/ipc-ai-saas-solution/
由于AI服务部分内容较多,限于篇幅,该解决方案另行刊文作详细介绍。敬请期待。
- 无服务器架构构建回放平台
为了切实降低回看平台运行成本,特别是没有回看请求时的成本,本解决方案采用了云原生的无服务器架构。具有无用户使用时,成本极低,收到请求时支持秒级快速启动,自动扩展,统一系统架构支持几个到数以百万计的用户同时访问。
IPC-C-SDK
用户可以从Github下载SDK代码并编译到自己的IPC之中:
https://github.com/aws-samples/ipc-h264-hls-c-sdk/
IPC-C-SDK从IPC内部视频、音频编码器获得视频、音频流,并通过增加TS、PAT、PMT、PES头,形成TS格式音视频流,并存储于IPC SoC内存缓存区中。
当内存缓存区中的音视频流达到一定阈值后,IPC-C-SDK会自动通过内置S3客户端,将视频内容以对象形式推送到S3存储桶中。
得益于IPC-C-SDK,视频分片得以直接存储到S3中,而无需其他音视频码流处理设备或资源。从而使得成本得以有效降低到仅需要S3存储和API调用成本的程度。实现了成本的最优化。
IPC-C-SDK使用亚马逊云科技IAM进行权限管理。支持AK+SK和AK+SK+Token的身份验证模式。实际生产环境中,推荐使用Amazon IoT进行设备管理,配合IoT Credential Provider服务,实现物联网设备证书换临时IAM身份信息。该方案提供最佳的云上数据安全性,支持按照设备证书ID管理设备权限,从而确保IPC云存视频的安全性。其参考架构如下:
用户可以参考以下文档:
https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html
S3视频存储桶
S3视频存储桶提供高达99.999999999%的数据持久性。意味着如果以3秒分片保存到S3,每10000年才会丢失一个3秒的视频分片。从而确保存储视频的安全性。
此外,在视频云存时,推荐使用以下格式进行存储:
S3://{桶名称}/{设备证书ID}/{年}/{月}/{日}/{时}/{分}/{秒}.ts
该格式可以提供以下优势:
- 确保数据存储和访问安全
利用设备证书ID作为第一级前缀,实现各个IPC设备之间的权限相互独立与隔离。即每个摄像头均只能访问自己证书ID前缀之下的视频分片。通过IAM角色配置,更加可以实现限制IPC设备仅能够进行上传操作,而无法下载视频分片,从而确保视频云存安全性。
- 性能自动扩展
由于各个IPC分别属于不同的前缀之下,亚马逊云科技为每个S3前缀提供每秒3500 PUT和5500 GET请求的性能,因此当IPC摄像头数量增加时,S3将自动优化并提供对应性能的处理能力。从而实现使用统一架构支持从几个到数以百万计IPC设备的能力。
视频抽帧并调用AI接口将结果存储到DynamoDB中
当视频分片上传到S3存储桶中后,用户可以选择使用AI技术对视频内容进行分析。例如:检测视频中出现的人脸和相应位置,并将结果保存到DynamoDB中,供后续查询使用。
视频数据在上传到S3后,会触发S3事件通知。通过云端Lambda函数,可以实现抽取视频关键帧,并转换为JPEG格式,发送给AI接口进行分析。
AI分析的结果会以JSON格式,返回给Lambda函数,Lambda函数将分析结果信息存储到DynamoDB数据库中,供回看平台检索使用。
无服务器架构构建视频回看平台
得益于以TS格式保存的视频分片,云存视频分片可以实现任意时间段内分片连接成整体视频进行回看。因此无需在云端进行二次转码操作。从而降低系统成本。
无服务器的视频回看平台使用开源Video.js框架,提供两种回看模式:
- 近实时回看(延迟6-20秒,取决于网络和客户端配置情况)
在近实时回看模式下,客户端通过API Gateway HTTP API请求m3u8播放列表,Lambda函数检查S3桶中存储的分片,并将2分钟之内,最后上传的3个视频分片返回给客户端。通过滚动更新m3u8返回分片清单,实现近实时的查看视频内容。
- 指定时间段回看
客户端通过API Gateway HTTP API请求m3u8播放列表,并提供回看时间段的开始、截止时间。Lambda函数检查S3桶中存储的分片,并将指定时间段内的视频分片按照顺序添加到m3u8播放列表中返回给客户端,从而实现制定时间段的视频回看功能。
指定时间段回看支持通过检索DynamoDB中存储的视频元数据,获取所需回看的时间段范围,将结果返回给客户端进行回看。
您可以通过以下链接在亚马逊云科技的环境中一键部署回看框架。框架中的回看应用带有示例视频供您参考。