Saltar al contenido principal

Arquitectura del servicio de producto

Esta página describe las responsabilidades, lenguajes, opciones de compilación, métodos de inicio y puntos de entrada de personalización para las aplicaciones bajo project/app/. Aquí es donde Seeed ha realizado las mayores adiciones al SDK original de Rockchip y donde con mayor frecuencia se lleva a cabo la personalización del producto.

Descripción general de los servicios​

                        ┌──────────────────────────────┐
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 │ └─────────────────────┘
└────────────────────┘

Índice de aplicaciones y opciones de compilación​

AplicaciónLenguajeOpción de compilación de la placaDescripción
recamera_ipcC (CMake + protobuf)RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2Aplicación IPC de nivel de producto principal
recamera_webReact/Node + C/C++RK_APP_RECAMERA_WEB=yInterfaz de configuración web (frontend + backend)
recamera_servicesRustRK_APP_RECAMERA_SERVICES=yServicios del sistema que incluyen gmgr, skt2ws, tmir y rcisd
recamera_notifyPythonRK_APP_RECAMERA_NOTIFY=yNotificaciones de inferencia de IA (MQTT/HTTP/UART/WebSocket)
recamera_onvifCRK_APP_RECAMERA_ONVIF=yImplementación del protocolo ONVIF
recamera_utilsShell / Python / CSin opción de compilación explícitaPruebas de fábrica, herramientas de número de serie y pruebas de estrés
rkaiC++ (CMake)Controlado por RK_APP_TYPEWrappers de RKAI (LLM/VLM) y ejemplos
rkllm-inferenceC++RK_APP_RKLLM_INFERENCE=yDemo de inferencia multimodal RKNN + RKLLM
rkipcCImplementación de referencia de RockchipLínea base upstream para recamera_ipc
wifi_appC + código de tercerosRK_ENABLE_WIFI=ywpa_supplicant / hostapd / bluez / GATT
cvrC—Grabación en vehículo
aov_sampleC—Ejemplo de visión siempre activa y de bajo consumo (AOV)
ao_record_demoCRK_APP_TYPE incluye RK_AO_RECORD_DEMODemo de grabación de audio
uvc_app_tinyC—Modo cámara UVC
ipcwebFrontend y backend—Implementación web de referencia original de Rockchip
testdemoC/C++—low_delay_net_display、yoloworld_demo
fastboot_clientCRK_ENABLE_FASTBOOTCliente Fastboot
nginx_mk——Empaquetado de nginx
component/Mixto—Componentes comunes:ao_record_service、fastboot_server、lvgl、rkadk、rkfsmk

RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2 es un identificador compuesto. Algunas aplicaciones (como ao_record_demo) usan $(filter RK_XXX, $(RK_APP_TYPE)) para determinar si se compilan.

recamera_ipc (Aplicación principal)​

Estructura​

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/

Módulos common (mapa de funcionalidades)​

El código de project/app/recamera_ipc/common/ está organizado por funcionalidades. Usa esta tabla para encontrar el directorio correspondiente:

MóduloResponsabilidad
audio/audio.c captura y codificación;rkaudio_mp3.c audio de aviso MP3
isp/Wrapper de rkaiq
venc/Codificación de vídeo
rtsp/Servicio RTSP interno (127.0.0.1:5554)
rtmp/Streaming RTMP
osd/Superposición de marca de tiempo/texto
region_clip/、roi/Recorte de región y ROI
rockiva/Integración del algoritmo ROCKIVA
rc_infer/、rc_model/Framework de inferencia personalizado y gestión de modelos
rc_notify/Envía resultados de inferencia a recamera_notify
event/Sistema de eventos
storage/Almacenamiento de grabaciones y gestión de tarjeta SD
network/Configuración de red
socket_server/Servicio de socket para el backend web y notify
system/、sysutil/Información del sistema y funciones utilitarias
param/Lectura/escritura de parámetros INI
vendor_storage/Área de almacenamiento del proveedor (número de serie, dirección MAC y más)
vigil/、vigil_device_support/Código relacionado con vigil (depende de protobuf y libblkid)
player/Reproductor
lvgl/、ui/Interfaz en pantalla (LVGL)
uvc/Modo UVC
ivm/Monitorización de vídeo inteligente
gstreamer/Código relacionado con GStreamer

Inicio y parada​

En el dispositivo, los scripts init generados llaman a estos comandos:

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

RkLunch.sh hace source de /etc/profile.d/RkEnv.sh y luego inicia rkipc y los procesos relacionados. Para iniciar tu propia aplicación al arrancar, modifica primero este script en lugar de añadir otro script init.

Configuración​

La configuración en tiempo de ejecución en el dispositivo es /userdata/config/rkipc.ini (en una partición escribible), inicialmente rellenada a partir de rkipc-3840x2160.ini. El script de inicio de go2rtc lee sus secciones [video.0.rtsp]、[video.0.onvif]、[video.1.rtsp] para determinar si expone el puerto 554.

Después de cambiar la configuración, reinicia rkipc y reinicia también go2rtc (su configuración se genera al inicio en /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 (servicios del sistema en Rust)​

La siguiente información proviene de recamera_services/README.md:

ComponentePropósitoConfiguración
gmgrGPIO Manager; proporciona una API HTTP/WebSocket para control y monitorización de GPIOgmgr/config.json
skt2wsPuente Socket → WebSocket que reenvía datos de socket Unix (usado por rkipc-record-events)skt2ws/config.json
tmirTTY Mirror; multiplexa un puerto serie a un socket/WebSocket (refleja ttyS4)tmir/config.json
rcisdreCamera Intellisense daemon; pone en cola eventos y transfiere archivosSin configuración externa

Otros directorios incluyen inotify_passwd/ (vigila cambios en el archivo de contraseña), key_factory/ (botón de fábrica), led/ (control de LED) y scripts/init.d/.

Compilación​

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

Se requieren Rust y Docker (cross usa Docker para la compilación cruzada). gmgr/setup-libgpiod.sh prepara la dependencia libgpiod.

El objetivo predeterminado es armv7 de 32 bits. reCamera Pro usa aarch64, así que pasa SERVICE_TARGET=aarch64-unknown-linux-gnu explícitamente; de lo contrario, los binarios no se ejecutarán. El SDK establece el objetivo correcto cuando usas ./build.sh app, pero es fácil pasarlo por alto al invocar make manualmente.

Distribución de la salida​

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

API de gmgr​

Escucha en el puerto HTTP 8080 y también proporciona el socket Unix /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

El desarrollo local habilita la función mock-gpio de forma predeterminada. Para una compilación para hardware, añade --features hardware-gpio:

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

recamera_notify (Servicio de notificaciones en Python)​

Este servicio recibe datos de inferencia protobuf de rkipc y reenvía los resultados de la cámara con IA a través de múltiples canales.

FunciónDescripción
Servidor de socketsRecibe datos de inferencia de rkipc
Análisisprotobuf (protobufs/inference_pb2.py)
FormateoSalida basada en plantillas
Canales de notificaciónMQTT、HTTP、UART、WebSocket
FiabilidadSe reconecta automáticamente tras una desconexión MQTT
ConfiguraciónJSON (notify_config_default.json)
EstadoEl estado en tiempo de ejecución de MQTT/HTTP/UART se escribe en un archivo JSON temporal

Módulos: core/ (config_manager, inference_parser, template_formatter, socket_server, notifier_manager), notifiers/ (base_notifier, mqtt_notifier, http_notifier, uart_notifier, websocket_server, notifier_factory), y tests/ (incluido run_all_tests.py).

Compilar y desplegar​

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

Rutas de instalación en el dispositivo:

ElementoRuta
Paquete de Python/usr/lib/python3.11/site-packages/recamera_notify/
Script de inicio/usr/bin/notify_server.sh
Servicio del sistema/etc/init.d/S49notify
# /etc/init.d/S49notify start
# /etc/init.d/S49notify stop
# ps aux | grep notify_server

El dispositivo de destino usa Python 3.11. Comprueba la compatibilidad de sintaxis y dependencias si desarrollas en el host con otra versión.

recamera_onvif (C)​

Implementa el descubrimiento y control estándar de dispositivos ONVIF. El directorio contiene src/ (dom.c, authenticate.c, cJSON.c y otro código de manejo SOAP/XML), socket_client/ y script/. También incluye RECV.log, SENT.log y TEST.log para depuración mediante captura de paquetes.

Se habilita con RK_APP_RECAMERA_ONVIF=y. Cuando ONVIF está habilitado, go2rtc también habilita RTSP externo (consulta Acceso y depuración del dispositivo para conocer las reglas de precedencia).

recamera_web (Frontend y Backend)​

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)

Funciones del frontend (de su README):

  • Internacionalización (inglés y chino), temas claro/oscuro y diseño adaptable
  • Información del dispositivo: modelo, número de serie, monitorización de CPU/memoria/almacenamiento, guardar configuración, reinicio y restablecimiento de fábrica
  • Vista en vivo: vista previa del flujo, reproducir/pausar, capturas, grabación y controles de resolución/tasa de fotogramas/tasa de bits/códec
  • Ajustes de grabación: grabación continua, programada, activada por movimiento o activada por eventos de IA; ruta de almacenamiento, segmentos, sobrescritura en bucle y exploración de archivos, reproducción, descarga y eliminación
  • Inferencia de IA: detección de objetos (serie YOLO), segmentación de imágenes, detección de puntos clave (pose/rostro/mano) y clasificación de imágenes (ResNet, EfficientNet). Cada tarea puede configurar su modelo, umbral de confianza, tamaño de lote, dispositivo de inferencia (GPU/CPU/NPU) y visualización.
  • Terminal: gestiona el dispositivo mediante una interfaz de línea de comandos (integrada con ttyd)

El frontend requiere Node.js 18 o posterior. La salida de la compilación se despliega según nginx.conf (nginx es proporcionado por nginx_mk). La vista previa de vídeo usa go2rtc WebRTC en el puerto :8555.

recamera_utils (Utilidades de fábrica y prueba)​

DirectorioElemento
hw_test/bt_adv.sh (prueba de publicidad Bluetooth), imu_test.py (prueba de IMU; corresponde a la opción de kernel CONFIG_INV_ICM42670_I2C=y)
emc_test/AP6256_MFG.bin, la utilidad wl y BT RF Test Commands for Linux-v09.pdf — pruebas de certificación RF de Wi‑Fi/Bluetooth
rf_range_test/bt_client.py、bt_server.py、wifi_ap.py、wifi_sta.py —— pruebas de alcance RF
stress_test/cpu_stress.py、npu_stress.py、emmc_sd_stress.py、emc_test.py
sn_tool/SN_TOOL — escribe el número de serie (se usa con upgrade_tool sn)

Utiliza estas herramientas como base para las instrucciones de trabajo de fábrica. Cada directorio contiene un README.md.

Otras aplicaciones​

AplicaciónDescripción
rkaiBiblioteca contenedora RKAI (rkai_LLM, rkai_VLM), ejemplos (rkai_samples_llm.cpp, rkai_samples_vlm.cpp, rkai_samples_vlm_vision.cpp) y documentación doc/Rockchip_Developer_Guide_Linux_RKAI_{CN,EN}.md; common/include/ contiene rknn_api.h, rknn_custom_op.h, cJSON.h, cnpy.h y easy_timer.h
rkllm-inferenceConsulta Desarrollo de IA y NPU
wifi_appCompila wpa_supplicant (2.6, o 2.10 para WPA3), hostapd, libnl 3.9.0, openssl 3.2.1, bluez 5.77, rtk_hciattach y herramientas de servidor/cliente GATT; la configuración está en /userdata/rk96x/conf. RK_ENABLE_WIFI_CHIP selecciona el prefijo RK960 o RK962
aov_sampleEjemplos de bajo consumo AOV: sample_aov_aiisp_iva_venc.c、sample_aoa_capture.c、sample_aov_audio.c、resume_suspend_test.sh
testdemo/yoloworld_demoDemo YOLO‑World de extremo a extremo
component/ao_record_service (servicio de grabación de audio), fastboot_server (arranque rápido), lvgl (GUI), rkadk (kit de desarrollo de aplicaciones), rkfsmk (sistema de archivos)

Resumen del orden de inicio​

Los scripts en /etc/init.d/ y /oem/usr/etc/init.d/ se ejecutan en orden numérico en el dispositivo:

OrdenScriptOrigen
S00board-idoverlay
S10log(registro por WebSocket)overlay
S15watchdogoverlay
S20hwclockoverlay
S20/S21linkmount / appinitgenerado automáticamente por build.sh (monta particiones / llama a RkLunch.sh)
S40gmgr、skt2ws、tmirrecamera_services
S49rcisdrecamera_services
S49notifyrecamera_notify
S50sshd、ttyd、go2rtcoverlay
S70vsftpdoverlay
S99factorykey、inotify_passwd、ledrecamera_services

Al añadir un servicio, elige un número de secuencia sin usar y ten en cuenta las dependencias. Por ejemplo, inicia los servicios que dependen de la red después de S40 y los servicios que necesitan /userdata después de S20linkmount.

Repositorios de código fuente​

Se trata de una instantánea del código fuente sin metadatos .git. Los archivos README identifican estas aplicaciones como correspondientes a repositorios internos de GitLab de Seeed:

AplicaciónRepositorio
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

El patrón de nombres es rockchip/linux-ipc-app-recamera2-<module>. Es probable que otras aplicaciones recamera_* sigan la misma convención (verifícalo en el GitLab interno antes de completar la tabla). Realiza los cambios ascendentes en el repositorio correspondiente en lugar de en esta instantánea del SDK, o podrían perderse durante la siguiente sincronización.

Referencia rápida del impacto de cambios​

Si quieres cambiar…Edita aquíVuelve a compilar
Opciones de resolución de vídeo/flujo/RTSP/ONVIFrecamera_ipc/src/rv1126b_ipc/rkipc-3840x2160.ini o en el dispositivo /userdata/config/rkipc.iniapp + firmware (o edita directamente el INI del dispositivo)
Páginas de la interfaz webrecamera_web/recamera_web_react/src/app + firmware
APIs del backend webrecamera_web/recamera_web_backend/src/Igual que arriba
Definiciones/API de GPIOrecamera_services/gmgr/config.json y src/Igual que arriba
Formato/canales de notificación de inferenciarecamera_notify/notify-server/、notify_config_default.jsonIgual que arriba
Modelos de IArecamera_ipc/model/rknn/ y los archivos .json correspondientesapp + firmware
Aplicaciones de iniciorecamera_ipc/src/rv1126b_ipc/RkLunch.shapp + firmware
Formato/salida de registrosoverlay-buildroot-syslog-ng/etc/syslog-ng.confrootfs + firmware
Política de Serial/SSH/ttydoverlay-buildroot-sshd、overlay-buildroot-ttydrootfs + firmware
Asignación de canales de audiooverlay-buildroot-asound/etc/asound.confrootfs + firmware

Soporte técnico y debate sobre el producto​

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte distintos tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...