# 3516cv610_app **Repository Path**: w3ipc/3516cv610_app ## Basic Information - **Project Name**: 3516cv610_app - **Description**: demo for 3516cv610 - **Primary Language**: C/C++ - **License**: GPL-3.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 24 - **Created**: 2025-07-08 - **Last Updated**: 2025-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 3516cv610 演示程序 #### 介绍 海思3516cv610 10B/20S demo(基于020 sdk),可以在官方开发板上运行,演示如下功能: 1. H264/H265 + AAC/G711U rtsp服务 2. H264/AAC rtmp推流服务 3. OSD(时间)功能 4. 海思图像自适应 5. Mp4文件保存(需要os内存足够) 6. aidetect 7. yolov8(只支持20s上运行,且无法和aidetect同时运行) + svc编码 8. jpg抓拍 9. AIISP(功能演示,SC4336P为BGGR,强制转RGGB,会导致颜色异常) 10. LDC畸变校正 当前支持的sensor为: 1. SC4336P(官方开发板) 2. GC8613 3. GC4023 #### 流程图 ``` |vpss chn(1)--------->aidetect/yolov8(640x640)-------------------------------------->rtsp stream3 | | | |venc sub(固定720x480)-------------------------------->rtsp stream2 | | (和vi相同分辨率) (和venc main相同分辨率) | mipi/vi-------->vpss grp(0)-------->vpss chn(0)---------->venc main(分辨率大小由venc.json中指定,例如1920x1080)--------->rtsp stream1 | | | |-------->mp4保存 | | |------>jpg保存 ``` #### 编译方法 1. sdk unpack后需要参考Hi3516CV610R001C01SPC020\SMP_Linux_GCC_musl\02.only for reference\Hi3516CV610_AIComponent_readme.txt打上Aidetect补丁 ```` ./Hi3516CV610_AIComponent_patch.sh ss ```` 2. 按照Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/bsp/readme_cn.txt文档编译SDK ```` //step1:调用Hi3516CV610_SDK_V1.0.2.0/scripts/installed_package_check.sh检查编译环境 cd Hi3516CV610_SDK_V1.0.2.0/scripts/ chmod +x installed_package_check.sh ./installed_package_check.sh //step2:按照文档(Hi3516CV610╱Hi3516CV608 SDK 安装及升级使用说明.pdf 1.6章节),下载linux-5.10.221.tar.gz和mtd-utils-2.1.4.tar.bz2 到相应的open_source目录 //step3:20s编译SDK例子 cd Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/bsp make LIB_TYPE=musl CHIP=hi3516cv610 DEBUG=1 REGBIN_XLSM=Hi3516CV610-DMEB_4L_DDR3_2133M_128MB_16bit-A7_950M_QFN.xlsm all //step3:10b编译SDK例子 cd Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/bsp make LIB_TYPE=musl CHIP=hi3516cv610 DEBUG=1 REGBIN_XLSM=Hi3516CV610-DMEB_4L_DDR2_1333M_64MB_16bit-A7_950M_QFN.xlsm all ```` 3. 修改Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_buffer_detail.h 615,675行,修改如下: ```` //line 615 pme_share_en = (attr->share_buf_en && (attr->svc_version != OT_VENC_SVC_V2)) ? TD_TRUE : TD_FALSE; //line 675 pme_share_en = (attr->share_buf_en && (attr->svc_version != OT_VENC_SVC_V2)) ? TD_TRUE : TD_FALSE; ```` 4. 修改Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/out/include/ot_buffer.h 258行,修改如下: ``` //line 258 pme_share_en = ((attr->share_buf_en == TD_TRUE) && (attr->svc_version != OT_VENC_SVC_V2)) ? TD_TRUE : TD_FALSE; ``` 5. 编译app ``` cd Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source/mpp/sample git clone https://gitee.com/shumjj/3516cv610_app.git cd 3516cv610_app make ``` #### 运行 ``` //复制getee上rootfs/opt/ceanic到板端 cp rootfs/opt/ceanic /opt/ -Rdp //加载ko,10b请加载相应的脚本 cd /opt/ceanic/ko/load3516cv610/ ./load3516cv610_20s_debug -i //如果要运行yolov(20s上支持),需要将libsvp_aicpu.so放到环境变量 export LD_LIBRARY_PATH=/opt/ceanic/lib:$LD_LIBRARY_PATH cd /opt/ceanic/bin ./ceanic_app //CTRL+C退出 ``` #### 目录结构 ``` ├── app_std.h //app头文件 ├── device //海思设备相关 ├── doc //doc ├── json //json库 ├── log //log库 ├── main.cpp ├── Makefile ├── README.md ├── rootfs //SDK rootfs修改部分 ├── rtmp //rtmp 实现 ├── rtsp //rtsp 实现 ├── thirdlibrary //第三方库 └── util //通用头文件 ``` #### RTSP ##### RTSP URL url为: ``` //main stream rtsp://192.168.10.98/stream1 //sub stream rtsp://192.168.10.98/stream2 //yolov8 stream(需要配置文件中开启yolov8) //因为性能限制,如果使用vlc连接yolov8视频,需要开大vlc缓存(建议开到2000ms) rtsp://192.168.10.98/stream3 ``` ##### VLC连接RTSP vlc连接方法:媒体->打开网络串流->输入RTSP URL ![avatar](doc/rtsp_open.jpg) #### RTMP rtmp默认不开启,需要修改/opt/ceanic/etc/net_service.json文件 ##### RTMP测试服务器(nginx)搭建(ubuntu20.04) 1. 按照如下命令编译nginx,需要注意的是运行nginx, -C 后面的参数需要是全路径 ``` wget http://nginx.org/download/nginx-1.21.6.tar.gz wget https://github.com/arut/nginx-rtmp-module/archive/master.zip tar -xf nginx-1.21.6.tar.gz unzip master.zip cd nginx-1.21.6/ ./configure --prefix=`pwd`/mybuild --with-http_ssl_module --add-module=../nginx-rtmp-module-master make && make install cd mybuild/sbin sudo ./nginx -c /home/mjj/work/nginx-1.21.6/mybuild/sbin/nginx_rtmp.conf ``` 2. nginx_rtmp.conf见rtmp目录 3. 查看nginx rtmp服务是否开启 ``` ~/work/nginx-1.21.6/mybuild/sbin$ sudo netstat -na | grep 1935 tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN ``` 4. 查看rtmp 日志 错误日志如下 ``` mjj@mjj-VirtualBox:~/work/nginx-1.21.6/mybuild/sbin$ tail ../logs/error.log 024/01/09 15:59:54 [info] 16432#0: *100 disconnect, client: 192.168.10.200, server: 0.0.0.0:1935 2024/01/09 15:59:54 [info] 16432#0: *100 deleteStream, client: 192.168.10.200, server: 0.0.0.0:1935 2024/01/09 16:03:57 [info] 16432#0: *98 disconnect, client: 192.168.10.98, server: 0.0.0.0:1935 2024/01/09 16:03:57 [info] 16432#0: *98 deleteStream, client: 192.168.10.98, server: 0.0.0.0:1935 2024/01/09 16:03:57 [info] 16432#0: *97 disconnect, client: 192.168.10.98, server: 0.0.0.0:1935 2024/01/09 16:03:57 [info] 16432#0: *97 deleteStream, client: 192.168.10.98, server: 0.0.0.0:1935 ``` 连接日志如下 ``` tail ../logs/access.log 192.168.10.200 [09/Jan/2024:15:34:32 +0800] PLAY "live" "stream2" "" - 478 31874328 "" "LNX 9,0,124,2" (4m 8s) 192.168.10.98 [09/Jan/2024:15:49:24 +0800] PUBLISH "live" "stream2" "" - 151203194 409 "" "" (19m 27s) 192.168.10.98 [09/Jan/2024:15:49:24 +0800] PUBLISH "live" "stream1" "" - 603082173 409 "" "" (19m 27s) 192.168.10.200 [09/Jan/2024:15:53:48 +0800] PLAY "live" "stream1" "" - 1549 453211948 "" "LNX 9,0,124,2" (19m 8s) 192.168.10.98 [09/Jan/2024:15:58:50 +0800] PUBLISH "live" "stream2" "" - 4021860 409 "" "" (32s) 192.168.10.98 [09/Jan/2024:15:58:50 +0800] PUBLISH "live" "stream1" "" - 16027268 409 "" "" (32s) 192.168.10.200 [09/Jan/2024:15:59:41 +0800] PLAY "live" "stream1" "" - 411 11245160 "" "LNX 9,0,124,2" (26s) 192.168.10.200 [09/Jan/2024:15:59:54 +0800] PLAY "live" "stream2" "" - 378 1600363 "" "LNX 9,0,124,2" (13s) 192.168.10.98 [09/Jan/2024:16:03:57 +0800] PUBLISH "live" "stream2" "" - 37391403 409 "" "" (4m 50s) 192.168.10.98 [09/Jan/2024:16:03:57 +0800] PUBLISH "live" "stream1" "" - 149073600 409 "" "" (4m 50s) ``` 5. nginx 开启/关闭 ``` //开启命令 ~/work/nginx-1.21.6/mybuild/sbin$sudo ./nginx -c /home/mjj/work/nginx-1.21.6/mybuild/sbin/nginx_rtmp.conf //关闭命令 ~/work/nginx-1.21.6/mybuild/sbin$sudo ./nginx -s stop ``` ##### VLC连接nginx 1. 先根据[RTMP测试服务器搭建](#####RTMP测试服务器(nginx)搭建(ubuntu20.04))章节搭建好nginx 服务器 2. 根据[RTMP配置文件说明](#####RTMP配置文件说明)中说明获取到RTMP URL 3. 打开vlc->媒体->打开网络串流->输入RTMP URL ![avatar](doc/rtmp_open.jpg) #### 配置文件说明 [配置文件说明](doc/set.md) #### 调试记录 [调试记录](doc/debug_log.md) #### 合作交流 联系方式: 深圳思尼克技术有限公司 jiajun.ma@ceanic.com 马佳君