发布于: Oct 10, 2022

传统的视频存储系统在保存与后续的检索上都存在诸多不便,若是能够搭建一个监控视频云存储服务器便能在很大程度上解决这些问题。本文将会为你介绍搭建这样一个服务器所需工具及具体操作步骤。

用户可以从 Github下载 SDK 代码并编译到自己的 IPC 之中:
IPC-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 云存视频的安全性。其参考架构如下:

S3 视频存储桶提供高达99.999999999%的数据持久性。意味着如果以3秒分片保存到 S3,每10000年才会丢失一个3秒的视频分片。从而确保存储视频的安全性。
此外,在视频云存时,推荐使用以下格式进行存储:
S3://{桶名称}/{设备证书ID}/{年}/{月}/{日}/{时}/{分}/{秒}.ts
该格式可以提供以下优势:

  • 确保数据存储和访问安全
    利用设备证书 ID 作为第一级前缀,实现各个 IPC 设备之间的权限相互独立与隔离。即每个摄像头均只能访问自己证书 ID 前缀之下的视频分片。通过IAM角色配置,更加可以实现限制 IPC 设备仅能够进行上传操作,而无法下载视频分片,从而确保视频云存安全性。
  • 性能自动扩展
    由于各个 IPC 分别属于不同的前缀之下,亚马逊云科技为每个 S3 前缀提供每秒3500 PUT 和 5500 GET 请求的性能,因此当 IPC 摄像头数量增加时,S3 将自动优化并提供对应性能的处理能力。从而实现使用统一架构支持从几个到数以百万计 IPC 设备的能力。  

当视频分片上传到 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 中存储的视频元数据,获取所需回看的时间段范围,将结果返回给客户端进行回看。

相关文章