引言:算力碎片化下的"调度困境"
在 AI 赋能安防的转型期,架构师面临的最大挑战不再是"有没有算法",而是"算力如何高效调度"。现实场景中,我们往往面临复杂的硬件混用局面:中心机房可能是 NVIDIA A100 的天下,而边缘侧则是海康威视的 x86 盒子、华为的 ARM 芯片(如昇腾)或是特定的 NPU 设备(如摩尔线程、比特大陆)。

传统的监控系统往往是"烟囱式"的,一套软件只能跑在特定的芯片上。如果缺乏一套统一的"芯片抽象层",企业将被迫为不同品牌的硬件部署多套独立的系统,导致运维割裂、数据孤岛。这种"多芯片适配"的高昂成本,往往占据了项目预算的 95%。
YiheCode Server 给出的解决方案是"软硬解耦 + 边云协同"。这不仅仅是一个基于 Spring Boot 2.7 + Vue 2.6 开发的开源平台,更是一个深度集成 ZLMediaKit 流媒体服务器的异构计算调度中枢。本文将深入 Gitee 仓库的底层逻辑,解析其如何通过边缘-中心的架构设计,打通 X86 与 ARM 的壁垒,实现多路多算法的实时并发计算。
一、 核心架构:分层解耦与异构适配
YiheCode Server 的架构设计核心在于"计算下沉,管理上移"。根据 Gitee 仓库文档与架构图,系统被清晰地划分为业务逻辑层、流媒体层和算力执行层。
1.1 硬件抽象层:全栈国产化与异构支持
文档明确指出,平台支持全硬件适配,这是实现"节省 95% 开发成本"的基石:
- 指令集兼容:支持 x86、ARM 等指令集。
- 芯片级支持:打通各大芯片厂商壁垒,支持 NVIDIA GPU、以及多种 NPU 边缘计算硬件。
- Docker 化部署:利用容器化技术屏蔽底层操作系统差异,实现"一次构建,到处运行"。
1.2 边缘-中心协同架构 (Edge-Cloud Collaboration)
系统采用典型的分布式架构,将重负载的推理计算下沉至边缘,将轻量级的信令管理汇聚至中心。
架构拓扑逻辑:
- 中心节点 (Master):负责设备管理、用户鉴权、告警汇聚(Spring Boot 后端)。
- 流媒体节点 (ZLM):负责视频流的拉取、转协议(RTSP转FLV/HLS)、录制与分发。
- 边缘节点 (Edge):部署在 NPU/GPU 盒子上,负责具体的 AI 算法推理(如检测安全帽、烟火)。
二、 深度技术解析:流媒体与算力调度
2.1 流媒体调度策略 (ZLMediaKit)
Gitee 仓库文档详细描述了 ZLMediaKit 节点的负载分配策略。这是一种典型的资源池化 管理方式,旨在解决高并发下的流媒体卡顿问题。

- 自动负载均衡:摄像头新增或国标流接入时,系统会自动按"最小负载"原则分配到具体的 ZLM 节点。
- 按需拉流 (Lazy Pull):录像控制程序定时(5分钟)判断是否需要录制。如果不需要,且是国标流,不会主动拉流,避免带宽浪费。
ZLM 节点分配算法模拟 (Pseudo Code):
python
# 伪代码:基于文档的负载均衡策略
def assign_camera_to_zlm(camera):
# 获取所有在线的 ZLM 流媒体节点
zlm_nodes = MediaCluster.get_online_nodes()
# 策略:选择负载最低的节点 (Min Load Strategy)
# 文档提及:自动按最小数指定到一个ZLM节点
target_node = min(zlm_nodes, key=lambda node: node.get_current_connections())
# 如果是手动流 (RTSP),主动拉流
if camera.protocol == "RTSP":
target_node.pull_stream(camera.url)
# 如果是国标流 (GB28181),通常由设备主动推送到指定端口
elif camera.protocol == "GB28181":
target_node.listen_port(camera.sip_port)
return target_node
2.2 异构算力的"热插拔"管理
文档中提到的"边缘平台"是异构计算的核心体现。它允许管理员在界面上直接管理不同架构的边缘盒子(如 1684X 盒子)。
- 版本热管理:支持算法程序的版本升级与降级,无需重启边缘服务。
- 参数动态配置:支持控制识别告警间隔、抽帧频率,适配不同算力的硬件(如低算力 ARM 芯片降低抽帧率)。
边缘盒子状态机 (State Machine):
java
// Java 逻辑:边缘盒子的心跳与状态同步
@Scheduled(fixedRate = 30000) // 30秒心跳
public void edgeHeartbeat() {
for (EdgeDevice device : edgeDeviceRegistry.getAll()) {
// 1. 获取边缘硬件信息 (CPU/内存/NPU利用率)
HardwareInfo hwInfo = device.getHardwareInfo();
// 2. 根据算力动态调整算法负载
if (hwInfo.npuUsage > 90%) {
// 算力过载,减少并发路数或降低分辨率
device.adjustAlgorithmLoad(LoadLevel.LOW);
} else {
// 算力空闲,允许加载更多算法
device.adjustAlgorithmLoad(LoadLevel.HIGH);
}
// 3. 同步日志与运行状态
logService.upload(device.getRecentLogs());
}
}
三、 存储与告警:高可用设计
3.1 智能存储策略
根据文档架构图,系统采用了分级存储策略,以应对海量视频数据:
- 热数据:告警截图与短视频片段上传至 MinIO 对象存储,供快速检索。
- 冷数据:全量录像由 ZLM 节点本地存储或挂载 NAS,仅在需要回溯时调用。
3.2 告警与业务的解耦
平台内置了丰富的告警通道(语音、飞书、钉钉、现场音柱),并通过Socket 通信与算法程序解耦。
告警处理流水线:
- 算法层:边缘盒子检测到"未戴安全帽",生成告警事件。
- 传输层:通过 HTTP/WebSocket 上报至中心。
- 执行层:中心判断是否需要"现场音柱驱离"或"推送钉钉给管理员"。
四、 总结
YiheCode Server 通过ZLMediaKit 流媒体集群 与边缘计算节点 的有机结合,成功构建了一个"硬件无关"的视频计算底座。

对于技术决策者而言,这套系统最大的价值在于:它将"适配 10 种不同芯片"的复杂性,封装在了统一的 API 接口之下。无论是 x86 的高性能服务器,还是 ARM 架构的边缘 NPU,都能通过这套系统实现统一的算力调度与管理。这种"边缘推流、中心分发、异构计算"的架构,正是实现"减少 95% 开发成本"并快速响应客户现场复杂硬件环境的核心竞争力。
架构师建议 :
在部署大规模集群时,建议将 ZLMediaKit 节点与 MySQL/Redis 服务分离部署。对于边缘侧 ARM 设备,建议优先使用 Docker 部署算法服务,以利用容器化带来的环境隔离优势,确保算法在不同硬件环境下的稳定性。