GB/T28181 开源日记[8]:国标开发速知速会

介绍

go wvp 是 Go 语言实现的开源 GB28181 解决方案,基于GB28181-2022标准实现的网络视频平台,支持 rtmp/rtsp,客户端支持网页版本和安卓 App。支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。

技术栈

Golang v1.23, Goweb v1.x, Gin v1.10, Gorm v1.25 …

React 19, Vite 6.x, Typescript, React-Router v7, React-Query v5, shadcn/ui …

国标开发速知速会

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

注册的源代码都在这里,没有太多好说的,姊妹篇是 [GB28181 七种注册姿势]。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值