Monibuca GB28181 国标视频监控插件:从零部署到全功能实战指南
Go 原生独立运行一个二进制搞定 SIP 信令 PS 流解析 多协议分发。目录一、为什么选择 Monibuca GB28181二、核心架构一个插件全链路自研三、快速部署四、配置文件详解五、管理界面功能全览六、API 接口速查七、进阶平台级联对接八、与同类方案对比九、常见问题排查一、为什么选择 Monibuca GB28181如果你在做视频监控平台的开发GB28181 国标协议是绕不过去的。市面上主流方案如 WVP-PRO需要同时部署Java 信令服务 C 流媒体服务ZLMediaKit两套系统还要配通 Hook 回调、端口映射、密钥同步……架构复杂、部署繁琐、资源占用高。Monibuca 的 GB28181 插件走了一条完全不同的路——全部用 Go 语言实现零外部依赖一个二进制文件即可运行。核心优势优势说明真正的一体化SIP 信令、RTP 收流、PS 解析、多协议分发全部在 m7s 进程内完成不依赖 ZLMediaKit 或任何外部流媒体服务Go 原生高性能零拷贝 内存池 协程单机万路并发内存占用仅 Java 方案的 1/5 ~ 1/10双模式设备接入 平台级联既能作为 SIP Server 接入下级 IPC/NVR又能向上级平台注册共享通道全功能覆盖直播、录像回放暂停/倍速/拖动、云台控制、预置位、语音广播/对讲、报警订阅、GPS 位置订阅自动多协议分发GB28181 接入的设备流自动可被 RTMP、RTSP、HLS、HTTP-FLV、WebRTC、SRT 等所有 m7s 支持的协议访问多种数据库SQLite零配置开箱即用、MySQL、PostgreSQL、DuckDB 按需选择开箱即用的 NVR 管理后台设备管理、通道浏览、设备分屏、录像回放、设备分组、云台控制全部在 Web 界面完成多厂商兼容海康、大华、宇视等主流 IPC/NVR 即插即用TCP/UDP 双传输支持 UDP、TCP 主动、TCP 被动三种流传输模式适应各种网络环境单端口/多端口灵活切换单端口复用模式适合容器/K8s传统多端口模式兼容性最佳二、核心架构一个插件全链路自研为什么不需要 ZLMediaKit先看一张完整的架构图┌──────────────────────────────────────────────────────────────────┐ │ Monibuca (m7s) 单进程 │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ GB28181 插件 (plugin/gb28181) │ │ │ │ │ │ │ │ ┌──────────────┐ ┌───────────────┐ ┌──────────────┐ │ │ │ │ │ SIP Server │ │ Dialog / Pull │ │ Platform │ │ │ │ │ │ (sipgo 库) │ │ (拉流对话管理) │ │ (级联管理) │ │ │ │ │ └──────┬───────┘ └───────┬───────┘ └──────┬───────┘ │ │ │ └─────────┼────────────────────┼───────────────────┼─────────┘ │ │ │ SIP 信令 │ │ │ │ ┌─────────┴────────────────────┴────────────────────┴─────────┐ │ │ │ RTP 插件 (plugin/rtp) │ │ │ │ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Receiver │───▶│ RTP 解包 │───▶│ PS 解复用 │ │ │ │ │ │ (TCP/UDP收流) │ │ (去掉RTP头) │ │ (PS→H264/H265│ │ │ │ │ │ │ │ │ │ /AAC/G711) │ │ │ │ │ └──────────────┘ └──────────────┘ └──────┬───────┘ │ │ │ └─────────────────────────────────────────────────┼──────────┘ │ │ │ │ │ ┌────────────────────────────────▼─┐ │ │ │ m7s 核心 Publisher │ │ │ │ (音视频帧写入 → 自动分发到所有订阅者) │ │ │ └──────────────────┬───────────────┘ │ │ │ │ │ ┌──────────┬──────────┬───────┴──────┬──────────┐ │ │ ▼ ▼ ▼ ▼ ▼ │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────┐ ┌────────┐ │ │ │ RTMP │ │ RTSP │ │ HLS │ │ HTTP-FLV │ │ WebRTC │ │ │ │ 插件 │ │ 插件 │ │ 插件 │ │ 插件 │ │ 插件 │ │ │ └────────┘ └────────┘ └────────┘ └──────────┘ └────────┘ │ │ │ │ ┌──────────────────────────────────────┐ │ │ │ gRPC / RESTful HTTP API │ │ │ └──────────────────┬───────────────────┘ │ │ │ │ │ ┌──────────────────▼───────────────────┐ │ │ │ NVR 管理界面 (Vue.js Ant Design) │ │ │ └──────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘ ▲ ▲ │ SIP 信令 RTP/PS 媒体流 │ SIP 信令 ┌─────┴─────┐ ┌────────┴────────┐ │ 下级设备 │ │ 上级平台 │ │ IPC / NVR │ │ (WVP / 国标平台) │ └───────────┘ └─────────────────┘关键在于SIP 信令由 GB28181 插件基于 sipgo 库处理RTP 收流和 PS 解复用由 m7s 内置的 RTP 插件和pkg/format/ps包完成整个过程不需要任何外部流媒体服务。数据流转全链路摄像头 (IPC/NVR) │ │ ① SIP REGISTER设备注册 │ ② SIP MESSAGE保活 / 目录查询 │ ③ SIP INVITE请求推流 │ ▼ GB28181 插件 │ SIP 信令交互 │ 构建 SDP指定收流端口、传输模式 │ ▼ RTP 插件 - ReceiverTCP/UDP 监听收流 │ 接收 RTP 包 │ 去掉 RTP 头提取 PS 负载 ▼ PS 解复用器 (pkg/format/ps) │ 解析 PS 包头 │ 提取视频帧H264/H265 NAL 单元 │ 提取音频帧AAC/G711A/G711U ▼ m7s 核心 Publisher │ 写入音视频帧 │ 自动分发到所有订阅者 ▼ ┌───────────────────────────────────────────┐ │ RTMP │ RTSP │ HLS │ HTTP-FLV │ WebRTC │ │ 客户端可自由选择协议观看 │ └───────────────────────────────────────────┘与下级设备的交互流程设备注册与保活设备 Monibuca GB28181 插件 │ │ │──── SIP REGISTER ───────────▶│ ① 设备发起注册 │◀─── 200 OK ──────────────────│ │ │ │◀─── SIP MESSAGE (Catalog) ───│ ② 查询设备信息和通道列表 │──── 200 OK (设备信息通道) ──▶│ │ │ │──── SIP MESSAGE (Keepalive) ▶│ ③ 定时保活默认 60s │◀─── 200 OK ──────────────────│ │ ... │直播播放用户/前端 Monibuca GB28181 插件 下级设备 │ │ │ │── HTTP API ───────▶│ │ │ │── SIP INVITE ─────────▶│ ④ 发送 INVITESDP 含收流端口 │ │◀── 200 OK (SDP) ───────│ ⑤ 设备回复媒体参数 │ │── SIP ACK ────────────▶│ │ │◀── RTP/PS 流 ──────────│ ⑥ 设备推流到指定端口 │ │ │ │ │ RTP 插件自动完成 │ │ │ RTP解包 → PS解析 → 发布 │ │ │ │ │◀─ HTTP-FLV 流 ─────│ │ ⑦ 多协议分发 │◀─ WebRTC ──────────│ │ │◀─ RTMP / HLS ... ──│ │录像回放用户/前端 Monibuca GB28181 插件 下级设备 │ │ │ │── 指定时间段 ──────▶│ │ │ │── SIP INVITE ─────────▶│ ⑧ INVITE 携带时间范围 │ │◀── RTP/PS 录像流 ──────│ ⑨ 设备推送历史录像 │◀─ HTTP-FLV 流 ─────│ │ ⑩ 支持暂停/恢复/倍速/拖动与上级平台的级联Monibuca 上级平台 │ │ │── SIP REGISTER ───────────────▶│ ⑪ 主动注册到上级 │◀── 200 OK ─────────────────────│ │ │ │── SIP MESSAGE (Keepalive) ────▶│ ⑫ 定时保活 │ │ │◀── SIP INVITE ────────────────│ ⑬ 上级请求播放 │ 自动向下级拉流并转发 │ │── RTP/PS 流 ──────────────────▶│ ⑭ 转发流给上级三、快速部署方式一源码编译运行1. 环境要求Go 1.21Git2. 获取源码gitclone https://github.com/langhuihui/monibuca.gitcdmonibuca3. 最小化配置创建config.yamlglobal:http::8081# Web 管理端口gb28181:enable:truemediaip:192.168.1.100# 收流 IP必填填本机网卡 IPsipip:192.168.1.100# SIP IP必填填本机网卡 IPsip:listenaddr:-udp::5060# SIP 监听端口4. 编译运行cdexample/default# SQLite零配置推荐入门使用go run-tagssqlite main.go-c你的配置路径/config.yaml# MySQLgo run-tagsmysql main.go-c你的配置路径/config.yaml# PostgreSQLgo run-tagspostgres main.go-c你的配置路径/config.yaml5. 访问管理界面http://localhost:8081API 文档各插件通过 gRPC Gateway 自动映射为 RESTful 接口方式二Docker 部署推荐生产环境# docker-compose.ymlversion:3.8services:monibuca:image:monibuca:latestcontainer_name:monibucanetwork_mode:host# 推荐 host 模式避免 RTP 端口映射问题volumes:-./config.yaml:/app/config.yaml-./record:/app/record# 录像存储environment:TZ:Asia/Shanghairestart:unless-stopped⚠️注意GB28181 使用大量 RTP 端口推荐使用network_mode: host。如必须使用桥接网络需映射完整的 RTP 端口范围。四、配置文件详解完整配置示例以下配置覆盖了 GB28181 插件的所有选项每项均有注释说明gb28181:# 基础身份 enable:true# 是否启用 GB28181 插件serial:34020000002000000001# SIP 服务器 ID20 位国标编码默认值realm:3402000000# SIP 服务器域10 位行政区划编码password:123456# 设备注册认证密码需与摄像头配置一致# 网络地址必填 mediaip:192.168.1.100# 流媒体收流 IP# 内网填本机网卡 IP如 192.168.x.x# 外网填公网 IP# ⚠️ 不要用 127.0.0.1sipip:192.168.1.100# SIP 信令通讯 IP# 始终填本机网卡 IP# ⚠️ 不要用 127.0.0.1# 媒体端口 mediaport:10001-20000# RTP 收流端口范围# 多端口模式10001-20000每路流独占一个端口# 单端口模式9000-9000首尾相同所有流复用# 多端口兼容性最好单端口适合容器/K8s# SIP 监听 sip:listenaddr:-udp::5060# SIP UDP 监听必填# - tcp::5060 # 可选SIP TCP 监听listenaddrtls:# 可选TLS 加密# - tcp::5061certfile:# TLS 证书文件路径keyfile:# TLS 私钥文件路径# 流地址映射规则 onsub:pull:# 标准 20 位编码格式自动映射^\d{20}/\d{20}$:$0# gb_ 前缀短格式映射^gb_\d/(.)$:$1# 上级平台级联可选 # ⚠️ 不建议通过配置文件配置级联平台推荐使用管理界面或 API 进行动态配置platforms:-enable:false# 是否启用name:上级视频平台servergbid:34020000002000000002# 上级平台 SIP Server IDservergbdomain:3402000000# 上级平台域编码serverip:192.168.1.200# 上级平台 IPserverport:5061# 上级平台 SIP 端口devicegbid:34020000002000000001# 本平台作为设备的国标编码deviceip:192.168.1.100# 本平台对外 IPdeviceport:5060# 本平台 SIP 端口username:34020000002000000001# SIP 认证用户名password:123456# SIP 认证密码expires:3600# 注册有效期秒keeptimeout:60# 心跳超时时间秒civilcode:340200# 行政区划代码manufacturer:Monibuca# 设备制造商model:GB28181# 设备型号address:江苏南京# 设备地址register_way:1# 注册方式1: 标准认证platformchannels:# 共享给上级的通道-platformservergbid:34020000002000000002channeldbid:设备ID_通道ID配置项速查表配置项类型默认值必填说明enableboolfalse否是否启用serialstring34020000002000000001否SIP 服务器 ID20 位realmstring3402000000否SIP 服务器域10 位passwordstring空否设备认证密码mediaipstring空是收流 IPsipipstring空是SIP 通讯 IPmediaportstring10001-20000否RTP 端口范围sip.listenaddr[]string空是SIP 监听地址端口用途速查端口 / 范围协议用途配置项5060UDP/TCPSIP 信令sip.listenaddr5061TCPSIP TLS 加密sip.listenaddrtls10001-20000UDP/TCPRTP 媒体流多端口模式mediaport8081TCPHTTP 管理 APIglobal.http554TCPRTSP 服务如启用 rtsp 插件rtsp.tcp.listenaddr五、管理界面功能全览Monibuca 提供完整的 NVR 管理 Web 界面基于 Vue.js Ant Design Vue VxeTable 构建。5.1 设备管理截图设备管理列表页展示所有已接入的 GB28181 设备 按 ID / 名称搜索按在线状态筛选️通道详情查看设备下所有通道编号、名称、地址、状态、厂商✏️编辑自定义设备名称、传输模式TCP/UDP、字符集刷新通道手动触发目录查询更新️删除移除离线设备截图通道详情页5.2 设备分屏截图多窗口实时预览支持 1 / 4 / 9 / 16 画面分屏点击通道的「播放」按钮即刻预览底层使用 HTTP-FLV / WebRTC 低延迟协议5.3 云台控制PTZ截图云台控制面板完整 PTZ 操作方向八方位控制变倍Zoom In / Zoom Out聚焦Focus / Focus -光圈Iris / Iris -预置位设置、调用、删除、查询巡航 / 扫描 / 辅助开关雨刷等5.4 录像管理截图录像管理左侧设备树 播放器 时间轴 左侧设备树选择通道 选择日期加载录像片段▶️ ⏸️ ⏩ 完整的播放控制播放、暂停、恢复、倍速、拖动进度 录像下载5.5 设备分组截图设备分组分组树 多窗口画面 操作面板多级分组按区域 / 楼层 / 场景组织1 / 4 / 9 / 16 画面分屏批量上墙选中分组一键上墙5.6 平台级联管理截图级联平台列表页展示已配置的上级平台及在线状态添加 / 编辑上级平台配置 SIP 服务器地址、认证信息、传输协议、字符集等实时显示与上级平台的注册状态在线 / 离线自动注册 定时保活 状态监控截图新增 / 编辑上级平台表单配置 SIP 连接参数、设备信息等配置项包括平台名称、SIP 服务器 ID / 域 / IP / 端口、本端设备 ID / 域 / IP / 端口、认证用户名 / 密码、注册有效期、心跳超时、传输协议UDP/TCP、字符集、行政区划、制造商、型号等。5.7 通道共享管理截图通道共享管理已共享 / 未共享两个 Tab支持搜索和在线状态筛选在级联管理中可以为每个上级平台配置共享的通道列表已共享 / 未共享两个 Tab 页切换方便管理搜索筛选按通道编号、名称搜索按在线状态筛选一键添加 / 移出将通道添加到共享列表或从共享列表移出截图自定义通道管理添加通道时填写流标识即可创建自定义通道自定义通道是平台级联的重要能力在添加通道时填写流标识streamPath即可创建自定义通道流标识对应的是本服务器上已有的流如通过 RTSP、RTMP 等协议拉入的摄像头流有流标识的通道即为自定义通道无流标识的为 GB28181 下级设备通道上级平台请求播放时m7s 根据流标识读取本服务器对应的流转换为 PS 格式转发给上级支持自定义通道编号和通道名称方便上级平台识别5.8 报警信息截图报警信息列表支持按设备、时间范围查询展示报警类型、时间、设备信息。5.9 语音广播 / 对讲通过 WebSocket 将 PC 端音频发送到摄像头实现语音广播和对讲。支持 G.711 PCM 格式。六、API 接口速查所有接口基于 gRPC 自动映射为 RESTful HTTP前缀/gb28181/api/。设备管理方法路径说明GET/gb28181/api/list设备列表分页、搜索、状态过滤GET/gb28181/api/devices/{deviceId}设备详情GET/gb28181/api/devices分页查询设备GET/gb28181/api/devices/{deviceId}/channels设备通道列表分页GET/gb28181/api/devices/{deviceId}/sync同步通道信息POST/gb28181/api/device/update更新设备DELETE/gb28181/api/devices/{deviceId}/delete删除设备播放与录像方法路径说明GET/gb28181/api/records/{deviceId}/{channelId}查询录像记录GET/gb28181/api/recording/{cmdType}/{deviceId}/{channelId}录像控制start / stopGET/gb28181/api/playback/pause回放暂停GET/gb28181/api/playback/resume回放恢复GET/gb28181/api/playback/seek回放拖动GET/gb28181/api/playback/speed回放倍速POST/gb28181/api/download/start录像下载GET/gb28181/api/download/progress下载进度查询云台控制PTZ方法路径说明GET/gb28181/api/ptz/{deviceId}/{channelId}方向 / 变倍控制ℹ️ 更多 PTZ 操作光圈、聚焦、预置位、巡航、扫描等已在 proto 中定义具体可用接口请参阅pb/gb28181.proto。平台级联与通道管理方法路径说明GET/gb28181/api/platform/list平台列表POST/gb28181/api/platform/add添加上级平台POST/gb28181/api/platform/update更新平台POST/gb28181/api/platform/{id}删除平台POST/gb28181/api/platform/channel/add添加共享通道POST/gb28181/api/platform/channel/remove移除共享通道POST/gb28181/api/platform/channel/shared批量共享通道GET/gb28181/api/platform/{id}/channels查询平台通道已共享/未共享GET/gb28181/api/channel/manage/list通道管理列表POST/gb28181/api/channel/add添加自定义通道POST/gb28181/api/channel/update更新自定义通道DELETE/gb28181/api/channel/delete删除自定义通道分组管理方法路径说明GET/gb28181/api/groups获取分组树POST/gb28181/api/group/add添加分组POST/gb28181/api/group/update更新分组POST/gb28181/api/group/delete删除分组POST/gb28181/api/group/channel/add添加通道到分组GET/gb28181/api/group/{id}/channels查询分组通道其他功能方法路径说明GET/gb28181/api/alarm/{deviceId}报警查询GET/gb28181/api/alarms/{deviceId}分页查询报警记录POST/gb28181/api/alarm/receive接收报警信息GET/gb28181/api/snap/{deviceId}/{channelId}请求截图POST/gb28181/api/play/broadcast/{deviceId}/{channelId}语音广播POST/gb28181/api/play/broadcast/stop/{deviceId}/{channelId}停止广播GET/gb28181/api/config获取服务器配置信息GET/gb28181/api/testsip测试 SIP 连接POST/gb28181/api/channel/update更新通道信息自定义编号/名称播放地址格式GB28181 设备接入后可通过以下地址格式直接播放# HTTP-FLV低延迟推荐 http://{host}:{port}/flv/{deviceId}/{channelId}.flv # RTSP rtsp://{host}:{port}/{deviceId}/{channelId} # HLS http://{host}:{port}/hls/{deviceId}/{channelId}/index.m3u8 # WebRTC超低延迟 http://{host}:{port}/webrtc/play/{deviceId}/{channelId}七、进阶平台级联对接GB28181 级联允许 Monibuca 作为下级平台向上级国标平台注册并共享通道。整个过程在 Web 管理界面中完成无需手动编写配置文件。操作步骤第 1 步添加上级平台在「平台级联管理」页面点击添加填写上级平台信息平台名称便于识别的名称如市级视频平台SIP 服务器 IDservergbid上级平台的 20 位国标编码SIP 服务器域servergbdomain上级平台的域编码SIP 服务器 IP / 端口上级平台的 SIP 地址本端设备 IDdevicegbid本平台在上级平台中注册的设备编码本端 IP / 端口本平台对外可访问的地址认证用户名 / 密码与上级平台协商的 SIP 认证凭证注册有效期 / 心跳超时保活策略参数传输协议UDP 或 TCP字符集默认 GB2312也可选 UTF-8其他行政区划、制造商、型号、地址等截图添加上级平台表单第 2 步共享通道给上级添加完成后点击该平台的「通道共享」按钮进入通道管理界面在「未共享」Tab 中选择要共享的通道点击「添加」除了 GB28181 下级设备的通道还可以添加自定义通道——填写流标识即可将本服务器上已有的流如 RTSP/RTMP 拉入的流共享给上级在「已共享」Tab 中确认共享列表第 3 步验证级联状态保存后插件会自动向上级发起 SIP 注册。在平台列表中查看注册状态在线 / 离线同时可通过日志确认levelINFO msg平台初始化完成 ID34020000002000000002 Name市级视频平台 levelINFO msg向上级平台注册成功注意事项要点说明SIP 服务器 ID必须与上级平台配置的 Server ID完全一致本端设备 ID必须与在上级平台注册的设备编码一致本端 IP上级平台可达的本机 IP不能用 127.0.0.1NAT 环境编辑平台时配置「流媒体发送 IP」sendStreamIp自定义通道添加通道时填写流标识streamPath上级请求时根据流标识读取本服务器对应流并转发八、与同类方案对比特性Monibuca GB28181WVP-PRO ZLMediaKit实现语言Go单语言Java信令 C流媒体架构单进程信令流媒体一体双进程需要配置两套服务的对接外部依赖无依赖 ZLMediaKit部署方式一个二进制文件Java JAR ZLMediaKit 配置对接资源占用~50MB 内存Java JVM (~500MB) C 进程流媒体处理m7s 内置 RTP 收流 PS 解复用依赖 ZLMediaKit多协议分发RTMP / RTSP / HLS / FLV / WebRTC / SRTRTMP / RTSP / HLS / FLV / WebRTCGB28181✅ 完整支持注册/直播/回放/PTZ/级联✅ 完整支持平台级联✅ 内置支持✅ 支持云台控制✅ 完整 PTZ 预置位✅ 完整 PTZ录像回放✅ 暂停 / 倍速 / 拖动✅ 完整语音广播/对讲✅ WebSocket 对讲✅ 支持报警订阅✅ 支持✅ 支持数据库SQLite / MySQL / PostgreSQL / DuckDBMySQLWeb 管理界面✅ 完整 NVR 后台✅ 完整开源✅ Apache 2.0✅ 开源核心差异总结Monibuca 把「信令服务 流媒体服务」合二为一不需要 ZLMediaKitGo 单二进制零依赖部署。九、常见问题排查1. 设备注册不上来检查项说明sipip必须是本机网卡 IP不能用127.0.0.1sip.listenaddrSIP 端口默认 5060未被占用serial与摄像头配置的 SIP 服务器 ID 一致realm与摄像头配置的 SIP 服务器域一致password与摄像头配置的密码一致防火墙放行 SIP 端口 RTP 端口范围2. 设备在线但无视频画面检查项说明mediaip填写正确设备能访问到此 IPmediaport端口范围未被防火墙拦截传输模式尝试切换 UDP → TCP在设备编辑页面修改TCP 主动/被动根据网络环境选择合适的 TCP 模式3. 单端口模式 vs 多端口模式# 多端口模式默认兼容性最好mediaport:10001-20000# 单端口模式适合 Docker/K8s减少端口映射mediaport:9000-9000# 首尾相同即为单端口场景推荐物理机部署多端口Docker / K8s单端口大规模接入500路多端口4. 端口冲突确保以下端口不冲突端口用途修改方式8081HTTP APIglobal.http5060SIP 信令gb28181.sip.listenaddr10001-20000RTP 媒体流gb28181.mediaport5. 上级平台级联不成功serverip/serverport是否正确deviceip上级平台是否可达devicegbid是否在上级平台中已注册NAT 环境下配置sendstreamip查看日志中的 SIP 消息交互适用场景 企业园区 / 学校 / 医院视频监控集中管理️ 智慧城市 / 平安城市的国标视频联网 不同厂商视频平台的级联互联️ 二次开发的视频监控平台底座 嵌入式 / 边缘计算NVIDIA Jetson等资源受限环境开源地址https://github.com/langhuihui/monibuca技术栈后端Go sipgoSIP gRPC GORM流媒体内置 PS 解复用 RTP 收发 Publisher/Subscriber 分发模型前端Vue.js 3.x Ant Design Vue VxeTable协议GB28181 / RTMP / RTSP / HLS / HTTP-FLV / WebRTC / SRT本文档持续更新中如有问题或建议欢迎在 GitHub 提 Issue 或 PR。