【SDK】aov卡录问题求助

IPC/NVR/可视门铃等具备多媒体能力的设备,扫地机/AGV等机器人设备


XM.Quan
Posts: 79

Passat 2025年 Mar 4日 19:48

TuyaOS.zip

附件库,已增加响应函数指针的打印,可以与调用时的打印对比

Code: Select all

"cb NULL %p,%p"

打印的[2025/3/5 9:12:12 570] [01-01 00:00:01 ty E][f4a3][tuya_ipc_stream_storage.c:1246] cb NULL 0xbeb64fcc,(nil)
这个第二个nil是哪个地方没赋值吗?帮忙分析一下,串口日志已添加至附件

Attachments
com12_2025-03-05_9_12_05.log
(86.22 KiB) Downloaded 69 times
User avatar
Passat
Posts: 76

Re: 【SDK】aov卡录问题求助

1.第一个是入参的地址,第二个是 sd_status_changed_cb 的地址。
2.SDK 这边只能判断入参确实有问题。还是要再次检查入参。或者完全使用demo代码,验证基本功能。

XM.Quan
Posts: 79

Re: 【SDK】aov卡录问题求助

Passat 2025年 Mar 5日 11:52

1.第一个是入参的地址,第二个是 sd_status_changed_cb 的地址。
2.SDK 这边只能判断入参确实有问题。还是要再次检查入参。或者完全使用demo代码,验证基本功能。

完全使用demo代码会因为SD_STATUS_E tuya_ipc_sd_get_status(VOID)接口返回错误的状态而失败,修改SD_STATUS_E tuya_ipc_sd_get_status(VOID)接口的返回值后又会因为cb为空失败返回-2。
是否可以帮忙改下逻辑:如果为空的话就使用demo里面的指定接口。
我看demo里面的ty_sdk_sd_card.c文件内存在这个接口
INT_T tuya_ipc_sd_status_upload(INT_T status)
{
IPC_APP_report_sd_status_changed(status);
return 0;
}
我这边一开始传递的也是这个接口。

XM.Quan
Posts: 79

Re: 【SDK】aov卡录问题求助

XM.Quan 2025年 Mar 5日 13:58
Passat 2025年 Mar 5日 11:52

1.第一个是入参的地址,第二个是 sd_status_changed_cb 的地址。
2.SDK 这边只能判断入参确实有问题。还是要再次检查入参。或者完全使用demo代码,验证基本功能。

完全使用demo代码会因为SD_STATUS_E tuya_ipc_sd_get_status(VOID)接口返回错误的状态而失败,修改SD_STATUS_E tuya_ipc_sd_get_status(VOID)接口的返回值后又会因为cb为空失败返回-2。
是否可以帮忙改下逻辑:如果为空的话就使用demo里面的指定接口。
我看demo里面的ty_sdk_sd_card.c文件内存在这个接口
INT_T tuya_ipc_sd_status_upload(INT_T status)
{
IPC_APP_report_sd_status_changed(status);
return 0;
}
我这边一开始传递的也是这个接口。

这个回调的接口问题解决了。SS_BASE_PATH_LEN宏之前改成了64现在改回128就能识别到对应回调接口了。
然后现在使用demo的aov测试接口,推流推完了,然后调用tuya_ipc_ss_get_aov_storage_status接口获取状态一直是3(STORAGE_AOV_ONGOING)帮忙看下,是不是什么参数需要配置,好像看到了打印
[01-01 00:00:02 ty E][cf54][tuya_ipc_ss_encrypt.c:309] get ss encrypt key failed
这个的话第一次不上线不能录像吗?或者说哪里可以关闭录像加密功能?
串口日志已添加附件,帮忙分析一下。

Attachments
aov卡录问题日志.txt
(1.23 MiB) Downloaded 69 times
User avatar
Passat
Posts: 76

Re: 【SDK】aov卡录问题求助

  1. SDK 头文件不要修改任何东西,上层的代码不能出现和 SDK 头文件中一样的宏定义。
  2. tuya_ipc_ss_init 入参 encrypt_mode 为 FALSE,即可关闭加密,关闭后 get ss encrypt key failed 可以忽略。
  3. 日志显示 AOV 录像已保存至卡。但是帧的时间戳与当前时间并不一致。

    Code: Select all

    [01-01 00:00:22 ty E][ef54][tuya_ipc_ss_aov.c:327] get aov last frame:0,18446744073709183159,516
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:244] stop event time 1271309951
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:252] write buffer data size 552185 to file /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000/0216.media
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:266] rename event dir /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000 to /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0230
    
XM.Quan
Posts: 79

Re: 【SDK】aov卡录问题求助

Passat 2025年 Mar 5日 15:28
  1. SDK 头文件不要修改任何东西,上层的代码不能出现和 SDK 头文件中一样的宏定义。
  2. tuya_ipc_ss_init 入参 encrypt_mode 为 FALSE,即可关闭加密,关闭后 get ss encrypt key failed 可以忽略。
  3. 日志显示 AOV 录像已保存至卡。但是帧的时间戳与当前时间并不一致。

    Code: Select all

    [01-01 00:00:22 ty E][ef54][tuya_ipc_ss_aov.c:327] get aov last frame:0,18446744073709183159,516
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:244] stop event time 1271309951
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:252] write buffer data size 552185 to file /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000/0216.media
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:266] rename event dir /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000 to /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0230
    

1.这个了解了,以后会注意。
2.这个解决了,设false后确实不再打印了。
3.这个确实保存到卡里面了,但是程序里面无法得知是什么时候保存aov录像到SD卡中,tuya_ipc_ss_get_aov_storage_status这个接口一直会返回3。单独测试了一下,推完流后马上结束程序,无法保存录像到SD卡中。为了确保录像完整,程序需要在录像完全写入SD卡后才可以下电,现在无法得知录像何时完全写入SD卡,这个有什么办法吗?

XM.Quan
Posts: 79

Re: 【SDK】aov卡录问题求助

XM.Quan 2025年 Mar 5日 15:39
Passat 2025年 Mar 5日 15:28
  1. SDK 头文件不要修改任何东西,上层的代码不能出现和 SDK 头文件中一样的宏定义。
  2. tuya_ipc_ss_init 入参 encrypt_mode 为 FALSE,即可关闭加密,关闭后 get ss encrypt key failed 可以忽略。
  3. 日志显示 AOV 录像已保存至卡。但是帧的时间戳与当前时间并不一致。

    Code: Select all

    [01-01 00:00:22 ty E][ef54][tuya_ipc_ss_aov.c:327] get aov last frame:0,18446744073709183159,516
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:244] stop event time 1271309951
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:252] write buffer data size 552185 to file /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000/0216.media
    [01-01 00:00:23 ty D][ef54][tuya_ipc_ss_record.c:266] rename event dir /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0000 to /mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0230
    

1.这个了解了,以后会注意。
2.这个解决了,设false后确实不再打印了。
3.这个确实保存到卡里面了,但是程序里面无法得知是什么时候保存aov录像到SD卡中,tuya_ipc_ss_get_aov_storage_status这个接口一直会返回3。单独测试了一下,推完流后马上结束程序,无法保存录像到SD卡中。为了确保录像完整,程序需要在录像完全写入SD卡后才可以下电,现在无法得知录像何时完全写入SD卡,这个有什么办法吗?

3这个保存的状态貌似这个tuya_ipc_ss_get_aov_storage_status接口获取不到,我这边测试了一下,写指定的时间戳且使用指定的视频文件,这样保存的文件就是指定的,能确定最后生成的那个文件名字,我这边判断这个文件生成了就记录一下时间,发现从启动到这个文件存在至少需要20秒左右的时间。
(1)其中从启动到推流花了3秒左右,aov push frame start
(2)推流开始到推流结束大概花了2秒左右,aov push frame end
(3)后面15秒左右的时间基本都是用在写录像并等待写完的时间,
Host connect McuApp start
69.72 136.55
McuReadThread start
69.81 136.64
McuReadThread start
69.82 136.64
aov save last media
89.00 169.95
其中89.00是获取到最后一个文件(/mnt/mmc/DCIM/CHAN0/2010/04/15/1271309721_0230/0216.media)的时间,69.72是程序启动后创建跟mcu通信线程的时间。
(4)接口tuya_ipc_ss_get_aov_storage_status一直返回3(STORAGE_AOV_ONGOING),导致无法及时判断其写入完成。

相关日志已提交附件,帮忙分析一下这个接口为何获取不到对应状态,且保存录像时间为什么需要这么久。

Attachments
aov卡录问题日志1.txt
(143.6 KiB) Downloaded 70 times
User avatar
Passat
Posts: 76

Re: 【SDK】aov卡录问题求助

  1. 存储速度与当前 AOV ringbuf 里帧的数量有关系。在未取到最后一帧时,不会主动停止录像片段的写入。
  2. 目前AOV方案,建议在开始存储之前,将所有的 AOV 帧存入AOV ringbuf。然后再开始存储,直到取完最后一帧后,内部自动停止本次写入。这样可以将AOV片段快速写入卡。
  3. 停止AOV本地存储的另一种方式,可以主动调用 tuya_ipc_ss_stop_aov_local_storage 结束本次AOV存储。
  4. 目前版本中,tuya_ipc_ss_get_aov_storage_status 仅作为AOV本地存储状态的参考,后续版本会优化存储状态获取方式。
  5. 当前可以先用上述2中的方式,确认在AOV ringbuf中写完最后一帧,间隔一定时间后主动 tuya_ipc_ss_stop_aov_local_storage 结束本次存储。
XM.Quan
Posts: 79

Re: 【SDK】aov卡录问题求助

Passat 2025年 Mar 6日 11:02
  1. 存储速度与当前 AOV ringbuf 里帧的数量有关系。在未取到最后一帧时,不会主动停止录像片段的写入。
  2. 目前AOV方案,建议在开始存储之前,将所有的 AOV 帧存入AOV ringbuf。然后再开始存储,直到取完最后一帧后,内部自动停止本次写入。这样可以将AOV片段快速写入卡。
  3. 停止AOV本地存储的另一种方式,可以主动调用 tuya_ipc_ss_stop_aov_local_storage 结束本次AOV存储。
  4. 目前版本中,tuya_ipc_ss_get_aov_storage_status 仅作为AOV本地存储状态的参考,后续版本会优化存储状态获取方式。
  5. 当前可以先用上述2中的方式,确认在AOV ringbuf中写完最后一帧,间隔一定时间后主动 tuya_ipc_ss_stop_aov_local_storage 结束本次存储。

我这边按2的方法试了一下
1.先将aov帧全存入aov ringbuffer (append_data_with_timestamp)
2.然后开始存储 (call tuya_ipc_ss_start_aov_local_storage)
3.关闭aov ringbuffer,然后延时6秒
4.然后停止存储 ([01-01 00:00:09 ty E][a514][tuya_ipc_ss_aov.c:483] force stop aov storage)
5.然后下电。(XM_PowerOff)
下电后将SD卡拔出插到电脑上,未见SD卡录像文件。日志与相关调用已添加附件,帮忙分析下哪一步有错误吗?

Attachments
aov延时后直接停止卡录测试日志.txt
(62.79 KiB) Downloaded 71 times
5427E2AF-9651-4793-AD41-32465DCB7448.png
90555EA7-3BC5-422c-A163-3ADAF8560CCE.png
User avatar
Passat
Posts: 76

Re: 【SDK】aov卡录问题求助

data over size:347779 > 307200
data over size:329123 > 307200

  1. 部分帧长度超过传入的编码参数,ringbuf会写入帧失败
    append_data_with_timestamp:typ:0,18446744073709039150,3851,1
  2. 以上打印中帧的时间戳是异常值,按照正常时间戳的值写入。
  3. 按照之前说的方式2,在demo测试AOV本地存储后,可正常存储AOV码流。需要自行检查代码,排查此问题。
Post Reply