Skip to main content

产品服务架构

本页介绍 project/app/ 下各应用的职责、语言、构建选项、启动方式以及定制入口。这里是 Seeed 对原始 Rockchip SDK 做出最大增量的地方,也是产品定制最常发生的地方。

服务概览​

                        ┌──────────────────────────────┐
sensor ──► rockit ──►│ recamera_ipc (rkipc, C) │──► Internal RTSP 127.0.0.1:5554
▲ │ Main application for video, audio, recording, and AI inference │ │
│ └──────────────┬───────────────┘ ▼
rkaiq(ISP) │ protobuf ┌─────────┐
rockiva(NPU) │ Unix socket │ go2rtc │──► WebRTC :8555
librknnrt(NPU) ▼ └─────────┘ RTSP :554 (optional)
┌──────────────────────────────┐
│ recamera_notify (Python) │──► MQTT / HTTP / UART / WebSocket
└──────────────────────────────┘

┌────────────────────┐ ┌─────────────────────┐ ┌──────────────────────┐
│ recamera_web │ │ recamera_services │ │ recamera_onvif (C) │
│ React frontend + backend │ │ Rust: gmgr/skt2ws/ │ │ ONVIF device discovery and control │
│ nginx static assets │ │ tmir/rcisd │ └──────────────────────┘
└────────────────────┘ └─────────────────────┘
│
┌────────────────────┐ ┌───────▼─────────────┐
│ overlay system services │ │ recamera_utils │
│ ttyd/sshd/syslog/ │ │ Factory and test tools │
│ watchdog/board-id │ └─────────────────────┘
└────────────────────┘

应用索引与构建选项​

应用语言板级构建选项描述
recamera_ipcC (CMake + protobuf)RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2核心 产品级 IPC 应用
recamera_webReact/Node + C/C++RK_APP_RECAMERA_WEB=yWeb 配置界面(前端 + 后端)
recamera_servicesRustRK_APP_RECAMERA_SERVICES=y包含 gmgr、skt2ws、tmir 和 rcisd 的系统服务
recamera_notifyPythonRK_APP_RECAMERA_NOTIFY=yAI 推理通知(MQTT/HTTP/UART/WebSocket)
recamera_onvifCRK_APP_RECAMERA_ONVIF=yONVIF 协议实现
recamera_utilsShell / Python / C无显式构建选项工厂测试、序列号工具和压力测试
rkaiC++ (CMake)由 RK_APP_TYPE 控制RKAI 封装(LLM/VLM)和示例
rkllm-inferenceC++RK_APP_RKLLM_INFERENCE=yRKNN + RKLLM 多模态推理演示
rkipcCRockchip 参考实现recamera_ipc 的上游基线
wifi_appC + 第三方源码RK_ENABLE_WIFI=ywpa_supplicant / hostapd / bluez / GATT
cvrC—车载录像
aov_sampleC—常开低功耗视觉(AOV)示例
ao_record_demoCRK_APP_TYPE 包含 RK_AO_RECORD_DEMO音频录制演示
uvc_app_tinyC—UVC 摄像头模式
ipcweb前端和后端—原始 Rockchip Web 参考实现
testdemoC/C++—low_delay_net_display、yoloworld_demo
fastboot_clientCRK_ENABLE_FASTBOOTFastboot 客户端
nginx_mk——nginx 打包
component/混合—通用组件:ao_record_service、fastboot_server、lvgl、rkadk、rkfsmk

RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2 是一个复合标识符。某些应用(例如 ao_record_demo)使用 $(filter RK_XXX, $(RK_APP_TYPE)) 来决定是否参与构建。

recamera_ipc(核心应用)​

结构​

project/app/recamera_ipc/
├── CMakeLists.txt / Makefile / cmake/ / format.sh
├── LICENSE
├── docs/ # Rockchip_Developer_Guide_Linux_RKIPC_{CN,EN}.md (V1.7.6) + resources
├── protobufs/ # Message definitions for communication with notify and web
├── model/rknn/ # yolox_s.rknn(+json)、nanodet-plus-m_416.rknn(+json)
├── lib/
├── system/
└── src/rv1126b_ipc/
├── main.c
├── CMakeLists.txt
├── RkLunch.sh # ★ System-wide application startup entry point
├── RkLunch-stop.sh
├── rkipc-3840x2160.ini # ★ Default configuration (resolution/bitrate/RTSP/ONVIF options)
└── video/

common 模块(功能映射)​

project/app/recamera_ipc/common/ 中的代码按功能组织。使用下表查找相关目录:

模块职责
audio/audio.c 采集与编码;rkaudio_mp3.c MP3 提示音
isp/rkaiq 封装
venc/视频编码
rtsp/内部 RTSP 服务(127.0.0.1:5554)
rtmp/RTMP 推流
osd/时间戳/文字叠加
region_clip/、roi/区域裁剪和 ROI
rockiva/ROCKIVA 算法集成
rc_infer/、rc_model/自定义推理框架和模型管理
rc_notify/将推理结果发送到 recamera_notify
event/事件系统
storage/录像存储和 SD 卡管理
network/网络配置
socket_server/为 Web 后端和 notify 提供 Socket 服务
system/、sysutil/系统信息和工具函数
param/INI 参数读写
vendor_storage/厂商存储区(序列号、MAC 地址等)
vigil/、vigil_device_support/与 vigil 相关的代码(依赖 protobuf 和 libblkid)
player/播放器
lvgl/、ui/屏显 UI(LVGL)
uvc/UVC 模式
ivm/智能视频监控
gstreamer/与 GStreamer 相关的代码

启动与停止​

在设备上,生成的 init 脚本会调用以下命令:

# sh /oem/usr/bin/RkLunch.sh         # Start
# sh /oem/usr/bin/RkLunch-stop.sh # Stop

RkLunch.sh 会 source /etc/profile.d/RkEnv.sh,然后启动 rkipc 及相关进程。如果你希望在开机时启动自己的应用,请优先修改此脚本,而不是再添加一个新的 init 脚本。

配置​

设备上的运行时配置文件是 /userdata/config/rkipc.ini(位于可写分区),初始内容来自 rkipc-3840x2160.ini。go2rtc 启动脚本会读取其 [video.0.rtsp]、[video.0.onvif]、[video.1.rtsp] 小节,以决定是否开放 554 端口。

修改配置后,需要重启 rkipc,并且同时重启 go2rtc(其配置会在启动时生成到 /tmp/go2rtc/go2rtc.yaml):

# sh /oem/usr/bin/RkLunch-stop.sh && sh /oem/usr/bin/RkLunch.sh
# /oem/usr/etc/init.d/S50go2rtc restart

recamera_services(Rust 系统服务)​

以下信息来自 recamera_services/README.md:

组件作用配置
gmgrGPIO 管理器;提供用于 GPIO 控制和监控的 HTTP/WebSocket APIgmgr/config.json
skt2wsSocket → WebSocket 桥接器,用于转发 Unix socket 数据(被 rkipc-record-events 使用)skt2ws/config.json
tmirTTY Mirror;将串口复用到 socket/WebSocket(镜像 ttyS4)tmir/config.json
rcisdreCamera Intellisense 守护进程;负责事件排队和文件传输无外部配置

其他目录包括 inotify_passwd/(监视密码文件变更)、key_factory/(工厂按键)、led/(LED 控制)以及 scripts/init.d/。

构建​

cd project/app/recamera_services
make # Default target: armv7-unknown-linux-gnueabihf
make SERVICE_TARGET=aarch64-unknown-linux-gnu # Use 64-bit for reCamera Pro
make gmgr # Build one component
make clean && make help

需要安装 Rust 和 Docker(cross 使用 Docker 进行交叉编译)。gmgr/setup-libgpiod.sh 用于准备 libgpiod 依赖。

默认目标是 32 位 armv7。 reCamera Pro 使用 aarch64,因此需要显式传入 SERVICE_TARGET=aarch64-unknown-linux-gnu;否则生成的二进制将无法运行。使用 ./build.sh app 时 SDK 会设置正确的目标,但在手动调用 make 时很容易忽略这一点。

输出布局​

out/
├── etc/init.d/{S40gmgr,S40skt2ws,S40tmir,S49rcisd}
└── usr/
├── bin/{gmgr,skt2ws,tmir,rcisd}
└── share/{gmgr_config.json,skt2ws_config.json,tmir_config.json}

gmgr API​

监听 HTTP 端口 8080,并同时提供 Unix socket /dev/shm/gmgr.sock:

GET    /api/v1/gpios                     # Lists all pins and their full descriptions
GET /api/v1/gpios/events # WebSocket stream of events from all pins
GET /api/v1/gpio/{pin_id} # Full description of one pin
GET /api/v1/gpio/{pin_id}/info # Configuration information
GET/POST /api/v1/gpio/{pin_id}/settings # state / edge / debounce_ms
GET/POST /api/v1/gpio/{pin_id}/value # Reads or writes the pin level
GET /api/v1/gpio/{pin_id}/event # Most recent event
GET /api/v1/gpio/{pin_id}/events?limit=5

本地开发默认启用 mock-gpio 功能。对于硬件构建,请添加 --features hardware-gpio:

cargo build --release --features hardware-gpio
cargo test

recamera_notify(Python 通知服务)​

该服务从 rkipc 接收 protobuf 推理数据,并通过多种通道转发 AI 相机结果。

功能说明
Socket 服务器从 rkipc 接收推理数据
解析protobuf(protobufs/inference_pb2.py)
格式化基于模板的输出
通知通道MQTT、HTTP、UART、WebSocket
可靠性在 MQTT 断开连接后自动重连
配置JSON(notify_config_default.json)
状态MQTT/HTTP/UART 运行时状态会写入一个临时 JSON 文件

模块:core/(config_manager、inference_parser、template_formatter、socket_server、notifier_manager),notifiers/(base_notifier、mqtt_notifier、http_notifier、uart_notifier、websocket_server、notifier_factory),以及 tests/(包括 run_all_tests.py)。

构建与部署​

export RK_APP_RECAMERA_NOTIFY=y
make -C project/app/recamera_notify

设备上的安装路径:

项目路径
Python 包/usr/lib/python3.11/site-packages/recamera_notify/
启动脚本/usr/bin/notify_server.sh
系统服务/etc/init.d/S49notify
# /etc/init.d/S49notify start
# /etc/init.d/S49notify stop
# ps aux | grep notify_server

目标设备使用 Python 3.11。如果你在主机上使用其他版本进行开发,请检查语法和依赖兼容性。

recamera_onvif(C)​

实现标准 ONVIF 设备发现和控制。该目录包含 src/(dom.c、authenticate.c、cJSON.c 以及其他 SOAP/XML 处理代码)、socket_client/ 和 script/。还包括用于抓包调试的 RECV.log、SENT.log 和 TEST.log。

通过 RK_APP_RECAMERA_ONVIF=y 启用。当启用 ONVIF 时,go2rtc 也会启用外部 RTSP(优先级规则参见 设备访问与调试)。

recamera_web(前端与后端)​

project/app/recamera_web/
├── recamera_web_react/ # React frontend
│ ├── package.json / src / public / backend / nginx.conf / requirements.txt
└── recamera_web_backend/ # C/C++ backend (CMake + thirdparty + ipcweb-env-rv1126b)

前端特性(摘自其 README):

  • 国际化(英文和中文)、明暗主题、自适应布局
  • 设备信息: 型号、序列号、CPU/内存/存储监控、保存配置、重启和恢复出厂设置
  • 实时预览: 码流预览、播放/暂停、截图、录像,以及分辨率/帧率/码率/编码格式控制
  • 录像设置: 连续、定时、移动侦测触发或 AI 事件触发录像;存储路径、分段、循环覆盖,以及文件浏览、回放、下载和删除
  • AI 推理: 目标检测(YOLO 系列)、图像分割、关键点检测(姿态/人脸/手部)和图像分类(ResNet、EfficientNet)。每个任务都可以配置其模型、置信度阈值、批大小、推理设备(GPU/CPU/NPU)和可视化。
  • 终端: 通过命令行界面管理设备(集成 ttyd)

前端需要 Node.js 18 或更高版本。构建输出会根据 nginx.conf 部署(nginx 由 nginx_mk 提供)。视频预览使用 go2rtc 的 WebRTC,端口为 :8555。

recamera_utils(工厂与测试工具)​

目录项目
hw_test/bt_adv.sh(蓝牙广播测试)、imu_test.py(IMU 测试;对应内核选项 CONFIG_INV_ICM42670_I2C=y)
emc_test/AP6256_MFG.bin、wl 工具,以及 BT RF Test Commands for Linux-v09.pdf —— Wi-Fi/蓝牙射频认证测试
rf_range_test/bt_client.py、bt_server.py、wifi_ap.py、wifi_sta.py —— 射频距离测试
stress_test/cpu_stress.py、npu_stress.py、emmc_sd_stress.py、emc_test.py
sn_tool/SN_TOOL —— 写入序列号(与 upgrade_tool sn 配合使用)

使用这些工具作为工厂作业指导书的基础。每个目录都包含一个 README.md。

其他应用​

应用说明
rkaiRKAI 封装库(rkai_LLM、rkai_VLM)、示例(rkai_samples_llm.cpp、rkai_samples_vlm.cpp、rkai_samples_vlm_vision.cpp)以及文档 doc/Rockchip_Developer_Guide_Linux_RKAI_{CN,EN}.md;common/include/ 中包含 rknn_api.h、rknn_custom_op.h、cJSON.h、cnpy.h 和 easy_timer.h
rkllm-inference参见 AI 与 NPU 开发
wifi_app构建 wpa_supplicant(2.6,或用于 WPA3 的 2.10)、hostapd、libnl 3.9.0、openssl 3.2.1、bluez 5.77、rtk_hciattach 以及 GATT 服务端/客户端工具;配置位于 /userdata/rk96x/conf。RK_ENABLE_WIFI_CHIP 用于选择 RK960 或 RK962 前缀
aov_sampleAOV 低功耗示例:sample_aov_aiisp_iva_venc.c、sample_aoa_capture.c、sample_aov_audio.c、resume_suspend_test.sh
testdemo/yoloworld_demo端到端 YOLO-World 演示
component/ao_record_service(音频录制服务)、fastboot_server(快速启动)、lvgl(GUI)、rkadk(应用开发套件)、rkfsmk(文件系统)

启动顺序概览​

设备上 /etc/init.d/ 和 /oem/usr/etc/init.d/ 中的脚本会按数字顺序运行:

顺序脚本来源
S00board-idoverlay
S10log(WebSocket 日志)overlay
S15watchdogoverlay
S20hwclockoverlay
S20/S21linkmount / appinitbuild.sh 自动生成(挂载分区 / 调用 RkLunch.sh)
S40gmgr、skt2ws、tmirrecamera_services
S49rcisdrecamera_services
S49notifyrecamera_notify
S50sshd、ttyd、go2rtcoverlay
S70vsftpdoverlay
S99factorykey、inotify_passwd、ledrecamera_services

在添加服务时,请选择一个未使用的序号,并考虑依赖关系。例如,网络相关服务应在 S40 之后启动,而需要 /userdata 的服务应在 S20linkmount 之后启动。

源码仓库​

这是一个不包含 .git 元数据的源码快照。各 README 文件表明这些应用对应 Seeed 内部 GitLab 仓库:

应用仓库
recamera_onvifhttps://iteam-gitlab.seeed.cn/rockchip/linux-ipc-app-recamera2-onvif.git
recamera_utilshttps://iteam-gitlab.seeed.cn/rockchip/linux-ipc-app-recamera2-utils.git

命名模式为 rockchip/linux-ipc-app-recamera2-<module>。其他 recamera_* 应用很可能遵循相同约定(在完成下表前,请在内部 GitLab 中进行确认)。请在对应的仓库中进行上游修改,而不是在此 SDK 快照中,否则在下次同步时可能会丢失。

变更影响速查表​

如果你想修改…在此编辑需要重建
视频分辨率/码流/RTSP/ONVIF 选项recamera_ipc/src/rv1126b_ipc/rkipc-3840x2160.ini 或设备上的 /userdata/config/rkipc.iniapp + firmware(或直接编辑设备上的 INI)
Web UI 页面recamera_web/recamera_web_react/src/app + firmware
Web 后端 APIrecamera_web/recamera_web_backend/src/同上
GPIO 定义/APIrecamera_services/gmgr/config.json 和 src/同上
推理通知格式/通道recamera_notify/notify-server/、notify_config_default.json同上
AI 模型recamera_ipc/model/rknn/ 及对应的 .json 文件app + firmware
启动应用recamera_ipc/src/rv1126b_ipc/RkLunch.shapp + firmware
日志格式/输出overlay-buildroot-syslog-ng/etc/syslog-ng.confrootfs + firmware
串口/SSH/ttyd 策略overlay-buildroot-sshd、overlay-buildroot-ttydrootfs + firmware
音频通道映射overlay-buildroot-asound/etc/asound.confrootfs + firmware

技术支持与产品讨论​

感谢你选择我们的产品!我们将为你提供多种支持,确保你在使用我们产品的过程中尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...