gb28181国标平台资料整理(代码片段)

虚无境的博客 虚无境的博客     2022-10-21     710

关键词:

介绍

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:34020000002000000002@192.168.6.14:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK1945009904
Route: <sip:34020000001110000011@192.168.6.14:5060;lr>
From: <sip:34020000001110000011@192.168.9.200:5060>;tag=321443940 //在这里我们可以拿到设备的id
To: <sip:34020000001110000011@192.168.9.200:5060>
Call-ID: 214776626@192.168.9.200 //这个是会话的唯一标识,回复时一定要带这个,要不然报错
CSeq: 1 REGISTER //这里代表第一次注册,按照国际惯例是先回复401请求校验信息,回复信息也要携带
Contact: <sip:34020000001110000011@192.168.9.200: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: 214776626@192.168.9.200 //会话id
From: <sip:34020000001110000011@192.168.9.200:5060>;tag=793568880
To: <sip:34020000001110000011@192.168.9.200: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:34020000002000000002@192.168.6.14:5060 SIP/2.0 //留意该文本,按照空格切割,uri为第二个字符串,第一个是方法,第三个是请求版本号,类似HTTP/1.1
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK1647127273
Route: <sip:34020000001110000011@192.168.6.14:5060;lr>
From: <sip:34020000001110000011@192.168.9.200:5060>;tag=793568880
To: <sip:34020000001110000011@192.168.9.200:5060>
Call-ID: 214776626@192.168.9.200
CSeq: 2 REGISTER //第二次注册
Contact: <sip:34020000001110000011@192.168.9.200:5060>
Authorization: Digest username="34020000001110000011", realm="3402000000", nonce="962535b552b6e29883ff988c0065ddc2", uri="sip:34020000002000000002@192.168.6.14: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: 214776626@192.168.9.200 //唯一会话id
From: <sip:34020000001110000011@192.168.9.200:5060>;tag=793568880
To: <sip:34020000001110000011@192.168.9.200: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:34020000002000000002@192.168.6.14:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.9.200:5060;rport;branch=z9hG4bK399301364
Route: <sip:34020000001110000011@192.168.6.14:5060;lr>
From: <sip:34020000001110000011@192.168.9.200:5060>;tag=793568880
To: <sip:34020000001110000011@192.168.9.200:5060>
Call-ID: 214776626@192.168.9.200
CSeq: 3 REGISTER //第三次注册
Contact: <sip:34020000001110000011@192.168.9.200:5060>
Max-Forwards: 70
User-Agent: Dahua SIP UAS V1.0
Expires: 0 //注销
Content-Length: 0 

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

2.心跳文本

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

MESSAGE sip:34020000002000000002@192.168.6.14:5060 SIP/2.0 //MESSAGE 方法名,类似http的get/post方法
Via: SIP/2.0/UDP 192.168.1.8:5060;rport;branch=z9hG4bK700933079 //这个不用理会,但需要拷贝该字段,回复200要用
From: <sip:34020000001110000011@192.168.1.8:5060>;tag=1896094222 //同上
To: <sip:34020000002000000002@192.168.6.14:5060> //同上
Call-ID: 78119256@192.168.1.8 //同上
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: 78119256@192.168.1.8 //同上
From: <sip:34020000001110000011@192.168.1.8:5060>;tag=1896094222 //同上
To: <sip:34020000002000000002@192.168.6.14: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: 9ae8ca0e3be8ca0ee2e8ca0ea0e8ca0e16e8c@27.10.24.1 
From: <sip:42010000012005000001@27.10.24.1:5061;transport=udp>;tag=63a161ccc2a161cc1ba161cc59a161cc 
To: <sip:45510000012005000001@27.10.30.98;transport=udp> 
CSeq: 134349445 MESSAGE 
Max-Forwards: 70 
Expires: 90 
User-Agent: IMOS/V3 
Contact: <sip:42010000012005000001@27.10.24.1: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:34020000002000000001@192.168.30.173: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:34020000002000000001@192.168.30.173: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

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

移动视频类设备&平台国标gb28181输入输出,gb28181平台对接说明

VMS/smarteye支持28181输入、输出及安卓设备走28181接第三方国标平台说明文档发布时间:2021-07-0116:43:471. 前言国标服务指 GB/28181-2011 协议,该协议规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结... 查看详情

android国标接入端如何播放gb28181平台端语音广播数据

GB28181语音广播这块,我们依据GB/T28181-2016针对流程和实例代码,做过详细的描述,本次主要是探讨下,广播数据过来后,如何处理。鉴于我们之前有非常成熟的RTMP|RTSP低延迟播放模块,语音广播数据过来后,调用startAudioPlay(),nt... 查看详情

移动视频类设备&平台国标gb28181输入输出,gb28181平台对接说明

VMS/smarteye支持28181输入、输出及安卓设备走28181接第三方国标平台说明文档发布时间:2021-07-0116:43:471. 前言国标服务指 GB/28181-2011 协议,该协议规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结... 查看详情

技术分享|wvp+zlmediakit实现摄像头gb28181推流播放(代码片段)

...,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。应用场景支持浏览器无插件播放摄像头视频。支持摄像机、平台、NV 查看详情

技术分享|wvp+zlmediakit实现摄像头gb28181推流播放(代码片段)

...放摄像头视频。支持摄像机、平台、NVR等设备接入。支持国标级联。支持rtsp/rtmp等视频流转发到国标平台。支持rtsp/rtmp等推流转发到国标平台。服务部署ZLMediaKit部署##准备环境[root@localhostartc]#yuminstall-yepel-release##gcc和yasm需要高版... 查看详情

easynvr通过国标gb28181协议级联出现报错及播放不了的问题调整(代码片段)

经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播平台,EasyNVR主要功能在于通过RTSP/ONVIF协议,接入前端音视频采集设备,通过EasyNVR软硬件将拉取过来的音视频流转化给适合全平台播放的RTMP、HTTP-FLV、... 查看详情

livegbs国标gb_t28181视频平台如何配置全局目录订阅周期(秒)快捷配置开启目录订阅周期

@(LiveGBS国标GB/T28181视频平台如何配置全局目录订阅周期单位秒)1、目录订阅周期目录订阅周期配置后,可以收到下级上报的通道状态的变化,之前介绍过,可以通过国标设备菜单,单独编辑设备配置订阅周期,开启目录订阅。Live... 查看详情

gb28181的nat穿透(代码片段)

一、国标gb28181内网穿透参考:RFC3581——SIP中的rport机制VIA头域eXosip获取IP和端口国标gb28181跨网(跨路由器)的情况分析:下级平台在内网交换机后面,上级平台在公网,因为内网的摄像头在发送信息到公网上会经过一个网关,... 查看详情

国标gb28181视频服务器easygbs的集群方案

国标GB28181的集群目标国标GB28181视频平台单独运行时,可对外提供国标全功能的设备接入、语音服务、视频服务、录像服务等功能,根据硬件和带宽的配置,单台能支持10k级别的设备接入与流媒体输出服务;而当... 查看详情

livegbs国标gb_t28181视频平台如何配置全局全局报警订阅周期(秒)快捷配置开启报警告警订阅周期

...到下级上报的报警告警事件消息,之前介绍过,可以通过国标设备菜单,单独编辑设备配置订阅周期,开启报警订阅。LiveGBS国标GB/T28181国标视频平台报警消息查询配置WEB:https://www.liveqing.com 查看详情

国标gb/t28181流媒体服务获取接入的设备通道直播流地址hls/http-flv/ws-flv/rtmp/rtsp(代码片段)

目录国标设备查看通道直播播放分享页面获取直播流地址(1)获取HTTP-FLV直播流地址(2)获取HLS直播流地址(3)获取RTMP直播流地址(4)获取WS-FLV直播流地址(5)RTSP开启RTSP获取RTSP直播流地址搭建GB28181流媒体平台国标设备根据GB28181规范,接... 查看详情

设备通过国标gb28181接入easycvr平台,出现断流情况该如何解决?

...特点,可支持多类型的设备、多协议接入,包括国标GB28181协议、RTMP/RTSP/Onvif协议、海康EHOME、海康SDK、大华SDK等,在视频流分发上,能支持全终端、全平台的视频流输出,包括 查看详情

livegbs国标gb_t28181视频平台如何配置全局全局位置订阅周期(秒)快捷开启位置订阅配置周期

...收到下级上报的通道状态的变化,之前介绍过,可以通过国标设备菜单,单独编辑设备配置订阅周期,开启位置订阅。LiveGBS国标GB/T28181视频流媒体平台接入下级平台设备后如何配置WEB:https://www.liveqing.com 查看详情

gb28181协议视频安防平台easygbs国标配置查询步骤及信令示例

...或者服务器,比如EasyGBS。今天和大家分享一下EasyGBS国标配置的查询步骤及信令示例。1)EasyGBS服务端向设备端发送国标配置查询命令:2)设备端回复服务端,做出响应:3)设备端向服务端发送消息... 查看详情

国标gb28181流媒体服务解决方案

一、GB28181流媒体服务方案     GB28181流媒体服务器是提供流转发服务,负责将GB28181设备/平台推送的PS流转成ES流,然后提供RTSP、RTMP、FLV、HLS多种格式进行分发,实现web浏览器、手机浏览器、微信、PC客户端等各终... 查看详情

如何让android平台像ipc一样实现gb28181前端设备接入

技术背景好多开发者在做国标对接的时候,首先想到的是IPC摄像头,通过参数化配置,接入到国标平台,实现媒体数据的按需查看等操作。像执法记录仪等智能终端,跑在Android平台,对接GB28181平台的需求也非常大,网上相关demo... 查看详情

国标视频平台搭建配置说明(代码片段)

其实ZMLMediaKit中的config.ini文件中,已经详细说明了ZMLMediaKit的配置项,有兴趣的可以自行查看,这里不再做具体说明。地址:https://github.com/ZLMediaKit/ZLMediaKit/blob/master/conf/config.iniZML存在的性质更像是一个工具,... 查看详情

android平台gb28181接入模块技术接入说明

...接,Android平台GB28181接入模块设计的目的,可实现不具备国标音视频能力的Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如智能监控、智慧零售、智慧教育、远程办公、生产运输、智慧交通、车载或执法记录... 查看详情