System Architecture
NE503 AIPC(AI IPC)平台是一个面向边缘 AI 计算的完整软件栈,采用四层分层架构设计,支持多 SoC 平台(Hailo-15 / RKxxx / Jetson)通过硬件抽象层实现平滑迁移。本文档详细介绍平台各层架构、核心服务、数据流和安全模型。
1. 四层架构总览
| 层级 | 职责 | 技术 |
|---|---|---|
| 应用容器层 | 第三方 AI 应用、模型推理管线 | Python/Go/C++,容器化运行 |
| 平台服务层 | 摄像头管理、AI 推理、容器管理、事件分发、设备控制、API 网关、设备发现 | Go 微服务 + C++ 守护进程 |
| 硬件抽象层 | 统一硬件接口,解耦平台服务与 SoC | C/C++ 函数指针表(Ops),DMA-BUF 零拷贝 |
| 硬件层 | SoC、NPU、ISP、传感器、MCU | Hailo-15H(当前) 、RKxxx / Jetson(可扩展) |
2. 平台服务层
平台服务层包含多个微服务,通过 gRPC over Unix Domain Socket 进行内部通信。
2.1 服务总览
| 服务 | 语言 | 监听地址 | 职责 |
|---|---|---|---|
| ai-runtime | C++ | unix:///run/aipc/ai-runtime.sock | AI 模型管理与推理调度,NPU 资源分配,GenAI 流式推理 |
| app-manager | Go | unix:///run/aipc/app-manager.sock | 容器应用生命周期管理(安装/启动/停止/卸载),基于 containerd |
| event-bus | Go | unix:///run/aipc/event-bus.sock + TCP 127.0.0.1:50053 | 发布/订阅消息总线,MQTT 风格通配符匹配 |
| device-control | Go | unix:///run/aipc/device-control.sock | 硬件外设控制(灯光/PTZ/镜头/GPIO),MCU UART 通信 |
| device-discovery | Go | unix:///run/aipc/device-discovery.sock | 网络设备发现(CT-Disc 协议),设备注册与状态管理 |
| platform-api | Go | :8080 | HTTP/RESTful API 网关,代理所有后端 gRPC 服务 |
| camera-daemon | C++ | unix:///run/aipc/camera.sock(FD 发布)+ unix:///run/aipc/camera-control.sock(gRPC 控制)+ /run/aipc/shm/(SHM) | 视频采集、双通道帧分发(FD/SHM)、编码、RTSP 流媒体 |
2.2 gRPC API 定义
平台通过 Protocol Buffers 文件定义所有 gRPC 接口:
| Proto 文件 | 服务 | 说明 |
|---|---|---|
inference.proto | AI 推理 | 模型注册/推理/流式推理/GenAI 会话管理 |
app.proto | 容器管理 | 应用安装/生命周期 + 容器/镜像/资源管理 |
event.proto | 事件总线 | 发布/订阅,MQTT 风格通配符,主题统计 |
device.proto | 设备控制 | 灯光/PTZ/镜头(含 AF0832)/GPIO/环境/告警/RS485 |
camera.proto | 摄像头管理 | 视频采集管道、RTSP 流媒体、OSD 叠加 |
lens_hal.proto | 镜头控制 | device.proto 镜头部分的 HAL 桥接实现 |
discovery.proto | 设备发现 | CT-Disc 协议设备发现、监听与扫描 |
各 proto 的完整操作列表见对应的服务参考文档。
3. 硬件抽象层(HAL)
3.1 HAL 接口总览
HAL 头文件按组件子目录组织,位于 hal_v2/include/:
| 目录 | 覆盖功能 |
|---|---|
media/ | 视频采集、编码(H.264/H.265)、OSD 叠加、ISP、音频、Profile 管理 |
model/ | 模型推理、后处理(NMS)、GenAI(LLM/VLM)、可视化绘制、CLIP 文本编码 |
dsp/ | 裁剪、缩放、格 式转换、隐私遮罩、防抖 |
peripheral/ | MCU 通信、GPIO/传感器;设备层含 LED、镜头、告警、RS485、RTC、OTA 等 |
common/ | 公共枚举/错误码、HalFrameBuffer 帧缓冲、基础类型、日志 |
各服务消费的具体子接口(如
HalInferenceOps、HalPostprocessOps等)详见对应的服务参考文档。
3.2 核心数据结构:HalFrameBuffer
HalFrameBuffer 是平台的核心帧数据载体,用于在视频采集、AI 推理、编码等模块间传递帧数据。
数据封装:
-
图像元数据:宽高、像素格式、时间戳
-
内存描述:DMA-BUF fd、虚拟地址、stride/size
-
私有数据:通过
priv指针透传平台特定信息 -
内存模式:支持 DMA-BUF(零拷贝)和 CPU Memory 两种。视频→AI→编码全链路共享同一 DMA-BUF,无需内存拷贝。
-
生命周期:通过引用计数管理(
hal_frame_buffer_ref/hal_frame_buffer_release)。
完整结构体定义见 GitHub 仓库
hal_v2/include/common/目录。