首页 > 其他分享 >GB28181国标平台资料整理

GB28181国标平台资料整理

时间:2023-05-24 11:57:02浏览次数:62  
标签:SIP 5060 GB28181 192.168 Content 国标 整理 2.0

介绍

GB28181协议指的是国家标准GB/T 28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》1,该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiation Protocol)协议2,流媒体传输层面使用的是实时传输协议(Real-time Transport Protocol,RTP)协议3,因此可以理解为GB28181是在国际通用标准的基础之上进行了私有化定制以满足视频监控联网系统互联传输的标准化需求。本文旨在说明在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。

GB28181协议会话通道实际上使用的是SIP协议,并且在SIP协议的基础之上做了些私有化处理。SIP是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。SIP中一个比较重要的概念是用户代理(User Agent),指的是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话。SIP用户代理又可分为用户代理客户端UAC(User Agent Client)和用户代理服务端UAS(User Agent Server)。UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应。SIP协议会与许多其它的协议协同工作,如SIP报文内容发送会话描述协议(Session Description Protocol,SDP)4,SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。SIP的一个典型用途是:SIP会话传输一些简单的经过报文的实时传输协议流,RTP本身才是语音或视频的载体。在GB28181协议中,联网系统在进行视音频传输及控制时应建立两个传输通道: 会话通道和媒体流通道。会话通道用于在设备之间建立会话并传输系统控制命令; 媒体流通道用于传输视音频数据, 经过压缩编码的视音频流采用流媒体协议RTP/RTCP传输

图例:

在这里插入图片描述
在这里插入图片描述

GB28181文档地址:
http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=469659DC56B9B8187671FF08748CEC89

GB28181相关项目:

https://gitee.com/pan648540858/wvp-GB28181-pro
https://gitee.com/qinqi/JNVS
https://github.com/GB28181/GB28181.Solution
https://gitee.com/chatop2020/AKStream?_from=gitee_search
https://github.com/ZLMediaKit/ZLMediaKit
https://gitee.com/kkkkk5G/MediaServerUI

sip协议

关于sip协议,这里使用sip通信报文配上注释来说明会更加详细。

1.注册文本

摄像头 Sip
//摄像头发起的第一次注册信息

REGISTER sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK1945009904
Route: <sip:[email protected]:5060;lr>
From: <sip:[email protected]:5060>;tag=321443940 //在这里我们可以拿到设备的id
To: <sip:[email protected]:5060>
Call-ID: [email protected] //这个是会话的唯一标识,回复时一定要带这个,要不然报错
CSeq: 1 REGISTER //这里代表第一次注册,按照国际惯例是先回复401请求校验信息,回复信息也要携带
Contact: <sip:[email protected]:5060>
Max-Forwards: 70
User-Agent: Dahua SIP UAS V1.0 //厂商信息
Expires: 3600 //注册有效时间,不为代表注册,为0时代表注销
Content-Length: 0 //请求体长度为0,说明下面没有数据了,没有携带消息体

//服务器回复401校验
SIP/2.0 401 Unauthorized
CSeq: 1 REGISTER //回复第一次注册
Call-ID: [email protected] //会话id
From: <sip:[email protected]:5060>;tag=793568880
To: <sip:[email protected]:5060>
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK45766126 //这个字段直接拷贝上面的来回复
WWW-Authenticate: Digest realm="3402000000",nonce="962535b552b6e29883ff988c0065ddc2" //这里表明验证参数,nonce这里是Call-ID+设备id的md5 ,这个值只是提供校验的随机数,对于怎么进行校验,下面代码详解
Content-Length: 0

//摄像头第二次注册
REGISTER sip:[email protected]:5060 SIP/2.0 //留意该文本,按照空格切割,uri为第二个字符串,第一个是方法,第三个是请求版本号,类似HTTP/1.1
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK1647127273
Route: <sip:[email protected]:5060;lr>
From: <sip:[email protected]:5060>;tag=793568880
To: <sip:[email protected]:5060>
Call-ID: [email protected]
CSeq: 2 REGISTER //第二次注册
Contact: <sip:[email protected]:5060>
Authorization: Digest username="34020000001110000011", realm="3402000000", nonce="962535b552b6e29883ff988c0065ddc2", uri="sip:[email protected]:5060", response="77ed0f6d00ab1e0c1a871dd5e03edb65", algorithm=MD5 //加密算法 以及检验的参数
Max-Forwards: 70
User-Agent: Dahua SIP UAS V1.0
Expires: 3600
Content-Length: 0


//第二次校验成功的话直接响应200 之后摄像头会发起心跳保活
SIP/2.0 200 OK
CSeq: 2 REGISTER //回复第二次注册
Call-ID: [email protected] //唯一会话id
From: <sip:[email protected]:5060>;tag=793568880
To: <sip:[email protected]:5060>
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK1647127273
Expires: 3600
Date: Fri, 10 Apr 2021 08:24:49 GMT
Content-Length: 0


//摄像头回复注销信息 这里注意Expires字段,为0代表注销 服务器收到后直接做业务操作回复200
REGISTER sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK399301364
Route: <sip:[email protected]:5060;lr>
From: <sip:[email protected]:5060>;tag=793568880
To: <sip:[email protected]:5060>
Call-ID: [email protected]
CSeq: 3 REGISTER //第三次注册
Contact: <sip:[email protected]:5060>
Max-Forwards: 70
User-Agent: Dahua SIP UAS V1.0
Expires: 0 //注销
Content-Length: 0 

注: 平台之间注册不需要鉴权,直接回复ok

2.心跳文本

//摄像头发送过来的Keepalive保活信息

MESSAGE sip:[email protected]:5060 SIP/2.0 //MESSAGE 方法名,类似http的get/post方法
Via: SIP/2.0/UDP 192.168.1.8:5060;rport;branch=z9hG4bK700933079 //这个不用理会,但需要拷贝该字段,回复200要用
From: <sip:[email protected]:5060>;tag=1896094222 //同上
To: <sip:[email protected]:5060> //同上
Call-ID: [email protected] //同上
CSeq: 20 MESSAGE //唯一标识
Max-Forwards: 70
User-Agent: Dahua SIP UAS V1.0
Content-Type: Application/MANSCDP+xml //消息体格式
Content-Length:   178 //消息体长度,不带消息头,下面会空一行才会读到消息体,解析时注意下读到空行

<?xml version="1.0" encoding="GB2312" ?> //编码
<Notify>
    <CmdType>Keepalive</CmdType> //注意这里的消息体,大华发送的消息体有空格的,海康的消息体不带空格,需要做下处理,或者使用xml工具类,这里为了方便直接解析字符串
    <SN>0</SN>
    <DeviceID>34020000001110000011</DeviceID> //设备编号
    <Status>OK</Status>
</Notify>


//服务器需要对其进行200回复,超过不回复次数就会断流
SIP/2.0 200 OK //回复200
CSeq: 20 MESSAGE //拷贝上面心跳信息
Call-ID: [email protected] //同上
From: <sip:[email protected]:5060>;tag=1896094222 //同上
To: <sip:[email protected]:5060> //同上
Via: SIP/2.0/UDP 192.168.1.8:5060;rport;branch=z9hG4bK700933079 //同上
Content-Length: 0 //没有消息体,直接写0 

请求
客户端向服务端发送示例:

在这里插入图片描述

3.catalog

sip协议

Via: SIP/2.0/UDP 27.10.24.1:5061;branch=z9hG4bK8210143023101430fa101430b 
Call-ID: [email protected] 
From: <sip:[email protected]:5061;transport=udp>;tag=63a161ccc2a161cc1ba161cc59a161cc 
To: <sip:[email protected];transport=udp> 
CSeq: 134349445 MESSAGE 
Max-Forwards: 70 
Expires: 90 
User-Agent: IMOS/V3 
Contact: <sip:[email protected]:5061> 
Content-Type: application/MANSCDP+xml 
Content-Length: 1288 
 
<?xml version="1.0" encoding="GB2312"?> 
 
<Response> 
<CmdType>Catalog</CmdType> 
<SN>859327</SN> 
<DeviceID>4201010303</DeviceID> //设备编号,实际是上级组织编号
<SumNum>72</SumNum> 
<DeviceList Num="1"> 
<Item> //核心数据
<DeviceID>42010000011315000808</DeviceID> //真正的设备编号 
<Name>A ��ɽ�������·��-C79</Name> //名称
<Manufacturer>uniview</Manufacturer>  
<Model>h3c</Model> //型号
<Owner>h3c</Owner> //所属厂商
<CivilCode>4201010303</CivilCode> 
<Block></Block> 
<Address>27.10.24.1</Address>  //来源地址
<Parental>0</Parental> 
<ParentID>4201010303</ParentID> //上级编号
<SafetyWay>0</SafetyWay> 
<RegisterWay>1</RegisterWay> 
<CertNum>1</CertNum> 
<Certifiable>0</Certifiable> 
<ErrCode>400</ErrCode> 
<EndTime>2011-11-11T19:46:17</EndTime> 
<Secrecy>0</Secrecy> 
<IPAddress>27.14.33.75</IPAddress>  //设备实际地址
<Port>8800</Port> 
<Password>admin</Password> 
<Status>ON</Status> 
<Longitude>114.306191347343</Longitude> 
<Latitude>30.6136439824189</Latitude> 
<Info> //设备的相关信息
<CameraType>1</CameraType> 
<PTZType>1</PTZType> 
<PositionType>2</PositionType> 
<RoomType>1</RoomType> 
<UseType>1</UseType> 
<SupplyLightType>1</SupplyLightType> 
<DirectionType>1</DirectionType> 
<Resolution></Resolution> 
<DownloadSpeed></DownloadSpeed> 
<SVCSpaceSupportMode>0</SVCSpaceSupportMode> 
<SVCTimeSupportMode>0</SVCTimeSupportMode> 
<StreamNum>1</StreamNum></Info> 
</Item> 
</DeviceList> 
</Response>

4.订阅通知

订阅通知协议
注: 订阅通知相比catalog,主要是在head头里面多了一个event和expires

在这里插入图片描述

上级平台向下级平台发送流程

上下级平台发送
一个简单的gb28181直播预览流程:

  1. 接收下级域的注册请求
  2. 发送catalog请求,查看设备信息
  3. 选择设备进行预览
    catalog流程:
  4. 向下级域发送catalog请求
  5. 下级域回复200
  6. 下级域发送设备信息,可能一次只发送两个设备的信息
  7. 上级域回复200
  8. 循环步骤3和4

向下级域发送catalog请求:

MESSAGE sip:34020000001110000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.30.173:5060;rport;branch=SrsGbB14675203
From: <sip:[email protected]:5060>;tag=SrsGbF87133810
To: <sip:34020000001110000001@3402000000>
Call-ID: 202015285061
CSeq: 100 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: SRS/4.0.26(Leo)
Content-Length: 149
 
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<CmdType>Catalog</CmdType>
<SN>49013560</SN>
<DeviceID>34020000001110000001</DeviceID>
</Query>

下级域回复200:

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.30.173:5060;rport=5060;branch=SrsGbB14675203
From: <sip:[email protected]:5060>;tag=SrsGbF87133810
To: <sip:34020000001110000001@3402000000>;tag=283848756
Call-ID: 202015285061
CSeq: 100 MESSAGE
User-Agent: Embedded Net DVR/NVR/DVS
Content-Length: 0

下级域发送设备信息:

MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.30.228:5060;rport;branch=z9hG4bK1779972060
From: <sip:34020000001110000001@3402000000>;tag=1212522955
To: <sip:34020000002000000001@3402000000>
Call-ID: 1323356603
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: Embedded Net DVR/NVR/DVS
Content-Length:   902
 
<?xml version="1.0" encoding="gb2312"?>
<Response>
<CmdType>Catalog</CmdType>
<SN>49013560</SN>
<DeviceID>34020000001110000001</DeviceID>
<SumNum>8</SumNum>
<DeviceList Num="2">
<Item>
<DeviceID>34020000001320000001</DeviceID>
<Name>өʯÔÆ</Name>
<Manufacturer>Manufacturer</Manufacturer>
<Model>Camera</Model>
<Owner>Owner</Owner>
<CivilCode>CivilCode</CivilCode>
<Address>192.168.30.200</Address>
<Parental>0</Parental>
<SafetyWay>0</SafetyWay>
<RegisterWay>1</RegisterWay>
<Secrecy>0</Secrecy>
<Status>ON</Status>
</Item>
<Item>
<DeviceID>34020000001320000002</DeviceID>
<Name>Camera 01</Name>
<Manufacturer>Manufacturer</Manufacturer>
<Model>Camera</Model>
<Owner>Owner</Owner>
<CivilCode>CivilCode</CivilCode>
<Address>192.168.30.195</Address>
<Parental>0</Parental>
<SafetyWay>0</SafetyWay>
<RegisterWay>1</RegisterWay>
<Secrecy>0</Secrecy>
<Status>ON</Status>
</Item>
</DeviceList>
</Response>

上级域回复200:

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.30.228:5060;rport=5060;received=192.168.30.228;branch=z9hG4bK1779972060
From: <sip:34020000001110000001@3402000000>;tag=1212522955
To: <sip:34020000002000000001@3402000000>
CSeq: 20 MESSAGE
Call-ID: 1323356603
User-Agent: SRS/4.0.26(Leo)
Content-Length: 0

sip相关的开源项目

pjsip

https://github.com/pjsip/pjproject

jain-sip

https://gitee.com/mirrors/jain-sip

gosip

https://github.com/jart/gosip

2>,流媒体平台

https://github.com/648540858/wvp-GB28181-pro/tree/wvp-28181-2.0
https://gitee.com/18010473990/wvp-GB28181/tree/wvp-28181-2.0/

3>,流媒体框架
https://github.com/xiongziliang/ZLMediaKit

其他

参考:
https://zhuanlan.zhihu.com/p/393863592
https://www.cnblogs.com/xiaxveliang/p/12434170.html
https://blog.csdn.net/sbddbfm/article/details/99095022
https://www.toutiao.com/article/6829089709172457988/?wid=1648729532579

本文主要是做一个归纳整理,日后有新的资料或许会一直更新。

标签:SIP,5060,GB28181,192.168,Content,国标,整理,2.0
From: https://www.cnblogs.com/kn-zheng/p/17427886.html

相关文章

  • oracle归档命令整理
    问题背景:一般处理数据库问题中,归档问题遇到比较频繁,如归档满了是否可以清理,是否进行了备份,问题是否会复发,如何诊断处理方案:查看数据库备份情况,如有备份则可清理,若无备份可及时备份进行处理colSTART_TIMEfora30colEND_TIMEfora30colstatusfora10selectSESSION_KEY,INPU......
  • 前缀和经典问题整理
    1、一般形式 --  区域和检索-数组不可变classNumArray:def__init__(self,nums:List[int]):self.pre=[0]fornuminnums:self.pre.append(self.pre[-1]+num)####或者#####self.pre=list(accumulate(num......
  • MySQL数据基础知识整理—4
        今天我们了解下MySQL数据库中的索引和最基础的事务是什么吧。注意:本次的索引会作为主要讲解部分,事务会分两部分讲解;希望大家在看本文章前先看完我之前的MySQL数据基础知识整理。索引    索引:是一种用于快速查找数据库中特定数据的数据结构。它类似于书籍的目录,可......
  • 字符编码(笔记整理)
    一、知识储备三大核心硬件所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘,我们需要明确三点软件运行前,软件的代码及其相关数据都是存放于硬盘中的任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行软件运行过程中产生的数......
  • ts整理
    定义普通类型变量leta:string='字符串'定义数组letarr:string[]=['1','2','3']letarr:Array=[1,2,3]定义混合数组letarr:(string|number)[]=['1','2',3]类型别名使用type定义typearrmixin=(string|number)[]letarr:arrmi......
  • 期末加分整理
    快期末了,建民老师说写下博客,把自己的加分总结一下,为此进行整理一下自己这学期的加分。一共加分是1分。第一次+0.5是在打卡app上:地址:2023年3月6日软工日报-阿飞藏泪-博客园(cnblogs.com)第二次+0.5是地铁演示: ......
  • Android平台GB28181设备接入模块如何实现实时视频和本地录像双码流编码
    ​技术背景我们在做Android平台GB28181设备接入模块的时候,遇到这样的场景,比如执法记录仪或智慧工地等场景下,由于GB28181设备接入模块,注册到国标平台后,平时只是心跳保持,或还有实时位置订阅,查看视频的时候,是按需看,而且有时候,网络环境并不是太好,所以,催生了这样一个诉求:部分开发者希......
  • MySQL数据基础知识整理—3
    聚合函数我们先来看下定义:    在数据库中,聚合函数是指能够对一组数据进行计算并返回一个单一值的函数,这个单一值通常是对这组数据的总体统计结果。    简单来说,就是数据库提供给用户的一种常用函数,其中包括和,平均值,最大值,最小值等。下面我也会给出几个比较常用的聚合......
  • LiveNVR视频平台接收无人机等移动终端RTMP推流后转成GB28181协议输出级联到GB28181视
    1、需求介绍目前很多移动终端设备(如无人机等)只支持RTMP推流输出,不支持GB28181协议。但是又有需要通过GB28181协议接入到视频平台的需求。比如有些大疆无人机产品不能直接注册国标平台,只能rtmp推流。那么,项目中如果将无人机的rtmp的推流转成GB/T281812、获取RTMP推流地址2.1、RT......
  • wvp-GB28181-pro 编译部署ubuntu
    一、前言第一次进行wvp-pro编译部署遇到不少问题,主要对其中的一些依赖以及配置文件配置不熟悉,特此记录一下整个编译部署流程。本文中编译部署在ubuntu20下进行。建议Ubuntu16版本以上运行此项目。二、wvp-GB28181-pro介绍1.开箱即用的28181协议视频平台WEBVIDEOPLATFORM是一个......