涂鸦的嵌入式云存储是将音视频数据打包成一个文件,并通过https上传到第三方对象存储的一个服务。我们按照这个业务顺序来分别介绍下云存储的具体功能。
文件打包
音视频数据一般缓存在ringbuf模块的缓冲区中,云存储模块通过ringbuf提供的取帧接口来获取这些音视频帧。拿到这些音视频帧后,按照涂鸦的规则生成一个音视频文件。
文件信息
每个录像文件的大小默认为10秒
每个文件为多个音视频帧的集合(H264或H265)
每个帧会携带涂鸦私有头部
预录
云存储的录像支持预录功能,也就是可以录制当前时间点前面一段时间的录像。这个功能不是无限预录的,它受ringbuf大小的限制和GOP大小的影响。
假设预录N秒,ringbuf缓存时长为r_t秒,GOP的时长为g_t秒。
预录时,云存储会从ringbuf距当前时间N秒的位置开始,向更早的时间方向找到一个可用的I帧,并从此处开始录像。ringbuf大小往往有限制,所以这个N秒不能超过ringbuf的时长r_t。另外,因为需要向前找到I帧,故也不能超过ringbuf时间减去GOP时长的大小,即r_t - g_t。
音视频同步
从ringbuf取帧时,会同时取出视频帧和音频帧,选择时间最早的帧来放入音视频文件中,这样保证文件中的音视频数据时间戳严格有序。
文件结束条件
一个录像文件的结束同时受到以下几点的影响:
是否超过了录像文件的最大时长(默认10秒)
是否已经超过文件的最大长度限制(即云存储的缓存大小)
是否超过录像的最大时长(默认5分钟)
是否发生了跨天
配置获取
云存储模块会定期(有订单30分钟,无订单60分钟)向涂鸦云获取本设备在第三方对象存储的一些配置信息。配置的获取方式是涂鸦的atop服务(https)。配置包含以下几个主要内容:
订单的类型(事件存储、连续存储)
第三方服务商信息(AWS、AZURE、COS、OSS等)
第三方服务商的存储路径及token信息
上传
根据不同服务商的协议,涂鸦会根据上述配置来进行拼接服务商存储路径以及鉴权信息。然后通过https的方式将文件推送到服务商对象存储。
因部分服务商对http chunk属性支持不好,故https采用固定content-length的方式,故上传前需要将文件录制完成,然后上传固定大小。
订单维护
涂鸦有两种方式来进行订单信息更新:mqtt通知和http查询。
Code: Select all
[b]Mqtt通知[/b]
当订单购买、订单类型变更、订单过期时,涂鸦云端会向设备发送一个Mqtt消息,通知订单信息的变更。
[b]Http查询[/b]
有以下时机来进行http查询订单,即获取云存储配置:
云存储模块初始化
无订单时每小时一次
有订单时半小时一次
安全
数据传输的安全,由以下几点保障:
使用https传输
对视频I帧和音频数据,使用AES128-CBC加密
AES加密的密钥,每个设备都不相同。每个设备都会向涂鸦云拉取最新的密钥
录像时长
录像时长最大为5分钟。在每次开启录像时,均可以设置本次录像的持续时间。