引言:碎片化协议是智慧安防落地的最大阻碍

在安防集成项目中,作为架构师,我们最头疼的往往不是算法不够准,而是设备接不进来

客户的现场环境通常是一部“安防设备发展史”:既有老旧的海康/大华 IPC 摄像头,只支持私有协议或 GB28181;又有新兴的国标设备;还有各种无人机、车载记录仪或 RTMP 推流的直播信号。传统的视频平台往往只能支持单一协议,导致我们需要部署多套流媒体服务器,或者购买昂贵的协议转换网关。这不仅增加了硬件成本,更让系统架构变得臃肿不堪,运维难度呈指数级上升。

YiheCode Server 提供了一种“大一统”的解决方案。作为一个企业级 AI 视频管理平台,它深度打通了 GB28181、RTSP、RTMP 等主流协议壁垒。基于高性能的 ZLMediaKit 流媒体底座,它实现了对 H.264/H.265 视频流的全兼容接入。配合其边缘推流机制,它能将复杂的协议适配工作封装在底层,让开发者专注于上层的 AI 业务逻辑,从而将企业级应用的开发与适配成本降低约 95%。本文将深入解析其如何实现“万能接入”的协议兼容架构。
在这里插入图片描述


一、 协议层解耦:ZLMediaKit 的多协议融合能力

参考 Gitee 仓库的架构图与文档,YiheCode Server 的核心流媒体服务基于 ZLMediaKit 开发。这是一个基于 C++11 的高性能开源流媒体框架,其最大的技术优势在于对网络协议的原生全栈支持

1.1 协议无关的接入设计

平台不再依赖特定厂商的 SDK,而是通过标准协议直接与设备交互:

  • 国标设备:原生支持 GB/T 28181 协议,可直接注册、目录查询、实时点播和云台控制。
  • 通用 IPC:支持 RTSP 协议的被动拉流(Pull Stream)与主动推流(Push Stream)。
  • 直播/复杂源:支持 RTMP 协议拉流,适用于无法主动提供 RTSP 的复杂视频源(如 OBS 推流、无人机直播)。
  • 编码兼容:无缝支持 H.264H.265 编码格式,无需转码即可直接进行 AI 推理。
1.2 智能路由与负载均衡

文档中的架构图展示了“摄像头固定分配”逻辑。当海量设备接入时,平台能自动将拉流任务分配给负载最小的 ZLM 节点

  • 配置逻辑
    # docker-compose-zlm.yml
    version: '3'
    services:
      zlmediakit:
        image: zlmediakit/zlmediakit:master
        container_name: zlmediakit
        ports:
          - "1935:1935"   # RTMP
          - "554:554"     # RTSP
          - "18080:80"    # HTTP/WebRTC
        environment:
          - MAX_SESSION=10000
        restart: unless-stopped
    
  • 价值:这种设计实现了接入层的横向扩展,无论是 x86 服务器还是 ARM 边缘盒子,都能作为流媒体节点加入集群。

二、 接入实战:从国标级联到边缘推流

YiheCode Server 提供了多种接入模式,以适应不同场景下的协议兼容需求。

2.1 GB28181 国标级联(被动接收)

对于符合国标的摄像头或 NVR,平台充当 **SIP 客户端(设备端)**的角色,主动向平台注册。

接入流程:

  1. 注册认证:边缘盒子或设备向平台的 SIP 服务(端口默认 5060)发送 Register。
  2. 目录查询:平台下发 Catalog 命令,获取设备列表。
  3. 按需拉流:当开启 AI 算法时,平台通过 INVITE 消息建立 RTP 会话,拉取视频流进行解码分析。
2.2 RTSP/RTMP 灵活拉流(主动抓取)

对于不支持国标的设备,平台提供了灵活的 URL 填写模式。
在这里插入图片描述

Java 伪代码:流媒体拉流管理

// MediaPullService.java
@Service
public class MediaPullService {
    
    @Autowired
    private ZLMediaKitApiClient zlClient; // 封装对 ZLM 的 HTTP API 调用

    /**
     * 通用拉流方法,适配 RTSP/RTMP/GB28181
     * @param sourceUrl 摄像头流地址 (rtsp://... 或 rtmp://...)
     * @param streamId  平台内部流 ID
     */
    public boolean startPullStream(String sourceUrl, String streamId) {
        Map<String, Object> params = new HashMap<>();
        params.put("url", sourceUrl); // 支持 rtsp, rtmp, http-flv 等
        params.put("stream", streamId);
        params.put("enable_hls", true);
        params.put("enable_mp4", false); // 是否开启录像

        try {
            // ZLMediaKit 支持通过 HTTP API 控制拉流
            JSONObject result = zlClient.post("/index/api/addStreamProxy", params);
            if (result.getInt("code") == 0) {
                log.info("拉流成功: {} -> {}", sourceUrl, streamId);
                return true;
            }
        } catch (Exception e) {
            log.error("拉流失败: {}", sourceUrl, e);
        }
        return false;
    }
}

场景:无论是海康的 rtsp://admin:password@ip:554/Streaming/Channels/101,还是大疆无人机的 RTMP 流,只需修改 URL 即可接入。

2.3 边缘推流模式(主动上报)

针对网络环境复杂(如跨公网)或算力受限的场景,文档提到了“推流本地”模式。

  • 逻辑:边缘盒子在本地通过 SDK 解码视频,分析出告警后,仅将截图告警结构化数据通过 HTTP API 上报给中心平台。
  • 优势:完全规避了复杂的内网穿透和流媒体协议兼容问题,实现了极致的低代码接入。

三、 技术栈与扩展性

YiheCode Server 的技术栈选择(Java + Vue + ZLMediaKit)是解决协议碎片化的最佳组合。

  • 后端 (Java):利用 Java 的高并发特性处理海量设备的元数据管理(SIP 信令、设备状态)。
  • 流媒体 (C++):利用 ZLMediaKit 的高性能处理视频流的收发、解复用,不消耗宝贵的 JVM 资源。
  • 前端 (Vue):提供可视化的协议配置界面,用户无需懂复杂的 RTSP URL 规则,只需选择品牌、型号和输入 IP 即可。

四、 总结

YiheCode Server 在协议兼容层面展现了极强的工程能力。

它利用 ZLMediaKit 这一“瑞士军刀”式的流媒体框架,彻底解决了安防行业多品牌、多协议、多编码的接入难题。无论是标准的 GB28181 国标设备,还是私有的 RTSP 流,亦或是复杂的 RTMP 推流,都能被统一纳管。这种“全兼容”的特性,配合源码交付模式,让集成商无需再为底层协议适配编写一行代码,真正实现了约 95% 的成本节省。
在这里插入图片描述

对于寻求全协议接入、且需要进行私有化定制部署的技术决策者来说,这套方案无疑是目前开源领域最具落地价值的选择。


演示环境与源码获取

如果您希望测试该平台在不同协议设备下的兼容性,请参考以下信息:

  • 流媒体核心:ZLMediaKit (C++)
  • 在线体验 Demo: (扫码获取测试账号,体验 GB28181 和 RTSP 接入配置)

架构师建议
在进行大规模部署时,建议采用“国标 + RTSP”混合接入策略:

  1. 国标设备:直接使用 GB28181 接入,利用其信令控制能力(云台、录像控制)。
  2. 非国标设备:优先使用 RTSP 流地址接入。
  3. 特殊设备:对于无法提供拉流地址的设备,利用边缘 SDK 进行解码后,以“边缘推流”模式接入平台。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐