当前位置: 首页 > article >正文

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

  • 服务端源代码 github.com/gowvp/gb28181

  • 前端源代码 github.com/gowvp/gb28181_web

介绍

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 HeaderVia: SIP/2.0/TCP 192.168.10.9:41607;rport;branch=z9hG4bK67a61cd2From: <sip:34020000001110000005@3402000000>;tag=7bebef2fTo: <sip:34020000001110000005@3402000000>Contact: <sip:34020000001110000005@192.168.10.9:41607>Call-ID: 41F04E9D7137EFA1@192.168.10.9CSeq: 1 REGISTERMax-Forwards: 70Expires: 360X-GB-Ver: 3.0Content-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 ?

相关文章:

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

服务端源代码 github.com/gowvp/gb28181 前端源代码 github.com/gowvp/gb28181_web 介绍 go wvp 是 Go 语言实现的开源 GB28181 解决方案&#xff0c;基于GB28181-2022标准实现的网络视频平台&#xff0c;支持 rtmp/rtsp&#xff0c;客户端支持网页版本和安卓 App。支持rts…...

6 maven工具的使用、maven项目中使用日志

文章目录 前言一、maven&#xff1a;一款管理和构建java项目的工具1 基本概念2 maven的安装与配置&#xff08;1&#xff09;maven的安装&#xff08;2&#xff09;IDEA集成Maven配置当前项目工程设置 maven全局设置 &#xff08;3&#xff09;创建一个maven项目 3 pom.xml文件…...

js滚动到页面最底部

setTimeout(()> { //延后执行&#xff0c;等页面渲染结束let container document.querySelector(.raise-flag-content); //找到当前divif (container) {container.scrollTop container.scrollHeight - (container.clientHeight - 400 );}})container.scrollTop container…...

Node.js包管理工具npm

目录 什么是 npm npm 主要功能 安装配置 npm 环境 package.json 版本范围规则 使用 npm npm 版本和帮助命令 npm 包相关命令 安装包 卸载包 升级第三方包 升级自己开发的包 查看已安装的包 清除缓存和修复 package.json 相关 运行命令脚本 全局配置 npm 包发布…...

基本数据结构--平衡二叉搜索树之红黑树示例代码

红黑树的规则。红黑树的每个节点有颜色&#xff08;红或黑&#xff09;&#xff0c;满足以下性质&#xff1a; 每个节点是红或黑。根节点是黑的。叶子节点&#xff08;NIL节点&#xff09;是黑的。红节点的子节点必须是黑的。从任一节点到其所有后代叶子节点的路径包含相同数量…...

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览&#xff1a; 国家标准|GB/T 43698-2024 相关标准&#xff1a; &a…...

Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项

1. map(function, iterable, ...) 功能&#xff1a;对可迭代对象中的每个元素应用指定函数&#xff0c;返回一个迭代器。 参数&#xff1a; function&#xff1a;要执行的函数&#xff08;可以是lambda表达式&#xff09;。 iterable&#xff1a;一个或多个可迭代对象&#x…...

CF 278A.Circle Line

题目分析 输入n个数据作为路径&#xff0c;求从a到b的最短距离&#xff0c;需要将其相成一个圆圈&#xff0c;既可以从小往大走又可以从大往小走 思路分析 依然将数据存为数组&#xff0c;通过下标进行操作&#xff0c;既然说了有两种方式那就计算两种方式哪个更快就输出谁 代…...

DeepSeek模型构建与训练

在完成数据预处理之后,下一步就是构建和训练深度学习模型。DeepSeek提供了简洁而强大的API,使得模型构建和训练变得非常直观。无论是简单的全连接网络,还是复杂的卷积神经网络(CNN)或循环神经网络(RNN),DeepSeek都能轻松应对。本文将带你一步步构建一个深度学习模型,并…...

本地部署deepseek简单教程

部署deepseek&#xff0c;首先需要知道deepseek官网地址&#xff1a;DeepSeek 第一步&#xff1a;Ollama 去ollama下载对应的版本&#xff0c;我的电脑是window 在这里可以看到关于deepseek相关 第二步&#xff0c;下载完ollama无脑下一步就可以 这样属于安装成功 第三步&…...

3.1 可视化算子编程语言

HuggingFists的VO编程语言与常见的其它编程语言有一定的区别。其语言由两种不同的语法特征构成。一部分以可视化算子作为语法基础(简称&#xff1a;VO-O)&#xff0c;辅助使用者可视化的完成数据处理/分析流程的编写&#xff1b;一部分采用表达式语法(简称&#xff1a;VO-E)&am…...

UnityShader学习笔记——多种光源

——内容源自唐老狮的shader课程 目录 1.光源类型 2.判断光源类型 2.1.在哪判断 2.2.如何判断 3.光照衰减 3.1.基本概念 3.2.unity中的光照衰减 3.3.光源空间变换矩阵 4.点光源衰减计算 5.聚光灯衰减计算 5.1.聚光灯的cookie&#xff08;灯光遮罩&#xff09; 5.2.聚…...

电脑右下角小喇叭没反应怎么回事,快速解决方案

当电脑右下角的小喇叭&#xff08;音量图标&#xff09;没有反应时&#xff0c;可以尝试以下快速解决方案&#xff1a; 一、基础检查与操作 检查键盘音量键&#xff1a; 按下键盘上的音量增加或减少键&#xff0c;或尝试Fn音量键&#xff08;部分笔记本需组合键&#xff09;&a…...

chrome-base 如何实现一个BindOnce

考虑一个问题&#xff1a; worker_thread.task_runner()->PostDelayedTask(FROM_HERE, base::BindOnce(&Ref::Foo, ref, 1), base::Milliseconds(1000)); BindOnce 是如何实现的呢&#xff1f; 翻看源码&#xff1a;base\functional\bind.h 写的 非常简洁 // Bind a…...

HTML学习之CSS三种引入方式

HTML学习之CSS三种引入方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…...

Mysql基于binlog主从同步配置

主配置&#xff1a; 修改配置文件&#xff1a;/etc/my.cnf 添加server-id1 重启MySQL服务&#xff1a;systemctl restart mysqld 创建用户并授权&#xff1a; mysql> create user rep192.168.79.% identified with mysql_native_password by 123456; Query OK, 0 rows aff…...

Docker Desktop安装到其他盘

Docker Desktop 默认安装到c盘&#xff0c;占用空间太大了&#xff0c;想给安装到其他盘&#xff0c;网上找了半天的都不对 正确安装命令&#xff1a; start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…...

NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理

网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…...

ubuntu 本地部署deepseek r1 蒸馏模型

本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署&#xff1a;基于docker安装&#xff0c;且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离线操作。它支持各种 LLM…...

go语言中的反射

为什么会引入反射 有时我们需要写一个函数&#xff0c;这个函数有能力统一处理各种值类型&#xff0c;而这些类型可能无法共享同一个接口&#xff0c;也可能布局未知&#xff0c;也有可能这个类型在我们设计函数时还不存在&#xff0c;这个时候我们就可以用到反射。 空接口可…...

旅行社项目展示微信小程序功能模块和开发流程

旅行社当前旅游线路的程序(微信小程序),旨在帮助旅行社更高效地管理线下活动预订,同时为客户提供便捷的报名和查看功能。适用于短途游、团队建设等活动,支持在线预订、缴费及订单管理,可根据用户需求定制更多个性化服务,为公司提升品牌知名度与客户体验。通过简洁明了的…...

JUC学习笔记02

文章目录 JUC笔记2练习题&#xff1a;手写线程池代码解释&#xff1a;AdvancedThreadPool 类&#xff1a;WorkerThread 内部类&#xff1a;AdvancedThreadPoolExample 类&#xff1a; 线程池的思考CPU密集型IO密集型 练习题&#xff1a;手写自动重试机练习题&#xff1a;手写定…...

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…...

python编程-类结构,lambda语法,原始字符串

一个类的基本结构包括以下部分&#xff1a; 类名&#xff1a;用来描述具有相同属性和方法的对象的集合。 属性&#xff1a;类变量或实例变量&#xff0c;用于处理类及其实例对象的相关数据。 方法&#xff1a;在类中定义的函数&#xff0c;用于执行特定操作。 构造器&#xff…...

C++:代码常见规范1

头文件包含 (1)先系统头文件&#xff0c;后用户头文件&#xff1a;这是一个良好的编程习惯。系统头文件通常包含标准库的定义&#xff0c;而用户头文件则包含项目特定的定义。将系统头文件放在前面可以避免因用户头文件中的定义与系统头文件冲突而导致的问题。 #include <…...

C++(进阶五)--STL--用一颗红黑树封装map和set

目录 1.红黑树源码&#xff08;简略版&#xff09; 2.模板参数的控制 3.红黑树的结点 4.迭代器的实现 正向迭代器 反向迭代器 5.set的模拟实现 6.map的模拟实现 7.封装完成后的代码 RBTree.h mymap.h myset.h 1.红黑树源码&#xff08;简略版&#xff09; 下面我们…...

DeepSeek服务器繁忙问题的原因分析与解决方案

一、引言 随着人工智能技术的飞速发展&#xff0c;DeepSeek 等语言模型在众多领域得到了广泛应用。然而&#xff0c;在春节这段时间的使用过程中&#xff0c;用户常常遭遇服务器繁忙的问题&#xff0c;这不仅影响了用户的使用体验&#xff0c;也在一定程度上限制了模型的推广和…...

《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?

数字化转型助力永磁电机企业降本增效&#xff1a;快速设计软件如何让研发效率提升40%&#xff1f; 一、痛点&#xff1a;传统研发模式正在吃掉企业的利润 永磁电机行业面临两大挑战&#xff1a; 研发周期长&#xff1a;一款新电机从设计到量产需6-12个月&#xff0c;电磁计算…...

飞算JavaAI :AI + 时代下的行业趋势引领者与推动者

在科技飞速发展的当下&#xff0c;AI 时代正以前所未有的速度重塑着各个行业的格局&#xff0c;而软件开发领域更是这场变革的前沿阵地。在众多创新力量之中&#xff0c;飞算JavaAI 脱颖而出&#xff0c;宛如一颗璀璨的新星&#xff0c;凭借其独树一帜的特性与强大功能&#x…...

【重新认识C语言----结构体篇】

目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体&#xff1f; 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…...