📡 GB/T 28181 信令交互全链路
MzMedia 基于 JAIN-SIP (NIST) 协议栈实现国标 SIP 信令服务端,支持 UDP 与 TCP 双栈传输。
1. 注册与 Digest 摘要鉴权
text
摄像机 / NVR (Client) MzMedia SIP Server (5060)
│ │
│─────── 1. REGISTER (无认证信息) ─────────────────>│
│ │
│<────── 2. 401 Unauthorized (携带随机 nonce) ─────│
│ │
│─────── 3. REGISTER (携带 MD5 摘要 Response) ─────>│
│ │
│<────── 4. 200 OK (鉴权通过,刷新 Redis 会话) ─────│- 国标 ID 编码规范:国标统一采用 20 位十进制数字编码,前 10 位为行政区划与行业代码,第 11-13 位代表设备类型:
132:网络摄像机 (IPC)131:报警通道200:网络视频服务器 (NVR/DVR)
- 密码鉴权:系统使用 MD5 对
username:domain:password以及nonce进行加盐摘要校验。
2. 实时点播 (Invite) 与流媒体转发全链路
当 Web 客户端通过 Jessibuca 发起实时视频播放时,信令与媒体流的完整协作拓扑如下:
text
前端播放器 MzMedia 后端 ZLMediaKit IPC 摄像机
│ │ │ │
│── 1. 发起点播 ──────>│ │ │
│ │── 2. 申请 RTP 端口 ─>│ │
│ │<─ 3. 返回端口/SSRC ──│ │
│ │ │
│ │─────── 4. SIP INVITE (带 SDP) ──────────>│
│ │<────── 5. 200 OK (带设备 SDP) ───────────│
│ │─────── 6. ACK ──────────────────────────>│
│ │ │
│ │ │<── 7. 推送 RTP 流 ─│
│<── 8. WebRTC/FLV ───│─────────────────────│ │- 信令准备:后端向 ZLMediaKit 发起 REST Hook,动态开放单个 RTP 接收端口(如
30000)并生成专属 SSRC; - SDP 媒体协商:向摄像机发送
INVITE,携带 ZLMediaKit 的接收 IP、端口与媒体编码要求; - 推流与转封装:设备向该端口发送封装有 PS (Program Stream) 的 RTP 包,ZLMediaKit 实时解复用并转换为 WebRTC、WS-FLV、HLS 格式输出。
3. 心跳保活 (Keepalive)
- 摄像机根据配置的周期(默认 30~60 秒)发送 SIP
MESSAGE请求:xml<?xml version="1.0" encoding="GB2312"?> <Notify> <CmdType>Keepalive</CmdType> <SN>12345</SN> <DeviceID>34020000001320000001</DeviceID> <Status>OK</Status> </Notify> - 服务端解析后刷新
wvp_device中的keepalive_time并回送200 OK;超时未收到心跳将被标记为离线。
4. 设备通道目录检索 (Catalog)
- 平台主动下发
Catalog查询,支持大通道设备(如 64 路 NVR)分包拉取; - 接收到设备响应后,自动更新
wvp_device_channel物理通道与逻辑子通道拓扑。
