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 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 ?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965851.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 **一、**自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突&#xff0c;从而造成phpstudy中的数据库无法启动&#xff0c;这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#…

grafana面板配置opentsdb

新增面板&#xff1a; 这里add-panel: 如果不是想新增面板而是想新增一行条目&#xff0c;则点击convert to row: 在新增的面板这里可以看到选择数据源 Aggregator&#xff1a;聚合条件&#xff0c;区分下第一行和第二行的aggregator&#xff0c;第一个是对指标值的聚合&…

论文翻译学习:《DeepSeek-R1: 通过强化学习激励大型语言模型的推理能力》

摘要 我们介绍了我们的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;没有经过监督微调&#xff08;SFT&#xff09;作为初步步骤&#xff0c;展示了卓越的推理能力。通过强化…

【Uniapp-Vue3】从uniCloud中获取数据

需要先获取数据库对象&#xff1a; let db uniCloud.database(); 获取数据库中数据的方法&#xff1a; db.collection("数据表名称").get(); 所以就可以得到下面的这个模板&#xff1a; let 函数名 async () > { let res await db.collection("数据表名称…

【自然语言处理】TextRank 算法提取关键词(Python实现)

文章目录 前言PageRank 实现TextRank 简单版源码实现jieba工具包实现TextRank 前言 TextRank 算法是一种基于图的排序算法&#xff0c;主要用于文本处理中的关键词提取和文本摘要。它基于图中节点之间的关系来评估节点的重要性&#xff0c;类似于 Google 的 PageRank 算法。Tex…

免费windows pdf编辑工具

Epdf&#xff08;完全免费&#xff09; 作者&#xff1a;不染心 时间&#xff1a;2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器&#xff0c;目前仍在开发中。它提供了一系列实用的命令行选项&#xff0c;方便用户对 PDF …

星闪开发入门级教程之安装编译器与小项目烧录

系列文章目录 星闪开发入门级教程 好久不见&#xff0c;已经好几年没有发文章了&#xff0c;星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手&#xff0c;绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException解决办法

1.问题描述 在编写完一个功能后,第一次启动这个模块的启动类时,报以下错误, 2.文件解决 检查了controller,service和mapper,均未发现有问题,核对了依赖也未发现依赖冲突 在网上也找了资料,有总结的比较好的: controller层service层dao层注解是否都使用正确&#xff1f;接口…

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

信创数据库使用问题汇总

笔者工作中需要使用多种信创数据库&#xff0c;在使用过程中发现一些问题&#xff0c;现记录如下。 1 OceanBase-Oracle租户的Python连接方式 用Python连接OB数据库的mysql租户可以使用连接mysql的包&#xff0c;但连接oracle租户是没有官方包的&#xff0c;必须使用基于jdbc…

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头&#xff0c;这是一款150万像素的多光谱摄像头。 相较于普通摄像头&#xff0c;它具有以下优势&#xff1a; 色彩还原度高&#xff1a;色彩还原准确度提升约 120%&#xff0c;能捕捉更多光谱信息&#xff0c;使拍摄照片色…

Web3 与区块链:开启透明、安全的网络新时代

在这个信息爆炸的时代&#xff0c;我们对网络的透明性、安全性和隐私保护的需求日益增长。Web3&#xff0c;作为新一代互联网的代表&#xff0c;正携手区块链技术&#xff0c;引领我们走向一个更加透明、安全和去中心化的网络世界。本文将深入探讨 Web3 的基本概念、区块链技术…

[Android] 全球网测-版本号4.3.8

[Android] 全球网测 链接&#xff1a;https://pan.xunlei.com/s/VOIV5G3_UOFWnGuMQ_GlIW2OA1?pwdfrpe# 应用介绍 "全球网测"是由中国信通院产业与规划研究所自主研发的一款拥有宽带测速、上网体验和网络诊断等功能的综合测速软件。APP突出六大亮点优势&#xff1a…

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架&#xff0c;正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…

windows 安装nvidaia驱动和cuda

安装nvidaia驱动和cuda 官网搜索下载驱动 https://www.nvidia.cn/drivers/lookup/ 这里查出来的都是最高支持什么版本的cuda 安装时候都默认精简就行 官网下载所需版本的cuda包 https://developer.nvidia.com/cuda-toolkit-archive 安装成功但是nvcc -V 失败 &#xff0c…

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO&#xff08;通用输入输出引脚&#xff09; 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断&#xff08;EXTI&#xff09; 深入中断&#xff08;内部机制及原理&#xff09; 外部中断/事件控…

动态规划(01背包问题)

目录 题目内容题目分析未装满情况思路一思路二代码实现滚动数组优化优化代码 恰好装满情况代码实现滚动数组优化 题目内容 你有一个背包&#xff0c;最多能容纳的体积是V。 现在有n个物品&#xff0c;第i个物品的体积为Vi​,价值为Wi &#xff08;1&#xff09;求这个背包至多能…

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的中序遍历) 本题的难点在于可能存在多个答案&#xff0c;并且要返回最小的那一个&#xff0c;为了解决这个问题&#xff0c;我门则要利用上二叉搜索树中序遍历为有序序列的特性&#xff0c;具体到代码中&a…

高效协同,Tita 助力项目管理场景革新

在当今快节奏、高度竞争的商业环境中&#xff0c;企业面临着前所未有的挑战&#xff1a;如何在有限资源下迅速响应市场变化&#xff0c;确保多个项目的高效执行并达成战略目标&#xff1f;答案就在于优化项目集程管理。而在这个过程中&#xff0c;Tita项目管理产品以其独特的优…

Java使用aspose实现pdf转word

Java使用aspose实现pdf转word 一、下载aspose-pdf-21.6.jar包【下载地址】&#xff0c;存放目录结构如图&#xff1b;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…