GB28181国标平台资料整理
介绍
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直播预览流程:
- 接收下级域的注册请求
- 发送catalog请求,查看设备信息
- 选择设备进行预览
catalog流程: - 向下级域发送catalog请求
- 下级域回复200
- 下级域发送设备信息,可能一次只发送两个设备的信息
- 上级域回复200
- 循环步骤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国标平台向上级联给LiveGBS GB28181平台的操作示例
@ 目录 1.部署安装国标视频平台 1.1.服务器网络环境 1.2.信令服务配置 2.接入网络摄像头设备 2.1.海康GB28181接入示例 2.2.大华GB28181接入示例 2.3.华为IPC G ...
- GB28181国标平台LiveGBS如何获取下级监控摄像头、4G执法记录仪、无人机等GB28181设备的经纬度位置信息
LiveGBS视频综合国标平台车载设备位置移动位置订阅移动位置上报mobileposition地图定位GPS轨迹 1.配置开启位置订阅 1.1.国标设备编辑 1.2.配置订阅周期 1.3.选择开启位置 ...
- GB28181国标平台软件(包含服务器和客户端)
GB28181是国家针对安防领域制定的一个通信协议标准,目的是解决不同平台.不同设备间通信协议不统一的问题.GB28181标准从2011制定的第一个版本开始,到最近的2016版本,制定的协议内容越来越 ...
- GB28181国标平台接入摄像头、NVR录像机通道数位0没有通道的处理方式
国标设备列表显示通道0未获取到视频通道时候如何排查 1.NVR配置接入 2.通道数为0处置 2.1.判断信令是否畅通 2.1.1.点击更新通道 2.1.2.有成功提示 2.1.2.1.确认设备的视频通 ...
- LiveNVR视频流媒体服务器软件可以接收rtmp推流并转换成GB28181输出级联到第三方国标平台服务
接收rtmp推流并转换成GB28181输出级联到第三方国标平台服务 1.需求背景 2.根据RTMP推流规则推流 2.1.RTMP推流地址配置规则 2.2.配置设备推流 3.配置拉转RTMP 3.1.配 ...
- LiveNVR视频流媒体平台支持接收rtsp推流并转换成GB28181输出级联到第三方国标平台服务
接收rtsp推流并转换成GB28181输出级联到第三方国标平台服务 1.需求背景 2.开启RTSP 2.1.基础配置配置RTSP端口 2.3.RTSP推流地址配置规则 2.2.配置设备推流 3.配置拉 ...
- 几款支持GB28181的平台
1.第一款就是海康自己的ISC,HIKVISION iSecure Center综合安防管理平台. 入口 提供视频实时预览.网络录像回放.语音对讲取流URL获取能力,通过集成视频SDK.APPSDK实 ...
- LiveNVR视频平台接收无人机等移动终端RTMP推流后转成GB28181协议输出级联到GB28181视频平台的操作说明...
1.需求介绍 目前很多移动终端设备(如无人机等)只支持RTMP推流输出,不支持GB28181协议.但是又有需要通过GB28181协议接入到视频平台的需求.比如有些大疆无人机产品不能直接注册国标平台,只 ...
- GB28181流媒体平台LiveGBS中设置摄像头设备报警订阅、报警查询,以及抓图设备报警图片和录像的步骤
LiveGBS国标GB/T28181配置报警订阅配置报警预案告警计划自动触发快照截取视频录像快照关联录像关联 1.报警信息 1.1.报警查询 1.2.配置开启报警订阅 1.2.1.国标设备编辑 1.2 ...
- 【解决方案】物流行业如何通过国标GB28181协议国标平台EasyGBS建立车载视频可视化监控系统?
全国物流行业在中国经济迅速发展的同时获得迅速壮大,每个地区都有着数量庞大的物流运输车辆.随着物流运输车辆数量的增长,逐渐暴露出很多车辆管理上的漏洞,使得物流企业的进一步壮大发展,受到很大限制. 目前, ...
最新文章
- 结构最清晰的Yolov3 head和loss实现完全解析
- PetShop之表示层设计(转载)
- 修改数据,如何将原数据带到输入框
- ElasticSearch搜索引擎: 内存分析与设置
- (转)C#2.0泛型--Dictionary,List用法
- laravel中的form表单提交
- JavaScript数据类型和变量学习小记
- webshell下执行CMD的小技巧
- linux: sort排序数据 grep搜索数据
- 信息学奥赛一本通(1239:统计数字)
- 计算机信息的编码教案,信息的编码教案信息的编码教案.doc
- java 遍历循环_如何在Java中实现循环遍历?
- python3 微博API code获取解决方案 长期保存access_token
- 安卓psp模拟器联机教程_psp模拟器联机游戏下载-psp模拟器联机对战版v1.0 安卓版 - 极光下载站...
- 图片快速转化为Excel表格
- json格式转csv格式
- 未知USB设备(设备描述符请求失败)解决方法
- 深入理解MVCC实现原理以及当前读和快照读存在的问题
- 【软件测试】数据库大厂面试真题解析(二叉树算法纯干货!)
- Docker-Compose 容器编排技术