核心概念
本文定位
逐个讲清国标监控的核心概念——先讲"是什么、为什么"(业务含义),再讲技术要点,再指向对接落点。这是快速入门的地图:看懂这一章,后面的协议、配置、操作都能对号入座。
一、概念全景
国标监控围绕"平台 → 设备 → 通道 → 流"这条主线展开,辅以分组、订阅、级联、录像、抓图等能力。先看对象关系:
一句话速记:
| 概念 | 一句话 |
|---|---|
| 平台 | 一个租户的国标接入门户(身份 + 准入策略) |
| 设备 | 一台物理国标硬件(IPC / NVR / 编码器) |
| 通道 | 设备里的"一路画面"——点播/回放/抓图的真正对象 |
| 媒体节点 | 干转流的 ZLM 实例(收 RTP、发 FLV) |
| 流会话 | 一次"看视频"的运行实例(绑定 SSRC、有状态机) |
| 分组 | 把通道按行政区划/业务归类的树 |
| 订阅 | 让设备主动推送目录/告警/位置变化 |
| 级联 | 把本平台当下级,接到上级国标平台 |
| 录像计划/档案/下载 | 定时录 / 录完的归档 / 用户点下载 |
| 抓图 / 预置位 | 单帧截图 / 云台记忆点 |
信令面 vs 媒体面——理解所有概念的总框架
上面这些概念可归入两个互不混用的"面":
- 信令面(走 SIP)——传"控制与元数据":平台、设备、通道目录、订阅、级联,以及 PTZ / 告警 / GPS / 校时。数据量小,本质是"命令"。
- 媒体面(走 ZLM)——传"画面本身":流会话、媒体节点、抓图、录像。设备推流进、浏览器拉流出。
SIP 负责"指挥",ZLM 负责"搬运视频",平台是两头的总调度。 通道很特殊:它的"目录信息"由信令面同步而来,它的"画面"在媒体面取——所以通道是设备目录的产物,但点视频用的是 channelId。
二、平台(Platform)
是什么 —— 一个租户在国标体系里的"门牌号 + 门禁规则"。每个租户对应一条平台配置。
含义(为什么) —— 国标设备要接入,必须知道"往哪个平台注册"。平台记录了这个身份(server-id / domain)和接入口令(password)、准入策略(register-mode)。多租户不是靠多个端口区分,而是靠 server-id:所有租户共用全局一个 5060 端口,设备报文里的 server-id 决定它属于哪个租户。
技术 —— iot_vms_platform,一租户一条;SIP 监听 IP/端口是全局配置(vms.gb28181.sip),平台页只读回填。注册模式 AUTO/MANUAL 决定陌生设备是否放行。
对接 —— POST /platform/submit 配置;GET /platform/sip-info 回填监听信息。详见 配置详解 §2 与 操作手册 §三。
三、设备(Device)
是什么 —— 一台真实的国标硬件:网络摄像机(IPC)、硬盘录像机(NVR)、视频编码器等。
含义(为什么) —— 设备是"会自己上线"的主体:它主动向平台 REGISTER、周期发心跳,在线/离线由它驱动。平台不主动连设备,而是等设备来注册。设备可配独立密码覆盖平台默认密码,实现"一机一密"。
技术 —— iot_vms_device;online_status=ONLINE/OFFLINE 由 REGISTER + 心跳超时驱动;Digest 鉴权(qop=auth 自动适配)。
对接 —— 自动接入只需设备端填 SIP 参数;手动注册(MANUAL)需先在 POST /device/save 登记白名单。
四、通道(Channel)⭐
是什么 —— 设备下的一路视频流。它才是你"点开看画面"的真正对象。
含义(为什么)——这是最容易被忽略的关键概念:
- 设备 ≠ 通道。一台 IPC 通常就 1 路画面 = 1 设备 1 通道;但一台 NVR 挂 16 个摄像头 = 1 设备 16 通道。所以平台把"设备"和"通道"拆成两层:设备负责接入与在线,通道负责承载具体画面。
- 几乎所有视频操作的入参都是
channelId而非deviceId:点播、回放、抓图、PTZ、录像计划——都作用在通道上。记住:设备是"谁来了",通道是"看哪一路"。 - 通道有自己的在线状态(
ON/OFF),与设备在线相互独立:NVR 在线但某一路摄像头掉线,是设备 ONLINE + 该通道 OFF。 - 云台能力、经纬度、厂商型号、主/子码流能力等业务属性都挂在通道上。
通道从哪来——不是手工建的:
通道由 Catalog(目录)同步从设备拉取落库;开了 CATALOG 订阅后,通道增删改还会增量推送(Event=ADD/DEL/UPDATE/ON/OFF)。所以接入设备后第一步往往是"同步目录",通道才会出现。
技术 —— iot_vms_channel;20 位国标编号(与设备编号同构,见 §十二);onlineStatus 把设备上报的 ONLINE/在线/1 归一为 ON;streamModeCount 标识是否支持子码流。
对接 —— GET /channel/page、/channel/list-by-device;点播 POST /stream/start?channelId=...;通道配置页支持批量分配业务分组。
一句话区分
设备 = 接入单位(谁在线);通道 = 媒体单位(看哪一路)。 点视频永远用 channelId。
五、媒体节点(MediaNode)
是什么 —— 干"转流"的流媒体服务(ZLM)实例:收设备的 RTP/PS 流,转成浏览器能播的 FLV/HLS/RTMP。
含义(为什么) —— 国标设备推的是 RTP/PS 裸流,浏览器播不了;中间需要一个媒体服务做协议转换与分发。本平台把它做成租户级、可多实例:每个租户配自己的节点,配多个即自动组成负载集群,每路新流落到"并发最低"的节点——配几个即几元集群,无集群开关。
技术 —— iot_vms_media_node(租户级,node_id 全局唯一须等于 ZLM mediaServerId);pickNode 选并发最低的启用节点,会话按 node_id 绑定后续一切回查同一节点;on_server_keepalive 心跳驱动在线状态。
对接 —— 【节点配置】页增删改;ZLM 侧配 mediaServerId + 4 个 hook。详见 配置详解 §4。
六、流会话(StreamSession)
是什么 —— 一次"看视频"的运行期实例。你每点开一路直播/回放,就产生一个流会话。
含义(为什么) —— 视频是有生命周期的:从"发起→等设备推流→播放中→关闭"。把这一次过程建模成会话,才能管住资源(SSRC、ZLM 端口),避免泄漏。会话绑定一个 SSRC(流的唯一身份)和一个媒体节点。
技术 —— iot_vms_stream_session;sessionType=invite/playback/cascade/record(record 为计划录制的独占会话,走 s=Play 新增流,不进实时点播复用池);完整状态机如下。
| 状态 | 含义 |
|---|---|
| WAITING | 已下发 INVITE,等待设备建立 RTP 流 |
| RUNNING | RTP 已到达媒体节点,WS-FLV/HLS/RTMP URL 已就绪 |
| CLOSE_PENDING | 用户已停流,但底层关闭端口失败,等待重试任务收尾 |
| CLOSED | 正常终止,资源已释放 |
| EXPIRED | 异常终止(超时/失败次数耗尽),终态,SQL 报表可识别长期失败会话 |
CLOSE_PENDING 设计动机
媒体节点关闭 RTP 端口可能因短暂网络不可达失败。直接置 CLOSED 会释放 SSRC,但底层端口仍占用,新的 INVITE 会因端口冲突失败。CLOSE_PENDING 是"延迟收尾"状态,后台每 5 分钟重试,成功后才释放 SSRC。关键防护:重试期间收到 Hook 关流通知必须忽略,避免提前释放 SSRC 让重试失去关联。
级联会话的"三路收敛"
本平台作为下级响应上级 INVITE 也产生流会话(sessionType=cascade、sipCallId 存上级 Call-ID)。关闭走三路任一:上级 BYE(按 Call-ID 反查)/ 下级断流(SSRC 反查 + 主动 stopSendRtp)/ ACK 超时 + GC 兜底(2h)。任一触发后另两路命中终态直接 no-op,保证幂等。
七、分组(Group)
是什么 —— 把通道归类的树。两种:行政区划(CIVIL) 与 业务分组(BUSINESS)。
含义(为什么) —— 几百路通道平铺无法管理。行政区划树按通道编号里的区划码自动建(无需人工);业务分组让管理员按"项目/楼栋/重点区域"自定义归类。一个通道可同时属于多个业务分组(多对多)。
技术 —— iot_vms_group 自关联树 + iot_vms_group_channel 多对多;CIVIL 由 Catalog 的 civilCode 自动建。
对接 —— GET /group/tree、POST /group/assign|unassign;通道配置页可批量挂载业务分组。
八、订阅(Subscription)
是什么 —— 让设备主动推送变化,而不是平台反复轮询。三种:目录 / 告警 / 位置。
含义(为什么) —— 轮询费流量又延迟高。订阅后设备在"通道变了/有告警/位置动了"时主动 NOTIFY,实时且省资源。订阅有有效期,平台自动续约,设备重连后自动重发,不依赖设备记忆。
| 订阅类型 | 用途 | NOTIFY 事件 |
|---|---|---|
| CATALOG | 通道增量变更 | ADD / DEL / UPDATE / ON / OFF / VLOST / DEFECT |
| ALARM | 设备告警事件 | 复用 Alarm Notify 报文格式 |
| POSITION | 移动设备 GPS 上报 | MobilePosition(经/纬/速/向/海拔) |
技术 —— iot_vms_subscription;每 30 分钟扫描"距过期 < 1h"的订阅,优先 in-dialog refresh(RFC 6665),失败回退新建。
对接 —— POST /device/subscribe?type=CATALOG|ALARM|POSITION。
九、级联(Cascade)
是什么 —— 把本平台当作下级,注册到区/市级上级国标平台(如雪亮工程、公安专网)。
含义(为什么) —— 国标平台可层级组网:下级把自己的通道目录上报给上级,上级能跨级点播下级的摄像头。本平台支持作为下级:主动注册 + 心跳 + 响应上级的 Catalog 查询 / 订阅 / INVITE 被点播 / Control 转发 / BYE。
技术 —— iot_vms_cascade;cascadeStatus=REGISTERED/UNREGISTERED/FAILED;qop=auth 自动适配 + 401 复用 Call-ID;被点播会话走级联三路收敛(见 §六)。
对接 —— 【国标级联】页 POST /cascade/save|register|unregister。详见 操作手册 §七。
十、录像:计划 / 档案 / 下载
国标录像有两条相关但不同的链路,别混淆:
| 概念 | 是什么 | 触发 |
|---|---|---|
| 录像计划(RecordPlan) | "每周末 0-8 点录某通道"的定时任务定义 | cron 自动 |
| 录像档案(RecordArchive) | 录像计划每次执行产生的成品记录(关联 plan_id) | 计划触发后生成 |
| 录像下载(RecordDownload) | 用户手动"把某段历史录像下载存档"的任务 | 用户点击 |
含义(为什么) —— "计划"是规则,"档案"是规则跑出来的结果,"下载"是用户即时取证。三者都把 MP4 录到 ZLM 临时目录再异步搬到 OSS,避免长录像阻塞线程。
技术 —— iot_vms_record_plan / record_archive / record_download;两阶段异步(同步起录 + 定时回调收尾);下载用国标 s=Download + a=downloadspeed 加速取流。
对接 —— POST /record/plan/save、/record/download;*/url 返回 OSS 外链。详见 对接指南 §三。
十一、抓图(Snapshot)与预置位(PtzPreset)
- 抓图 —— 单帧 jpeg。有流直接抓;无流自动开流→等就绪→抓→关流。存 OSS,默认 7 天过期。触发类型 MANUAL/AUTO/ALARM。
- 预置位 —— 云台的"记忆点"(1-255)。set 记住当前位置、call 转过去、remove 删除;平台可缓存设备远程预置位列表。
十二、关键编码
SSRC 10 位编码(GB28181-2016 附录 D.3.1)
SSRC 是一路流的"身份证号",贯穿"开端口 / Hook 反查 / 关流"。
ssrc(10位) = 前缀(1位) + 域标识(5位) + 序号(4位)
前缀: 0 = 实时点播 1 = 历史回放 / 下载
域标识: SIP 域(server-id)第 4-8 位
序号: 自增计数,触顶 9999 重置防串台:流释放后 30 秒进黑名单,新分配自动跳过;触顶兜底重试 100 次,失败抛异常防返回不安全 SSRC。
国标设备/通道编号(GB28181-2016 §4.2)
设备与通道都是 20 位编号,同构:
34020000 00 132 0000001
└中心编码┘└行业┘└类型┘└─序号─┘| 段 | 位 | 含义 |
|---|---|---|
| 中心编码 | 第 1-8 位 | 前 6 位为行政区划(如 3402=安徽合肥);分组树据此自动建 |
| 行业编码 | 第 9-10 位 | 公安 / 政务 / 民用等 |
| 设备类型 | 第 11-13 位 | 132=IPC 摄像机 / 118=NVR / 200=平台 |
| 序号 | 第 14-20 位 | 同类型自增 |
十三、状态枚举速查
| 对象 | 字段 | 取值 |
|---|---|---|
| 设备 | onlineStatus | ONLINE / OFFLINE |
| 通道 | onlineStatus | ON / OFF(设备上报的 ONLINE/在线/1 归一为 ON) |
| 流会话 | sessionType | invite(点播)/ playback(回放)/ cascade(级联被点播)/ record(计划录制,独占会话不进点播复用池) |
| 流会话 | sessionStatus | WAITING / RUNNING / CLOSE_PENDING / CLOSED / EXPIRED |
| 录像下载 | taskStatus | PENDING / RECORDING / DONE / FAILED |
| 录像归档 | archiveStatus | RECORDING / DONE / FAILED |
| 订阅 | subscribeType / subStatus | CATALOG/ALARM/POSITION · ACTIVE/EXPIRED/FAILED |
| 分组 | groupType | CIVIL(行政区划)/ BUSINESS(业务分组) |
| 级联 | cascadeStatus | REGISTERED / UNREGISTERED / FAILED |
| 平台 | registerMode | AUTO(自动接入)/ MANUAL(手动注册白名单) |
| 媒体节点 | enabled / online | 启用开关(选节点准入)/ 心跳在线(派生展示) |
| 抓图 | triggerType | MANUAL / AUTO / ALARM |
