GB T28181 开源日记[8]:国标开发速知速会
ixugo. edited this page 2025-02-10 10:06:58 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

国标开发速知速会

GB/T 28181 是我国在安防视频监控领域的一项重要国家标准。

标准定义

GB/T 28181 全称为《安全防范视频监控联网系统信息传输、交换、控制技术要求》。它规定了安全防范视频监控联网系统中信息传输、交换、控制的互联结构、通信协议结构,以及传输、交换、控制的基本要求和安全性要求,明确了控制、传输流程和协议接口等技术要求,目的是规范视频监控联网系统,实现不同厂商设备和系统的互联互通与互操作。

发展历程

  • 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平台服务器、平台客户端等安防产品的建设部署提供了基础标准。
  • 2016 年:第一次修订,推出 GB/T 28181-2016 版本,进一步细化和完善了视频监控设备之间的通信协议规范。
  • 2022 年:第二次修订,推出 GB/T 28181-2022 版本,于2023年7月1日实施,用于替代 GB/T 28181 - 2016 版本。此版本最新,相关实现的摄像机/NVR 等也较少。

Go WVP 基于最新标准 GB/T 28181 - 2022 开发,以为简称 GB28181。

一个最简单的监控域长这样,采集设备通过 SIP 信令注册到 GB28181 平台,

image-20250207223516313

SIP 全称是 Session Initiation Protocol (会话初始协议),是一种应用层的信令控制协议。

SIP 协议由 IETF(互联网工程任务组)制定,用于创建、修改和终止多媒体会话,如语音通话、视频会议、即时消息等。它借鉴了 HTTP 和 SMTP 等协议的设计理念,具有文本格式、简单灵活等特点。

在 IP 电话、视频会议系统、即时通讯软件、在线游戏等多种实时通信应用中广泛应用。

在 GB/T 28181 标准中,SIP 协议被用作信令控制的基础协议,用于实现视频监控联网系统中设备之间的注册、会话建立、控制命令传输等功能。通过对 SIP 协议进行定制和扩展,GB/T 28181 规定了符合安防视频监控领域需求的信令流程和消息格式,使得不同厂商的视频监控设备能够基于 SIP 协议进行标准化的通信和互操作。

SIP 协议中的请求消息由请求行、消息头字段、消息体(可选)三部分组成,每部分都有特定的格式和功能。

SIP 报文

以为是 GB28181 注册的报文。

REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Message Header
    Via: SIP/2.0/TCP 192.168.10.9:41607;rport;branch=z9hG4bK67a61cd2
    From: <sip:34020000001110000005@3402000000>;tag=7bebef2f
    To: <sip:34020000001110000005@3402000000>
    Contact: <sip:34020000001110000005@192.168.10.9:41607>
    Call-ID: 41F04E9D7137EFA1@192.168.10.9
    CSeq: 1 REGISTER
    Max-Forwards: 70
    Expires: 360
    X-GB-Ver: 3.0
    Content-Length: 0

请求行

REGISTER sip:34020000002000000001@3402000000 SIP/2.0

用于标识请求的类型,格式为 <请求方法> <请求 URI> <SIP 版本>。

  • 请求方法:在 HTTP 协议中 Request Method 有 POST, GETDELETE , PUT 等等,而 GB28181 中常用的是 REGISTERINVITEACKMESSAGEINFONOTIFY 等等。
  • 请求 URI:指定请求的目标地址。
  • SIP 版本:一般为SIP/2.0,表示使用的 SIP 协议版本。

消息头

通用头字段

  • Via: 用于记录请求消息经过的路径,包含发送方的地址和端口等信息,例如 Via: SIP/2.0/TCP 192.168.10.9:41607;rport;branch=z9hG4bK67a61cd2
  • Max-Forwards:指定请求消息在被丢弃之前可以经过的最大跳数,每经过一个服务器,该值减 1。如:Max-Forwards: 70

请求头字段

  • From:标识请求的发起者,包含发起方的 SIP 地址和显示名称等信息。例如:<sip:34020000001110000005@3402000000>;tag=7bebef2f,其中tag用于标识本次请求的唯一性。
  • To:指定请求的接收者,包含接收方的 SIP 地址和显示名称等。如:To: <sip:34020000001110000005@3402000000>
  • Contact:用于告知接收方,期望接收响应的地址和端口等信息。例如:Contact: <sip:34020000001110000005@192.168.10.9:41607>
  • Call-ID:用于标识一个呼叫会话,在整个会话过程中,所有与该会话相关的请求和响应消息都具有相同的Call-ID。例如:Call-ID: 41F04E9D7137EFA1@192.168.10.9
  • CSeq:用于标识请求的顺序和类型,由一个序列号和请求方法组成。如:CSeq: 1 REGISTER,表示这是一个 REGISTER 请求,序列号为 1。
  • User-Agent: 用于标识身份,例如 GoWVP v0.0.1 标识这个开源项目的 v0.0.1 版本。

消息体头字段

  • Content-Type:指示消息体的媒体类型,如Content-Type: application/sdp表示消息体包含 SDP(会话描述协议)信息。
  • Content-Length:表示消息体的长度,以字节为单位。例如:Content-Length: 0 表示没有消息体。

GB28181 头字段

  • Expires: 用于表示注册的过期时间,0 表示注销,>0 表示多少秒以内有效,例如 Expires: 360 表示从注册时间开始 360 秒以内有效。
  • X-GB-Ver: 用于标识 GB28181 实现的协议版本,是 2022 版本中新增的参数,X-GB-Ver: 3.0 表示 GB/T 28181-2022,在 GoWVP 开发中,我们需要借助此标识,支持 2022 的设备更多功能,如果是旧版本不支持 2022 的特性给出对应错误提示。

消息体

根据 Content-Type 的定义,可能是 xmlsdpmanscdp 等等,根据实际报文解析出内容即可。

国标注册

  1. 注册和注销应进行认证,认证方式应支持 Digest (数字摘要认证),高安全级别的宜支持数字证书的认证方式。
  2. 注册成功后,在注册过期时间到来之前,应刷新注册,刷新注册流程与首次注册流程一致。
  3. 注册失败后,应间隔一定时间后继续发起注册,gowvp 的国标级联设计是间隔 10s。
  4. 注册与上一次注册时间间隔应可调,一般情况不应短于 60s,知名摄像头的设计都是间隔默认 1 小时,即 3600s,可提前 10 秒发出消息,避免对端超时过期。
  5. 注册成功则认为在线状态,注册失败或注册时间过期则认为离线状态。
  6. 对于开启网络地址转换 (NAT) 功能的路由器内测的 SIP 代理,宜支持 TCP 发送 sip 注册,注册成功后,保持长连接,信令部分依然按照上面的要求,多一条 tcp 通道断开则认为离线。

image-20250207231437334

注册的[源代码都在这里](https://github.com/gowvp/gb28181/blob/main/pkg/gbs/register.go#L58),没有太多好说的,姊妹篇是 [GB28181 七种注册姿势]。

有兴趣的话可以打开 github 看看源代码,再顺手点个 star ?