IPC开发 [TuyaOS SDK ] [X86_64_TuyaOS-3.10.6]

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


Post Reply
JiaYi
Posts: 5

当前环境是虚拟机Ubuntu20,使用桥接模式进行联网,SDK是通过IDE下载获取的,可以正常编译,相关配置文件的PID等信息也已经填写完毕。

执行命令:./output/x86_64_tuyaos_demo_ipc/firmware/tuyaos_demo_ipc -m 2 -c "/home/jiayi/Documents/tuya/Projects/X86_64_TuyaOS-3.10.6/software/TuyaOS/apps/tuyaos_demo_ipc" -t "AYWfDqJHfB2j1f"

问题现象:反复提示以下信息
WIFI Get Mode [] 2
[01-01 08:00:03 ty N][a9a7][tuya_wifi_status.c:167] cur stat:7 0x311d5800 -->>
[01-01 08:00:03 ty N][a9a7][tuya_wifi_status.c:169] wifi netstat changed to:7 -->>
[01-01 08:00:03 ty N][a9a7][tuya_wifi_status.c:173] report wifi netstat[7] to callback -->>
[01-01 08:00:03 ty D][a9a7][ty_sdk_status_callback.c:86] status chaged: group[4] status[40]
[01-01 08:00:03 ty I][a9a7][ty_sdk_status_callback.c:59] online: network status MQTT connected
[01-01 08:00:03 ty D][a9a7][smart_frame.c:2497] sync chan:1
[01-01 08:00:03 ty D][a9a7][tuya_ipc_moto_mqtt.c:69] book topic start
[01-01 08:00:03 ty D][a9a7][tuya_ipc_moto_mqtt.c:75] book topic done, ret:0
[01-01 08:00:03 ty D][a9a7][ty_sdk_status_callback.c:86] status chaged: group[4] status[40]
[01-01 08:00:03 ty I][a9a7][ty_sdk_status_callback.c:59] online: network status MQTT connected
[01-01 08:00:03 ty D][a9a7][tuya_ipc_sdk_info.c:354] ipc sdk info: mqstat change to :1
[01-01 08:00:04 ty D][a9a7][simplekv.c:1133] read key:em_sys_env isFuzzy:0 skipCnt:0
[01-01 08:00:04 ty D][a9a7][simplekv.c:1164] find key:4 em_sys_env
[01-01 08:00:04 ty D][a9a7][simplekv.c:1190] key:em_sys_env find value.Len:32
[01-01 08:00:04 ty D][a9a7][tuya_svc_online_log.c:160] load env success x86_64
[01-01 08:00:04 ty D][a9a7][tuya_svc_online_log.c:163] env x86_64 same. need not to update
ens33 no wireless extensions.

WIFI Get Mode [] 2
Interface: ens33
IP Address: 192.168.31.173
Netmask: 255.255.255.0
Gateway: 192.168.31.255
WIFI mode[0] Get IP:192.168.31.173
[01-01 08:00:04 ty D][a9c7][tuya_lan_sock.c:331] reg post queue 7
[01-01 08:00:04 ty D][a9c7][tuya_lan_sock.c:331] reg post queue 8
[01-01 08:00:04 ty D][a9c7][tuya_svc_lan.c:988] udp ip: 192.168.31.173
ens33 no wireless extensions.

WIFI Get Mode [] 2
Interface: ens33
IP Address: 192.168.31.173
Netmask: 255.255.255.0
Gateway: 192.168.31.255
WIFI mode[0] Get IP:192.168.31.173
ens33 no wireless extensions.

WIFI Get Mode [] 2
Interface: ens33
IP Address: 192.168.31.173
Netmask: 255.255.255.0
Gateway: 192.168.31.255
WIFI mode[0] Get IP:192.168.31.173
ens33 no wireless extensions.

WIFI Get Mode [] 2
[01-01 08:00:05 ty D][a987][tuya_devos_health.c:69] feed watchdog
[01-01 08:00:05 ty D][7fe7][tuya_lan_sock.c:127] reg lan sock 7,read:0x559e311ccbc0
ens33 no wireless extensions.

WIFI Get Mode [] 2
[01-01 08:00:05 ty D][a9a7][smart_frame.c:2412] Start To Sync Dev:6cee48fcbb7dabcd10t8jv, dp_rept_chan:1
[01-01 08:00:05 ty D][a9a7][smart_frame.c:2802] Pack local dp, reset_flow_ctl:1,dpnum:5.
[01-01 08:00:05 ty D][a9a7][smart_frame.c:2888] Nothing To Pack
[01-01 08:00:05 ty D][a9a7][smart_frame.c:2437] OUT IS NULL
[01-01 08:00:05 ty D][a9a7][smart_frame.c:2488] Sync Finish
[01-01 08:00:06 ty D][7fe7][tuya_lan_sock.c:127] reg lan sock 8,read:0x559e311ca9e0
ens33 no wireless extensions.

WIFI Get Mode [] 2
ens33 no wireless extensions.

另外,此情况是是在main函数中,开启某循环之后,会出现这个问题,想问一下这个SDK配网虚拟机必须使用无线网卡吗还是其他的问题?虚拟机在当前桥接模式下可正常联网。

另,看到其他帖子有使用IPC TuyaOS V:6.1.6,想问一下这个版本哪里获取?我当前的IDE所有的获取的版本都是3.10.5类似这样的,谢谢。


Tags:
User avatar
pippin-bobo
Posts: 249

Re: IPC开发 [TuyaOS SDK ] [X86_64_TuyaOS-3.10.6]

1.这个循环打印不要紧,是我们有TKL_wifi接口再高频的获取网络信息和状态信息
2.ubuntu不需要虚拟网卡,如果网络通过桥接是OK,那只需要tkl_wifi里面的获取ip和stat等接口适配好,特别注意wifi_status_event_cb状态的回调
3.V6.1.6版本是内部的一个转换后的版本叫法,您使用的3.10.6转换后是6.2.6版本,是更加新的版本,请放心使用

JiaYi
Posts: 5

Re: IPC开发 [TuyaOS SDK ] [X86_64_TuyaOS-3.10.6]

好的谢谢,另外,我当前是想用一个USB摄像头和该X86_64_TuyaOS-3.10.6 SDK,测试一下相关接口的实现和可能遇到的问题,该方法可行吗?
若可行,除了修改tuya_device_cfg.json文件内的设备信息,还需主要修改哪些接口文件?我当前已知的接口函数是从官方文档看到的。

文档链接:https://developer.tuya.com/cn/docs/iot- ... xts97i0w2n
接口头文件:以下为文档原内容

在 software/TuyaOS/include/ 文件下包含了所有开发所需的头文件,其中与 IPC 品类相关的为 components 目录下的如下组件:
组件 头文件
svc_api_ipc
tuya_ipc_api.h: 封装通用头文件,供外部模块统一使用
tuya_ipc_dp.h: DP 处理相关能力 API
tuya_ipc_event.h:事件启停处理相关 API
tuya_ipc_hardware_info.h:硬件能力信息上报 API
tuya_ipc_log.h:调试日志控制相关 API
tuya_ipc_notify.h:事件上报相关 API
tuya_ipc_sdk_info.h:SDK 常用信息获取 API
tuya_ipc_sdk_init.h:SDK 初始化相关 API
tuya_ipc_upgrade.h:升级业务相关 API
svc_ring_buffer tuya_ring_buffer.h:音视频数据缓存管理
svc_local_storage
tuya_ipc_stream_storage.h:本地存储头文件
tuya_ipc_album.h:本地相册头文件
svc_streaming_p2p tuya_ipc_p2p.h:P2P 业务头文件
svc_cloud_storage tuya_ipc_cloud_storage.h:视频云存储服务头文件

除了您刚刚说的tkl_wifi这个文件,想知道有哪些接口源文件需要实现,或者有没有相关的文档?

最后,以上过程在其他硬件平台是通用吗?如当前已经支持的芯片SDK,Ingenic或者REALTEK,比如当前SDK中,tkl_wifi里面的获取ip和stat等接口,在其他SDK接口实现步骤都是一样的吗?
感谢感谢。

User avatar
pippin-bobo
Posts: 249

Re: IPC开发 [TuyaOS SDK ] [X86_64_TuyaOS-3.10.6]

再其他平台都是通用的,你需要关注所有的TKL适配接口(有标准实现),在你们平台上是不是又差异,有差异部分需要适配修改

JiaYi
Posts: 5

Re: IPC开发 [TuyaOS SDK ] [X86_64_TuyaOS-3.10.6]

当前读取H264格式的文件,读取方式是循环读取,会持续返回视频帧。
修改的是SDK的ty_sdk_av.c源文件:

void * video_main(void *args)
{
printf("
video_main\r\n");
int naluSeiLen = 0;
TAL_VENC_FRAME_T frame = {0};

Code: Select all

static int pts_counter = 0;
const char* input_file = "/home/jiayi/Projects/CameraProjects/ReadH264Demo/output.h264";  // 输入的 H.264 文件
int frame_size = 300*1024;
unsigned char* frame_buffer = NULL;
frame_buffer = (UCHAR_T *)malloc(frame_size);

if (frame_buffer == NULL) {
    printf("Memory allocation failed!\n");
    exit(1);
}
frame.pbuf = (char *)frame_buffer;
frame.buf_size = frame_size;

int ret = 0;
while(1){

    if (0 == tal_venc_get_frame(0, 0, &frame)) {
        printf("frame.framtype %x\r\n",frame.frametype);

        if(readH264Frame(input_file, &frame_buffer, &frame_size) == 0){
            printf("readH264Frame success \r\n");
        }else{
            printf("readH264Frame error \r\n");
        }
        printf("frame.used_size + naluSeiLen frame.pts %d %d\r\n",frame.used_size + naluSeiLen , frame.pts);

        if (s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN] == NULL) {
            s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN] = tuya_ipc_ring_buffer_open(0, 0, E_IPC_STREAM_VIDEO_MAIN, E_RBUF_WRITE);
        }

        if (s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN]) {
            ret = tuya_ipc_ring_buffer_append_data(s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN], frame_buffer,
                                            frame.used_size + naluSeiLen, frame.frametype, frame.pts);
            if( ret != OPRT_OK){
                printf("tuya_ipc_ring_buffer_append_data error\r\n");
                exit(1);
            }

        } else {
            PR_ERR("tuya_ipc_ring_buffer_append_data failed,channle:%d\n", E_IPC_STREAM_VIDEO_MAIN);
            exit(1);
        }
    } else {
        printf("tal_venc_get_frame Error %d\r\n",tal_venc_get_frame(0, 0, &frame));
        exit(1);
        tal_system_sleep(10);
    }
    free(frame_buffer);
}
free(frame_buffer);
if (s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN] != NULL) {
    tuya_ipc_ring_buffer_close(s_ring_buffer_handles[E_IPC_STREAM_VIDEO_MAIN]);
}
return NULL;

}

这是对文件的改动,有两个问题:
1.对buffer和size的赋值操作,只在初始化实现还是每次获取视频帧,都赋值一次,之前我每获取视频帧赋值一次,会出现frame_buff size不足的提示。
2.如果只在初始化赋值,程序运行后,APP一直在解析视频流,可以看到
frame.used_size + naluSeiLen frame.pts 2578 1331421943这样的打印测试,但是十秒左右,会出现错误:[01-10 16:41:50 ty E][4d07][tuya_ipc_p2p.c:1091] tuya_ipc_rtp_pack_nal h264 error:-1,我想知道调用函数塞入视频流,还有哪些注意事项是Demo没有体现出来的吗?
感谢。

Post Reply