GB28181系列一:GB28181协议介绍

        我的音视频/流媒体开源项目(github)

        GB28181系列目录

目录

一、GB28181协议介绍

二、GB28181交互流程

1、注册

2、观看视频

3、控制

4、SDP

5、媒体保活:

6、RTP

7、SIP URL


一、GB28181协议介绍

        GB28181使用SIP协议,SIP协议参考我的SIP系列:SIP系列目录

        GB28181 即 GB/T28181《公共安全视频监控联网系统信息传输、交换、控制技术要求》。它是公安部提出的公共安全行业标准,用于监控视频监控设备之间的通信和互联,特别是对于监控摄像头、视频服务器、视频管理平台等设备之间的数据流和控制命令。它为视频监控系统提供了一种标准化的协议,可以确保不同厂家和型号的设备在同一系统中能够相互兼容和通信。

        GB28181使用SIP作为通信协议,并在 SIP 协议的基础之上做了些私有化处理,主要扩展了MESSAGE和INFO等方法;使用RTP协议传输音视频。

        功能特点如下:
        设备注册:设备进入联网系统时需向 SIP 服务器进行注册登记,注册信息包括设备的国标 ID、域国标 ID、IP 地址、端口号等,以便系统对设备进行识别和管理。
        设备信息获取:可以获取设备的相关信息,如设备类型、设备型号、设备状态等,还能够拉取与设备关联的摄像头信息,对于像 NVR 设备这种可能连接多个摄像头的情况,可方便地获取其下属摄像头的信息。
        实时视音频传输:支持实时拉取设备当前的视频数据,以便用户实时查看监控画面。
        设备控制:可向设备发送控制信息,例如对球机进行云台控制,实现摄像头的转动、变焦等操作。
        历史视音频查询与回放:能够查询设备的历史视频记录,包括查看哪些时间段有视频、文件大小等信息,并可以拉取指定时间段的视频进行回放和下载。

        版本发布情况如下:

        GB/T 28181-2022        现行
        GB/T 28181-2016        废止
        GB/T 28181-2011        废止

        GB28181可以让不同监控平台级联到一起并形成上下级关系,如下图所示:

        每个监控平台管理自己区域的摄像头,并且可以和其他监控平台通过GB28181协议对接。

        GB28181协议的上下级关系主要通过设备的SIP注册机制来实现,通常由平台和终端设备(如摄像头、视频服务器等)构成。

        平台:在GB28181中,平台通常是指视频监控管理系统或视频监控中心,它是终端设备的上级,负责统一的管理、调度和数据收集。平台可以同时管理多个终端设备,向其发送控制指令(如启动视频流、云台控制、录像等)。

        终端设备:终端设备是指具体的监控设备,如摄像头、视频服务器、传感器等。它们作为下级设备,向平台注册,接收来自平台的控制指令,并返回音视频数据。

        平台级联:监控平台A可以向监控平台B注册形成级联关系,注册完A就是B的下级。

        如下图所示:

        GB28181具体功能如下:

•注册类:注册,注销,校时,心跳
•点播类:实时点播,历史点播,回放控制(快进,快退,跳转,暂停,停止),录像下载
•控制类:云台,远程重启,强制关键帧,电子放大/缩小,手动录像,布防/撤防,参数配置等
•查询类:目录,录像文件,设备信息,设备状态,预置位,设备参数
•订阅通知:目录,报警

二、GB28181交互流程

        GB28181标准网址:国家标准全文阅读|标准检索

1、注册

        设备上线之后首先向监控平台注册,注册流程如下:

        

2、观看视频

        之后监控平台可以向IPC发起会话,观看视频,如下图所示:

3、控制

        GB28181使用MESSAGE+xml的方式传输控制指令,控制分有应答和无应答两种流程。

        无应答命令流程:

        有应答命令流程:

        控制命令采用MANSCDP格式,消息体使用XML格式封装,GB28181中除了MANSCDP格式的控制命令,还有MANSRTSP格式的媒体控制命令。两者区别为:MANSCDP是控制描述协议,采用SIP Message消息体携带,负责设备控制、报警控制等命令;MANSRTSP是媒体回放控制协议,采用SIP INFO消息体携带,负责回放控制命令。关于Message和INFO的区分:Message不需要建立会话即可发送;INFO必须通过INVITE发起会话之后并且在会话期间才能发送。MANSCDP定义在官方文档的附录A中,MANSRTSP定义在附录B中。

        MANSCDP:MESSAGE消息头的Content-type定义为Content-type:Application/MANSCDP+xml;payload为xml封装的MANSCDP格式消息,是GB28181自定义的。

        MANSRTSP:INFO消息头的Content-type定义为Content-type:Application/MANSRTSP;payload为RTSP控制消息,即标准的RTSP信令。

        如下所示,为设备查询和目录查询命令流程:

4、SDP

        SDP在文档中的附录G中中说明,如下图所示:

        s字段:标识请求媒体流的操作类型,“Play"代表实时点播;“Playback”"代表历史回放;“Download”代表文件下载。

        m字段:“RTP/AVP”标识传输层协议为 RTP over UDP,采用“TCP/RTP/AVP”标识传输层协议为 RTP over TCP。

        y字段:为十进制整数字符串,表示SSRC值。格式如下:dddddddddd。其中,第1位为历史或实时媒体流的标识位,0为实时,1为历史;第2位至第6位取20位SIP监控域ID中的4到8位作为域标识,例如“13010000002000000001”中取数字“10000”;第7位至第10位作为域内媒体流标识,是一个与当前域内产生的媒体流SSRC值后4位不重复的四位十进制整数,即随机数。SSRC是由SIP监控域产生的,并作为RTP中的ssrc值,关于SIP监控域ID的定义参考附录E。如下图所示为SSRC的交换示意图:

        1、点播域内的设备:

        2、点播域外的监控平台:

        f字段:f=v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率。各项
具体含义可参考官方文档。只有视频的时候f=v/编码格式/分辨率/帧率/码率类型/码率大小a///;只有音频的时候f=v/(这里有5个/)a/编码格式/码率大小/采样率。注意。之间是没有空格的。

        a=setup:TCP连接方式(表示本SDP发送者在RTP over TCP连接建立时是主动还是被动发起 TCP连接,“active”为主动,“passive”为被动)。

        a=connection:new(表示采用RTP over TCP 传输时新建或重用原来的TCP连接,可固定采用新建TCP连接的方式)。

5、媒体保活:

        媒体保活机制定义在附录K和L中,注册成功后,根据设备端配置的保活时间(通常30秒到3分钟),设备周期性发送状态报送消息给平台。

6、RTP

        GB28181使用RTP传输音视频,有两种方式:UDP、TCP。UDP和RTSP中的没有区别,但是TCP有区别。

        目前RTSP有两个版本1.0和2.0,1.0定义在RFC2326中,2.0定义在RFC7826。2.0是2016年由IETF发布的RTSP新标准,不过现在基本使用的都是RTSP1.0,就算有使用2.0的,也会兼容1.0。而GB28181则使用RFC4571中定义的RTP,这里面RTP over TCP方式和以往的不同。

        RFC2326中RTP over TCP的数据包是这样的:

| magic number | channel number | data length | data  |magic number - 

magic number:   RTP数据标识符,"$" 一个字节
channel number: 信道数字 - 1个字节,用来指示信道
data length :   数据长度 - 2个字节,用来指示插入数据长度
data :          数据 - ,比如说RTP包,总长度与上面的数据长度相同

        而RFC4571中的RTP over TCP的数据包确是这样的:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    ---------------------------------------------------------------
   |             LENGTH            |  RTP or RTCP packet ...       |
    ---------------------------------------------------------------

        RFC2326中用channel number标识消息类型,因为RTSP中信令和和音视频都是通过同一个TCP通道传输,所以必须通过channel number区分。而GB28181中信令和媒体数据是不同的传输通道,所以不用去区分。

        RFC4571标准格式:长度(2字节) + RTP头 + 数据

        RFC2326标准格式:$(1字节) + 通道号(1字节) + 长度(2字节) + RTP头 + 数据

7、SIP URL

        GB28181中SIP URL格式为sip:<SIP监控域ID>@<ip>:<port>,SIP监控域ID有20位。

        SIP监控域ID由中心编码(8位)、行业编码(2位)、类型编码(3位)、网络标识(1位)和序号(6位)5个码段共20位十进制数字字符构成,即系统编码 = 中心编码 + 行业编码 + 类型编码 + 网络标识 +序号。具体定义可参考附录E。

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

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

相关文章

算法-字符串-3.无重复字符的最长子串

一、思路&#xff1a; 无重复针对唯一的元素首选哈希表方法 在字符串中找出最长字串——动态数组 二、使用的一些常见方法 1.HashMap a.声明 HashMap<Character,Integer> mapnew HashMap(); b.添加元素 map.put(s.charAt(i),i); c.查询是否有对应的元素存在并获取 m…

Windows Terminal ssh到linux

1. windows store安装 Windows Terminal 2. 打开json文件配置 {"$help": "https://aka.ms/terminal-documentation","$schema": "https://aka.ms/terminal-profiles-schema","actions": [{"command": {"ac…

海外的bug-hunters,不一样的403bypass

一种绕过403的新技术&#xff0c;跟大家分享一下。研究HTTP协议已经有一段时间了。发现HTTP协议的1.0版本可以绕过403。于是开始对lyncdiscover.microsoft.com域做FUZZ并且发现了几个403Forbidden的文件。 &#xff08;访问fsip.svc为403&#xff09; 在经过尝试后&#xff0…

OLLAMA+FASTGPT+M3E 大模型本地化部署手记

目录 1.安装ollama 0.5.1 2.下载大模型 qwen2.5 3b 3.开启WSL 4.更新wsl 5.安装ubuntu 6.docker下载 6.1 修改docker镜像源 6.2 开启WSL integration 7.安装fastgpt 7.1 创建fastgpt文件夹 7.2 下载fastgpt配置文件 8.启动容器 9.M3E下载 9.1 下载运行命令 9.2…

Android 10、11、12存储适配相关

AndroidQ(10)分区存储完美适配 - 简书前言 最近时间在做AndroidQ的适配&#xff0c;截止到今天AndroidQ分区存储适配完成&#xff0c;期间出现很多坑&#xff0c;目前网上的帖子大部分都是概述变更内容&#xff0c;接下来的几篇帖子都是对分区存储实际...https://www.jianshu.c…

Nanolog起步笔记-8-log解压过程(2)寻找meta

TOC 写在前面 如前。建立工程进行跟踪后&#xff0c;发现自己对Nanolog的理解还是太少了。 其过程&#xff0c;还是相对比较复杂。 以及有一些信息&#xff0c;这前的分析中&#xff0c;没有注意到。 本节&#xff0c;不向前推进&#xff0c;进行一定的总结与学习的准备。 另…

Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…

算法1(蓝桥杯18)-删除链表的倒数第 N 个节点

问题&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个节点&#xff0c;并且返回链表的头节点。 输入&#xff1a;head 1 -> 2 -> 3 -> 4 -> 5 -> null, n 2 输出&#xff1a;1 -> 2 -> 3 -> 5 -> null输入&#xff1a;head 1 ->…

H5接入Steam 获取用户数据案例 使用 OpenID 登录绑定公司APP账户 steam公开用户信息获取 steam webapi文档使用

官方文档地址 1.注册 Steam API Key&#xff1a; 你需要一个 Steam Web API Key&#xff0c;可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 这里开发做demo用自己steam账户的就好&#xff0c;后续上线要用公司的账户 2.使用 OpenID 登录&#xff…

TCP的“可靠性”(上)

目录 TCP的“可靠性”&#xff08;上&#xff09;确认应答&#xff08;可靠性传输的基础&#xff09;超时重传连接管理&#xff08;三次握手&#xff0c;四次挥手&#xff09; TCP的“可靠性”&#xff08;上&#xff09; 想必大家都或多或少的听说过TCP的特性&#xff1a;有连…

九、页面级变量的状态管理

状态管理概述 在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染,在ArkUI中统称为状态管理机制。 自定义组件拥有变量,变…

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全&#xff0c;再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全&#xff0c;导致效率很低&#xff0c;后面发现是没有安装扩展&#xff0c;注意扩展和工具的区别。 解决…

责任链模式的理解和实践

责任链模式&#xff08;Chain of Responsibility&#xff09;是行为型设计模式之一&#xff0c;它通过将多个对象连成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有对象处理它为止。这个模式的主要目的是将请求的发送者和接收者解耦&#xff0c;使请求沿着处理链传…

软件工程——期末复习(3)

一、题目类(老师重点提到过的题目) 1、高可靠性是否意味着高可用性&#xff1f;试举例证明自己的观点&#xff1f; 答&#xff1a;高可靠性不意味着高可用性 可靠性说明系统已经准备好&#xff0c;马上可以使用&#xff1b;可用性是系统可以无故障的持续运行&#xff0c;是一…

SList(单链表)

文章目录 一&#xff1a;线性表二&#xff1a;数组2.1数组在内存中的存储 三&#xff1a;链式结构四&#xff1a;单链表4.1概念与结构4.1.1概念4.1.2 结构&#xff08;节点&#xff09;4.1.3链表的性质4.1.4链表的打印 4.2实现单链表 结语 欢迎大家来到我的博客&#xff0c;给生…

VTK知识学习(21)- 数据的读写

1、前言 对于应用程序而言&#xff0c;都需要处理特定的数据&#xff0c;VTK应用程序也不例外。 VTK应用程序所需的数据可以通过两种途径获取: 第一种是生成模型&#xff0c;然后处理这些模型数据(如由类 vtkCylinderSource 生成的多边形数据); 第二种是从外部存储介质里导…

Nignx部署Java服务测试使用的Spring Boot项目Demo

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

虚幻引擎生存建造系统

先做一个建造预览模式&#xff0c;按下按键B后进入建造预览模式 首先创建自定义事件Preview Loop 用射线追踪摆放物体预览位置&#xff0c;并做一个预览材质 增强输入设置按键 每帧判断是否进入建造模式 预览模式制作成功&#xff01; 接着做点击左键放置物品&#xff0…

Blender中使用BlenderGIS插件快速生成城市建筑模型

导入下载 BlenderGIS 插件 去github上下载其压缩包&#xff0c;地址如下&#xff1a; https://github.com/domlysz/BlenderGIS 在BlenderGIS中导入这个插件压缩包&#xff1a; 点击上方菜单栏的编辑&#xff0c;点击偏好设置 在插件>从磁盘安装中导入刚刚下载的压缩包 可…