AOV 录像本地存储

更新时间:2025-01-15 07:57:34下载pdf

智能全时录像(Always On Video,AOV)与普通录像的产生机制并不相同,录像帧率、码率等参数也不相同。基于此特点,需要在现有存储系统下,新增一种新的存储逻辑处理 AOV 录像。

功能描述

具有 AOV 功能的设备,会产生与普通录像不同参数的视频数据,在时间维度上具有以下关系:

AOV 录像本地存储

如上图所示,AOV 录像和普通事件录像在时间上是互斥的,且 AOV 录像和正常录像的时长比例没有限制。所以,AOV 录像可看作一种新类型的事件录像,只是在存储流程上与普通录像略有不同。

关联组件

  • svc_local_storage
  • svc_aov_buffer

存储目录结构

AOV 录像存储目录结构与当前常规录像保持一致,参考:目录和文件结构

录像格式

AOV 录像记录格式与当前常规录像保持一致,参考:录像格式

录像模式

在产品需求层面增加新的存储模式选项,以区分是否要存储 AOV 录像。

SDK 仅提供 AOV 存储接口和参数,上层应用按需调用来实现对应的存储模式。

数据结构和 API 说明

本地(AOV)存储初始化参数

AOV 初始化参数与本地存储初始化参数一致,参考:初始化参数

本地存储初始化参数中有以下参数集合:

TUYA_IPC_AOV_STORAGE_INFO_T aov_info;       // aov recording parameters 

可对 AOV 存储单独进行初始化配置。

开启 AOV 录像存储

/**
 * @brief start aov local storage
 * 
 * @param[in] chan stream channel
 * @return OPRT_OK on success. Others on error
 */
OPERATE_RET tuya_ipc_ss_start_aov_local_storage(IN IPC_STREAM_E chan);

在本地存储模块和 AOV ring buffer(简称 ringbuf) 初始化后,调用此接口,可开始 AOV 录像的写入流程。

停止 AOV 录像存储

/**
 * @brief stop aov local storage
 * 
 * @param[in] chan stream channel
 * @return OPRT_OK on success. Others on error
 */
OPERATE_RET tuya_ipc_ss_stop_aov_local_storage(IN IPC_STREAM_E chan);

调用此接口,可停止本次 AOV 录像的写入。

AOV 录像写入状态

/**
 * @brief get aov local storage write status
 * 
 * @param[in] chan stream channel
 * @return STORAGE_AOV_STATUS_E
 */
STORAGE_AOV_STATUS_E tuya_ipc_ss_get_aov_storage_status(IN IPC_STREAM_E chan);

调用此接口,可获取当前 AOV 录像的写入状态。

开发指导

本地存储

SDK
按照常规录像规则写入存储介质
SDK本地存储获取AOV帧
帧处理
AOV 录像文件
逐帧导入AOV ringbuf

如上所示,SDK 提供了新的 AOV ringbuf 接口,与常规的 ringbuf 接口区分使用。
上层应用需要按规则将 AOV 视频导入到 ringbuf,之后将 AOV 视频存储到 TF 卡等介质中的流程将自动完成。

回放

AOV 录像的回放与常规录像回放的流程和步骤一致,不需要特殊处理。

云存储

云存功能与本地存储相似,同样需要依赖 AOV ringbuf。本地存储和云存业务需要使用同一个 AOV ringbuf,不需要分开使用。云存开启、停止接口使用可参见您下载的文件中的 Demo code。

SDK
满足上传条件后分片上传
SDK云存储模块获取AOV帧
帧处理
AOV 录像文件
逐帧导入AOV ringbuf

AOV 录像功能点备注

  • AOV 录像写入、上传时机:AOV 录像缓存达到最大限制时,或低功耗设备的事件触发后唤醒主控后,开始上传云存和写入本地。
  • AOV 录像上传云存期间:
    • 没有任何事件发生,仍然需要将上传期间的录像作为 AOV 录像写入缓存,以待下次上传和写入。
    • 如有事件触发,切换成正常模式,音视频数据传入常规 ringbuf,开启正常的录像上传。
    • 如有 App 预览,需要切换成正常模式。
  • App 预览模式下,设备需要采用正常帧率录像,云存储按照正常模式上传。
  • AOV 录像在上传时,如有事件触发,需要对 AOV 录像和事件录像做优先级控制(按产品需求),同时上传要考虑网络带宽限制。
  • AOV 录像的本地存储,在跨天时会切换新的文件夹继续保存。

FAQ

AOV 开关打开的情况下,录像没有生成?

  • 当仅选择事件录像,关闭 AOV:只录事件。
  • 当选择事件录像,同时打开 AOV:有事件时正常录像,无事件时 AOV 录像。

AOV 云存片段高概率出现上传失败?

低功耗设备,录像事件推送完成后才可以休眠。

App 回放的时间轴上事件片段和 AOV 片段之间有间隙或有重叠 ?

事件和 AOV 交替产生时,会出现此问题。开启云存后,现象会更明显。

  • 原因:云存录像上传需要时间,这段时间内无法产生录像,因此需要让下一段录像的起始时间覆盖到此时间点。
  • 方案:前一段录像结束时间和下一段录像开始时间要相同,App 渲染才不会有空隙。

上层应用录像逻辑可调整为以下:

事件/AOV 结束
AOV/事件 录像开始
根据上次记录的时间戳,调整第一帧的时间
向 AOV/normal ringbuf 写入帧数据
停止向 (AOV/normal) ringbuf 写入数据
记录最后一帧的时间戳
调用 事件/AOV 结束API
  • 全时录像模式下,App 预览时,无论是否发生事件,也要持续向 ringbuf 中写入帧,直到预览结束再停止向 ringbuf 中写入,之后再调用事件结束 API。
  • 事件模式下,App 持续预览时,如发生事件,在事件结束后,直接调用事件结束 API,不需要停止写入帧。

AOV 录像和普通录像分辨率能否不同?

不能,不同的分辨率 App 端回放下载会有问题。

回放、下载倍速能力未上报?

tuya_ipc_ss_init 调用要在 VOID 接口 tuya_ipc_upload_skills(VOID) 调用之前。