IPC/NVR/可视门铃等具备多媒体能力的设备,扫地机/AGV等机器人设备
XM.Quan
Posts: 79 Joined: 2024年 Jun 18日 11:07
2025年 Mar 7日 11:29
Passat 2025年 Mar 7日 10:44
data over size:347779 > 307200
data over size:329123 > 307200
部分帧长度超过传入的编码参数,ringbuf会写入帧失败
append_data_with_timestamp:typ:0,18446744073709039150,3851,1
以上打印中帧的时间戳是异常值,按照正常时间戳的值写入。
按照之前说的方式2,在demo测试AOV本地存储后,可正常存储AOV码流。需要自行检查代码,排查此问题。
1.这个帧长度哪里可以配置吗?我这边修改过aov_video_bitrate或者aov_video_width跟aov_video_height,最终都是限制的300KB。
2&3.我这边用的时间戳使用的是demo中的时间戳。
timestamp = tal_time_get_posix_ms() - 10 * 60 * 1000; // 测试用,AOV 的时间段要合普通录像的时间段分开;产品中需要和实际录像时间一致。
我这边目前是测试这个功能,目前不想关心时间戳的话,需要如何配置这个时间戳。
3.目前我这边有2种测试方式,初始化步骤是一样的,tuya_ipc_ss_init->tuya_ipc_aov_cloud_storage_init->tuya_ipc_aov_buffer_init->tuya_ipc_aov_cloud_storage_start->tuya_ipc_aov_buffer_open
后面的接口调用顺序有2种
(1)tuya_ipc_aov_buffer_append_data_with_timestamp->tuya_ipc_ss_start_aov_local_storage然后延时6秒调用tuya_ipc_aov_buffer_close->tuya_ipc_ss_stop_aov_local_storage然后断电。
(2)tuya_ipc_ss_start_aov_local_storage->tuya_ipc_aov_buffer_append_data_with_timestamp然后调用tuya_ipc_ss_get_aov_storage_status获取状态,需要15秒左右tuya_ipc_ss_get_aov_storage_status接口会返回1(STORAGE_AOV_STOP)然后此时调用tuya_ipc_aov_buffer_close->tuya_ipc_ss_stop_aov_local_storage然后断电。
按(1)的调用顺序来的话SD卡录像文件不存在,如果加长延时到15秒的话,SD卡录像文件完整(不过由于部分帧长度超过导致录像有异常,需要帮忙分析下怎么改这个限制帧长)
按(2)的调用顺序来的话SD卡录像文件完整(不过由于部分帧长度超过导致录像有异常,需要帮忙分析下怎么改这个限制帧长)
综上所述,现在aov卡录的主要问题:
1.帧长限制如何修改
2.2M多的录像文件(总共44帧)录像需要15秒才能完全写入SD卡,这个时间是否属于正常范围?是否跟时间戳异常有关系?是否有办法可以加速?
按照先tuya_ipc_aov_buffer_append_data_with_timestamp后tuya_ipc_ss_start_aov_local_storage的办法也需要延时15秒左右才可以完全保存
按照先tuya_ipc_ss_start_aov_local_storage后tuya_ipc_aov_buffer_append_data_with_timestamp的办法也需要延时15秒左右才可以完全保存
是否是我这边调用顺序有问题,帮忙分析一下。
3.是否可以边推流边录像,以减小申请的aovbuffer,节省一些设备内存?
Passat
Posts: 76 Joined: 2022年 Sep 16日 18:18
2025年 Mar 7日 16:14
AOV ringbuf 最大帧长限制默认 300K,另外可通过API设置。 tuya_ipc_aov_buffer_init 初始化后可使用 OPERATE_RET tuya_ipc_aov_buffer_set_max_frame_size(INT_T device, INT_T channel, IPC_STREAM_E stream, UINT_T max_frame_size)
设置最大帧长度。
44 帧一次写入AOV ringbuf后,再开启AOV本地存储,理论上会很快写入TF卡。15s写完显然不合理,需要检查是否逻辑存在问题。
推荐的执行顺序:
tuya_ipc_aov_buffer_init > tuya_ipc_aov_buffer_append_data_with_timestamp > 写入最后一帧并打标 > tuya_ipc_aov_buffer_close > tuya_ipc_ss_start_aov_local_storage
是否可以边推流边录像 ? 目前AOV文件写入前,长度固定,且写入的场景是快速写入后休眠,大多数场景下与其他业务场景不会并存。后续版本会优化状态获取,但是仍不推荐边写入ringbuf边写入卡。
XM.Quan
Posts: 79 Joined: 2024年 Jun 18日 11:07
2025年 Mar 7日 17:07
Passat 2025年 Mar 7日 16:14
AOV ringbuf 最大帧长限制默认 300K,另外可通过API设置。 tuya_ipc_aov_buffer_init 初始化后可使用 OPERATE_RET tuya_ipc_aov_buffer_set_max_frame_size(INT_T device, INT_T channel, IPC_STREAM_E stream, UINT_T max_frame_size)
设置最大帧长度。
44 帧一次写入AOV ringbuf后,再开启AOV本地存储,理论上会很快写入TF卡。15s写完显然不合理,需要检查是否逻辑存在问题。
推荐的执行顺序:
tuya_ipc_aov_buffer_init > tuya_ipc_aov_buffer_append_data_with_timestamp > 写入最后一帧并打标 > tuya_ipc_aov_buffer_close > tuya_ipc_ss_start_aov_local_storage
是否可以边推流边录像 ? 目前AOV文件写入前,长度固定,且写入的场景是快速写入后休眠,大多数场景下与其他业务场景不会并存。后续版本会优化状态获取,但是仍不推荐边写入ringbuf边写入卡。
好的,感谢!
1.帧长问题通过接口设置后确实解决了。
2.这个确实,我这边串口一直检测对应目录的生成,发现录像文件这个目录会在 时出现,我这边是延时了15秒断电,之前由于存在300KB帧长限制前面有部分帧虽然花屏但是保存下来了,这次我修改到了400KB,15秒未保存完全,但是原本帧长超出限制的帧保存下来是正常的。
我列举一下我这边的时间轴:
(1)程序启动后2秒打印aov push frame start开始推流到aovringbuffer
(2)程序启动后约3秒多打印aov push frame end 表示已经将所有aov帧推到aovringbuffer中了
(3)在(2)之后打印call tuya_ipc_ss_start_aov_local_storage,说明已经调用tuya_ipc_ss_start_aov_local_storage接口启动了aov卡录像功能,然后会关闭aovringbuffer(调用tuya_ipc_aov_buffer_close),延时15秒查看情况。
(4)在程序运行期间,手动串口执行ls /mnt/mmc/DCIM/CHAN0/ -l指令,查看是否生成卡录文件夹。按照时间戳的话基本保存下来的目录是1970或者2010.
(5)通过(4)这个步骤,我在程序启动后约17秒可以查询到本地存在了对应录像目录。然后我这边注意了一下涂鸦这边的打印。发现在程序启动后16秒左右有创建录像目录的打印,[01-01 00:00:16 ty D][f5c4][uni_fs.c:35] mkdir_all:/mnt/mmc/DCIM/CHAN0/2010/04/15/1271310301_0000
(6)根据上述5个步骤可以推测,这边从推流结束开始录像到实际产生录像这段中间有差不多13秒左右的闲置期。且根据打印
[01-01 00:00:16 ty E][22f4][tuya_ipc_aov_buffer.c:340] anchor user retry 15
可能存在部分流程有出错在重试,导致期间的耗时。需要帮忙分析一下。
另外一个问题是在(3)的延时15秒之前关闭aov卡录像功能(调用tuya_ipc_ss_stop_aov_local_storage),然后延时15秒实际不会如上述情况一致生成卡录像。可能是这个停止就真的阻止了录像文件生成。
相关文件已添加至附件,帮忙分析一下,如何解决13秒闲置期的问题加快上电卡录下电流程。
Attachments
立刻停止卡录相关文件.zip
(106.34 KiB) Downloaded 76 times
延时15秒停止卡录相关文件.zip
(5.56 MiB) Downloaded 77 times
Passat
Posts: 76 Joined: 2022年 Sep 16日 18:18
2025年 Mar 10日 15:29
写入 aov ringbuf的帧时间戳异常问题依旧存在,此问题会导致ringbuf 内部纠错机制异常。时间戳获取可自行实现,或者使用tal_time_get_posix_ms 获取,前提是SDK已获取到正确的时间。
AOV 内部会根据常规 ringbuf 的帧数据时间做参考计算。日志中有大量 No video data inside ring buffer. GET starts before PUT? ch0st0tr0,说明没有帧写入常规的ringbuf,直到超时15s后,再开始获取AOV数据写入卡。
XM.Quan
Posts: 79 Joined: 2024年 Jun 18日 11:07
2025年 Mar 10日 20:01
Passat 2025年 Mar 10日 15:29
time.png
写入 aov ringbuf的帧时间戳异常问题依旧存在,此问题会导致ringbuf 内部纠错机制异常。时间戳获取可自行实现,或者使用tal_time_get_posix_ms 获取,前提是SDK已获取到正确的时间。
AOV 内部会根据常规 ringbuf 的帧数据时间做参考计算。日志中有大量 No video data inside ring buffer. GET starts before PUT? ch0st0tr0,说明没有帧写入常规的ringbuf,直到超时15s后,再开始获取AOV数据写入卡。
2.如果只需要aov录像的话,是否可以只推aovringbuffer数据?还是需要将aov录像不仅推到aovringbuffer还需要推到常规ringbuffer中?
我这边测下来修复时间戳以后推到双buffer中录像可以很快结束。具体日志见附件。
另外还有之前提到的那个边推流边录像的事情,因为aov逻辑这块,如果aov录像越大,那么其在aov模式下的时间会相对而言越长,这样变相可以降低平均功耗,但是目前固定分配aovringbuffer的话,会导致sdk录像时需要占用过大的内存,可能造成设备内存不足,这块帮忙看下有没有办法可以申请小一些的内存边推流边录像?
Attachments
推到双buff中.txt
(53.89 KiB) Downloaded 73 times
Passat
Posts: 76 Joined: 2022年 Sep 16日 18:18
2025年 Mar 11日 10:16
目前 SDK内部如单独存放AOV 录像,仍需要参照正常码流的ringbuf中帧信息,否则会进入超时判断。
以上机制和 AOV 产品定义和属性有关。AOV录像工作逻辑是,在低功耗模式下,隔固定时间编码一帧,保存在固定位置中,等唤醒条件达到时,将AOV录像一次写入TF卡。但唤醒时,编码恢复正常参数,此时仍需要保存唤醒时的常规录像。这样才能满足全时录像的目标。所以保存AOV录像时肯定会存在常规录像。
AOV录像大小和时长与编码参数有关,AOV录像基本都是静态场景下的,此时也并不需要高规格的图像。按照以往对接过的产品看,正常情况下20min+ 的AOV录像并不大,都在5M以内,都可满足内存大小要求。
XM.Quan
Posts: 79 Joined: 2024年 Jun 18日 11:07
2025年 Mar 13日 10:33
Passat 2025年 Mar 11日 10:16
目前 SDK内部如单独存放AOV 录像,仍需要参照正常码流的ringbuf中帧信息,否则会进入超时判断。
以上机制和 AOV 产品定义和属性有关。AOV录像工作逻辑是,在低功耗模式下,隔固定时间编码一帧,保存在固定位置中,等唤醒条件达到时,将AOV录像一次写入TF卡。但唤醒时,编码恢复正常参数,此时仍需要保存唤醒时的常规录像。这样才能满足全时录像的目标。所以保存AOV录像时肯定会存在常规录像。
AOV录像大小和时长与编码参数有关,AOV录像基本都是静态场景下的,此时也并不需要高规格的图像。按照以往对接过的产品看,正常情况下20min+ 的AOV录像并不大,都在5M以内,都可满足内存大小要求。
1.这块的话如果不需要常规录像是否可以不向常规ringbuffer推数据,或者说是否可以构造一个虚拟帧(无视频帧数据只存放时间戳的帧)推到常规ringbuffer中就可以解决?
2.我们这边aov模式下的逻辑是录满flash后写完SD卡继续回到aov模式,期间aov录像不会断,不需要关注常规录像。
3.是否支持内存复用?我们本地按照对应格式将aov帧数据存放在内存指定地方,然后在aov初始化时传入aov帧起始地址与总长度,就可以节省调用tuya_ipc_aov_buffer_append_data_with_timestamp推流的时间外加节省aov初始化tuya_ipc_aov_buffer_init时申请的内存了。
4.目前还遇到一个问题,向常规ringbuffer和aovringbuffer都推数据后,aov录像结束了,但是tuya_ipc_ss_get_aov_storage_status接口获取到的值一直是3,持续8分多钟后我把程序结束掉了。
从aov push frame end开始是上电1分47秒,到最后一帧录完是1分51秒[01-01 08:01:51 ty D][6364][uni_fs.c:35] mkdir_all:/mnt/mmc/DCIM/CHAN0/2025/01/01/1735737579_0000
后面每100ms调用1次tuya_ipc_ss_get_aov_storage_status,均返回3(STORAGE_AOV_ONGOING)
这些问题帮忙看下。4相关日志已添加至附件。
Attachments
相关文件.zip
(8.74 MiB) Downloaded 48 times
Passat
Posts: 76 Joined: 2022年 Sep 16日 18:18
2025年 Mar 13日 15:27
1.写入虚拟帧,理论上可以,但是实际是否会有其他问题,需要全面测试
2.是否支持内存复用? 目前不支持
3.附件的测试版本,增加了tuya_ipc_ss_get_aov_storage_status 返回状态。另此版本仅供测试用,正式版才可用于发布产品。
Attachments
TuyaOS_此版本不可用于产品发布.zip
(4.76 MiB) Downloaded 43 times
XM.Quan
Posts: 79 Joined: 2024年 Jun 18日 11:07
2025年 Mar 14日 10:43
Passat 2025年 Mar 13日 15:27
1.写入虚拟帧,理论上可以,但是实际是否会有其他问题,需要全面测试
2.是否支持内存复用? 目前不支持
3.附件的测试版本,增加了tuya_ipc_ss_get_aov_storage_status 返回状态。另此版本仅供测试用,正式版才可用于发布产品。
使用测试版本的库后,tuya_ipc_ss_get_aov_storage_status的状态返回存在先返回5然后返回一阵子3然后再返回5的情况。帮忙分析下是否正常。
另外我这边观察了一下写录像的速度,大概4M左右的录像文件完全写入需要4秒左右,这个时间正常吗?是否可以再加快一些?
[01-01 08:01:18 ty D][6474][uni_fs.c:35] mkdir_all:/mnt/mmc/DCIM/CHAN0/1970/01/07/523146_0000
[01-01 08:01:22 ty D][6474][tuya_ipc_ss_record.c:266] rename event dir /mnt/mmc/DCIM/CHAN0/1970/01/07/527970_0000 to /mnt/mmc/DCIM/CHAN0/1970/01/07/527970_0197
Attachments
替换测试版SDK后存在返回值变化的相关日志.txt
(973.95 KiB) Downloaded 41 times
Passat
Posts: 76 Joined: 2022年 Sep 16日 18:18
2025年 Mar 14日 11:15
tuya_ipc_ss_get_aov_storage_status返回值正常的
2.日志显示存储线程运行正常,关闭DEBUG 日志后,整体运行速度可能会快一些