更新时间:2025-09-17 07:19:30下载pdf
录像云存储,指的是设备将录像数据,写入第三方云服务商对象存储服务器的功能。为实现音视频数据的即时备份,涂鸦基于 环形缓存(Ring Buffer) 和云端对象存储服务,实现了录像数据的云端存储(Cloud Storage)功能。
录像云存储从环形缓存中读取音视频数据,经过数据加密后,上传至云端对象存储服务器,实现录像数据的云端备份。结合实际的应用场景,涂鸦录像云存储支持以下功能:
对象云存储服务,采用通道和数据双重加密,有效保证了数据的安全性。
录像云存储,通过 HTTPS 协议,向云端对象存储服务器发送录像数据,实现了传输通道的安全性。这里需要特别说明的是,设备会对云端对象存储服务器的 CA 证书进行校验,校验通过后,才会开始上传录像数据。
在录像数据上传前,会对视频关键帧 I 帧和音频帧,通过 AES 算法进行加密,保证了数据和通道的双重安全性。
svc_cloud_storage
typedef enum
{
CLOUD_STORAGE_TYPE_CONTINUE, // 连续订单类型
CLOUD_STORAGE_TYPE_EVENT, // 事件订单类型
CLOUD_STORAGE_TYPE_INVALID // 未购买订单
} CLOUD_STORAGE_TYPE_E;
初始化录像云存储服务。主要包括内部缓存空间的申请和录像线程的创建。
/**
* @brief initialize cloud storage, which will malloc all needed memory after this
* @return error code
* - OPRT_OK init success
* - Others init failed
*/
OPERATE_RET tuya_ipc_cloud_storage_init(VOID);
反初始化录像云存储服务。该操作主要执行缓存空间的释放和录像线程的销毁。
/**
* @brief uninit cloud storage, free used memory
* @return VOID
*/
VOID tuya_ipc_cloud_storage_uninit(VOID);
该接口可以获取订单类型,判断设备是否开通录像云存储服务。订单类型可分为连续云存储、事件云存储和未购买订单类型。
/**
* @brief get current storage type, based on purchase order
* @return CLOUD_STORAGE_TYPE_E
* - CLOUD_STORAGE_TYPE_CONTINUE continuous record type
* - CLOUD_STORAGE_TYPE_EVENT event-based type, only record and store audio/video when there is event happening
* - CLOUD_STORAGE_TYPE_INVALID no cloud storage order exist
*/
CLOUD_STORAGE_TYPE_E tuya_ipc_cloud_storage_get_store_mode(VOID);
设备发生事件时,开始一段事件录像。
/**
* @brief start event cloud storage
* @return error code
* - OPRT_OK cloud storage start success
* - Others cloud storage start failed
*/
OPERATE_RET tuya_ipc_cloud_storage_event_start(VOID);
设备当前事件结束时,结束正在进行的事件录像。该接口为同步接口,最长阻塞 30 秒。
/**
* @brief stop event cloud storage, synchronous api
* @return error code
* - OPRT_OK cloud storage stop success
* - Others cloud storage stop failed
*/
OPERATE_RET tuya_ipc_cloud_storage_event_stop(VOID);
设备当前事件结束时,结束正在进行的事件录像。该接口为异步接口,不会发生阻塞。
/**
* @brief stop event cloud storage, asynchronous api
* @return error code
* - OPRT_OK cloud storage stop success
* - Others cloud storage stop failed
*/
OPERATE_RET tuya_ipc_cloud_storage_event_stop_async(VOID);
获取录像状态,用于判断录像是否正在进行。
/**
* @brief get cloud storage status
* @return BOOL_T
* - TRUE cloud storage is uploading
* - FALSE cloud storage is not uploading
*/
BOOL_T tuya_ipc_cloud_storage_get_status(VOID);
设置音频开关,关闭音频功能时,录像存储只从环形缓存中读取视频数据,不读取音频数据。
/**
* @brief set audio open/close
* @param[in] is_audio_open
* @ref TRUE open audio for cloud storage
* @ref FALSE close audio for cloud storage
* @return VOID
*/
VOID tuya_ipc_cloud_storage_set_audio_stat(BOOL_T is_audio_open);
设置预录时长,最大值不超过环形缓存的最大时长。该接口未设置时,默认的预录时长为 2 秒。
/**
* @brief set cloud storage pre record time duration
* @param[in] pre_recode_time pre record time duration for cloud storage
* - OPRT_OK set pre record time success
* - Others set pre record time failed
*/
OPERATE_RET tuya_ipc_cloud_storage_set_pre_record_time(INT_T pre_record_time);
暂停录像云存储服务,录像线程暂停从环形缓存读取数据,暂停数据的上传。通常,隐私模式下,需要暂停录像。
/**
* @brief pause cloud storage, used in privacy mode e.g.
* @return VOID
*/
VOID tuya_ipc_cloud_storage_pause(VOID);
恢复录像云存储服务,录像线程恢复工作。通常,退出隐私模式时,需要恢复录像,与 tuya_ipc_cloud_storage_pause
配对使用。
/**
* @brief resume cloud storage which is paused by pause API
* @return VOID
*/
VOID tuya_ipc_cloud_storage_resume(VOID);
录像云存储 在初始化时即申请连续的内存。是为了减少在运行过程中,占用的内存动态变化导致的 内存溢出(Out of memory,OOM)等问题。整体内存占用大小为,11 秒对应码率 bitrate 的乘积。
录像云存储申请的内存空间,用于缓存加密后的音视频数据,上传至云端对象存储服务器。
录像云存储在反初始化时,释放申请的内存空间。
max_buffer_seconds
设置降低到 4-6 秒。max_buffer_seconds
可以设置为 6 秒或 8 秒。max_buffer_seconds
,在网络状况比较差的环境下,会增加云存储丢失的风险。环形缓存定位预录帧,是从最新的数据帧往前 frame_num
帧起继续往前查找,直到数据帧类型为关键帧 I 帧。frame_num
对应预录时长和帧率 FPS 的乘积。
因此,预录帧的位置不是一个固定位置,实际的预录时长,与设置值存在一定差异。
录像云存储默认采用主码流,目前暂时不支持子码流录制。
可能有以下两种情况及原因:
取值情况 | 原因 |
---|---|
几秒钟内 tuya_ipc_cloud_storage_get_status 拿到的值是 1 ,几秒后是 0 |
tuya_ipc_cloud_storage_event_stop_async 接口是立即返回的,而且云存储录像要一直录制到 调用 tuya_ipc_cloud_storage_event_stop_async 时间点的录像 才结束,这就要额外需要一点时间将云存储录制文件上传完成 例如,在 18:31:30 调用的 tuya_ipc_cloud_storage_event_stop_async ,可能当前还在录制 18:31:28 的视频,要等到 18:31:30 的视频流录像录制完成,才会真正结束 |
超过一分钟,tuya_ipc_cloud_storage_get_status 拿到的值仍然是 1 |
同上文所描述的情况,可能是设备没有一直向 ringbuf 塞流。如 18:31:30 调用 Stop 后就没有继续向 ringbuf 塞流,存储模块没有拿到 18:31:30 的视频流,因此无法认为是录制完整的,就会一直处于等待和尝试获取的状态 另外,也可能是由于网络异常,导致云存储录像文件一直没有发送完整 |
同上文表格中 超过一分钟拿到的值仍为 1
介绍的原因,大概率是由于调用 Stop 后,没有继续向 ringbuf 塞流。
tuya_ipc_cloud_storage_get_ready
获取的是云存储是否处于准备完成的状态,设备上线后才能拿到云存储订单。
0
。1
。0
。0
。在录像文件过期后,云存储录像会被删除。
举例说明:
设备于 2025.08.16 开通了为期一个月的 7 天事件云存储服务,那么于 2025.09.15 录制的视频,云存储删除时间为 2025.09.22,删除之前视频均可查看,不受 2025.09.16 服务到期的影响。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈