更新时间:2025-09-18 08:02:15下载pdf
创建读取 ringbuf 对象。
视频和音频需要分开创建。
RING_BUFFER_USER_HANDLE_T tuya_ipc_ring_buffer_open(INT_T device, INT_T channel, IPC_STREAM_E stream, RBUF_OPEN_TYPE_E open_type);
定位要读取的 I 帧位置。如需要预录功能,建议在创建读取对象后,调用此接口,锁定预录帧的起始位置。
OPERATE_RET tuya_ipc_ring_buffer_anchor_user(RING_BUFFER_USER_HANDLE_T handle, UINT_T frame_num, BOOL_T check_overlap);
如返回失败,则表示找不到入参条件下的帧,可继续等待至找到为止。
在定位到视频关键帧的位置后,需要同步音频帧位置。
OPERATE_RET tuya_ipc_ring_buffer_sync_stream(RING_BUFFER_USER_HANDLE_T handle_video, RING_BUFFER_USER_HANDLE_T handle_audio);
取帧。通过创建的音视频 ringbuf 对象,依次取帧。
RING_BUFFER_NODE_T* tuya_ipc_ring_buffer_get_av_frame(RING_BUFFER_USER_HANDLE_T v_handle, RING_BUFFER_USER_HANDLE_T a_handle, BOOL_T is_retry);
retry
表示是否重复取帧,异常情况下可使用此参数。
如果您需要开发视频文件加密功能,请参考本章节的介绍,如不需要可忽略。
加密方法有多种,您可自行了解相关细节并设计实现。
云端获取接口
加密密钥可以自行生成管理,也可以从云端获取。
建议尽量减少调用此接口的频次,否则会加重网络 I/O 负载。
OPERATE_RET httpc_iot_cloud_storage_encrypt_key_get(OUT ty_cJSON **result);
加密向量可自行生成、管理。可使用以下接口进行数据加密。
OPERATE_RET openssl_aes_cbc128_encrypt(IN CONST BYTE_T *pdata_in, IN CONST UINT_T data_len,
OUT BYTE_T *pdata_out, OUT UINT_T *pdata_out_len,
IN CONST BYTE_T *pkey, IN BYTE_T *piv);
设计加密方案时,应进行充分的考虑,必须确保所有数据在回放环节能够被正确解密。
对于加密的帧,使用以下接口解密数据:
OPERATE_RET openssl_aes_cbc128_decrypt(IN CONST BYTE_T *pdata_in, IN CONST UINT_T data_len,
OUT BYTE_T *pdata_out, OUT UINT_T *pdata_out_len,
IN CONST BYTE_T *pkey, IN BYTE_T *piv);
pkey
密钥需要和加密时的密钥相同。pdata_in
和 pdata_out
可以共用同一块内存。上述接口仅作为参考,您可以自行实现解密逻辑的代码,也可以使用其他开源工具。
获取帧数据以后,需要自行设计数据存储路径等细节,以便在回放时快速检索读取数据。
请参考以下内容实现非 SDK 存储方案下的回放功能:
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈