GB/T28181流媒体相关协议详解

news2024/9/23 11:15:06

GB/T28181流媒体相关协议详解

文章目录

  • GB/T28181流媒体相关协议详解
    • 1 GB/T28181协议中使用的应用层协议介绍
    • 2 实时视频点播协议交互流程
      • 2.1 设备注册
      • 2.2 设备保活
      • 2.3 视频播放
    • 总结

本文主要主要针对28181协议中视频流的部分,来阐述视频流通过28181协议如何进行视频会话和视频传输的。本文主要介绍28181协议中引用的协议、视频封装格式、实时视频点播协议交互流程等内容。

1 GB/T28181协议中使用的应用层协议介绍

28181协议规范中涉及到SIP、SDP、RTP、RTCP、RTSP等应用层协议,其中SIP+XML主要用于消息交互,SIP+SDP主要用户视频会话,RTP/RTCP主要用于媒体流传输控制,RTSP主要用户录像回放。有关各种协议的详细介绍可参考如下文章,本文不做详细介绍:

  • SIP协议:参照文章 sip协议介绍
  • SDP协议:参照文章 h264和h265视频流SDP描述详解
  • RTCP/RTCP:参照文章 RTP/RTCP协议详解
  • RTSP:参照文章 RTSP协议详解

为方便以后查看,关注,发送消息获取相关文章,比如:发送RTP,可获取RTP协议的介绍。

2 实时视频点播协议交互流程

本章节主要针对实时视频点播协议进行详细介绍,28181发起视频会话前,首先视频终端设备需要注册到国标平台,国标平台需要查询到设备的摄像头ID,根据摄像头ID发起视频会话,进行音视频传输。
本章节抓取的协议的实验环境如下:

  • 视频终端设备:海康威视的IPC
  • 国标平台:EasyGBS

有关国标平台EasyGBS的使用介绍,后面会单独出一篇文章进行介绍。
28181传输层支持TCP和UDP,视频申请支持主动模式和被动模式,本文主要以常用的UDP被动模式为例,说明交互流程,后续文章会详细介绍视频主被动模式以及基于TCP的传输。

2.1 设备注册

GB/T 28181协议介绍 的文章中已经介绍了设备注册流程,设备注册流程图如下:
1

  1. REGISTER不携带鉴权信息消息实例如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 1 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

协议详解:

  • 第1行:SIP消息的方法是REGISTER,34020000002000000001是国标服务器的国标ID,也就是EasyGBS端国标ID,具体国标ID的编码方法可以参考GB/T 28181—2022中的附录D。3402000000指的是国标服务器的域国标ID,SIP/2.0指的是SIP协议版本。
  • 第2行:为Via头,Via头中包含了发送请求方的相关信息,SIP/2.0/UDP表示使用的是2.0版本的SIP协议,使用的传输协议是UDP,也可以使用TCP协议;10.45.12.141:5060为请求发送方的IP、port;Via头包含branch参数,不能重复,branch是一个事务ID(Transaction ID),用于区分同一个UA所发起的不同Transaction,遵循IETF RFC3261规范的实现;rport字段表示使用rport机制路由响应,详情见IETF RFC35818,一般为了nat穿越,内网IPC向公网国标平台注册时,需要带有此字段,此时国标服务器会把从请求的UDP包中获取发送方外网对应的IP和端口,在响应中返回给发送方。
  • 第3行:From头,From头中包含了请求发送方的逻辑标识,在GB28181协议中是发送请求的设备国标ID和域名。tag参数是为了身份认证的,值为随机数。
  • 第4行:To头,To头在SIP协议中是为了标明请求接收方的逻辑标识的,在GB28181协议中填写的是发送请求的设备国标ID和域名。
  • 第5行:Call-ID头,Call-ID头是全局唯一的,在同一个session中保持一致,在不同session中不同。
  • 第6行:CSeq头,CSeq头用于标识命令顺序,序号部分为无符号整数,最大值为2^31。序号起始值是随机的,后续在同一个session中依次递增。ACK和CANCLE中的CSeq需与INVITE中的Cseq保持一致。
  • 第7行:Contact头,Contact头包含源的URI信息,用来给响应消息直接和源建立连接用。在GB28181协议中为SIP设备编码@源IP地址:端口。
  • 第8行:Max-Forwards头,Max-Forwards头用于设置包最大中转次数,默认是70。
  • 第9行:User-Agent头,User-Agent头用于设置关于UA的信息,用户可以自定义。
  • 第10:Expires头,Expires头表示超时时间。
  • 第11行:Content-Length头,Content-Length头表示消息体长度,无消息体赋值0。
  1. 认证失败响应消息实例如下:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>;tag=53631846
CSeq: 1 REGISTER
Call-ID: 924327262
User-Agent: EasyGBS v200511
Content-Length: 0
Contact: <sip:34020000002000000001@10.45.12.83:5061>
WWW-Authenticate: Digest realm="3402000000",nonce="29eb6d344c29a70a0997d173e937e693"

协议详解如下:

  • 第1行:SIP/2.0 401 Unauthorized,表示认证失败。
  • 第2行:Via头,因为请求带有rport,所以响应中带有rport和received,表示国标服务器通过udp包解析出来的发送端的PORT和IP分别赋值给rport和received。
  • 第3行与第四行:与请求类似
  • 第5行:CSeq头,与请求类似,表示服务端命令序列
  • 第6行:Call-ID头,与请求一致
  • 第7行:User-Agent头,与请求类似,表示服务端UA信息
  • 第8行:Content-Length头,与请求类似,表示消息体长度
  • 第9行:Contact头,与请求一致
  • 第10行:WWW-Authenticate头,WWW-Authenticate头用于配置服务端支持的认证方式及认证参数,这里认证方式为digest。
  1. REGISTER带有鉴权信息消息实例如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK864745657
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 2 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Authorization: Digest username="34020000001110000002", realm="3402000000", nonce="29eb6d344c29a70a0997d173e937e693", uri="sip:34020000002000000001@3402000000", response="42b636f290984b1d796907c882e4d5a8", algorithm=MD5
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

这里相比第一次发送的REGISTER消息,多了Authorization字段,其字段内容为digest认证信息。

  1. 注册成功响应消息实例如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK864745657
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>;tag=424631862
CSeq: 2 REGISTER
Call-ID: 924327262
User-Agent: Easy SIP Server
Content-Length: 0
Date: 2022-11-07T17:22:22.710
Expires: 3600
Contact: <sip:34020000002000000001@10.45.12.83:5061>

头字段解析同上文,这里不做过多描述。

2.2 设备保活

28181协议中规定了保活的消息类型:Keepalive,主要用于设备端向国标平台定时汇报设备状态,进而实现服务器与设备之间的心跳检测机制,一般当国标平台在两个心跳周期未接收到心跳,则认为设备出下线,所以为了保证设备与国标平台之间的正常通信,设备端需要定时向国标平台发送保活协议,协议流程如下:
1

  1. 保活消息实例如下:
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>
Call-ID: 1577903431
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   164

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>1822</SN>
<DeviceID>34020000001110000002</DeviceID>
<Status>OK</Status>
</Notify>

sip方法采用MESSAGE,sip头前文已经详细介绍了,这里针对消息体进行详解。
MESSAGE消息头中Content-type头为Content-type: Application/MANSCDP+xml,表示保活信息报送命令采用MANSCDP(监控报警联网系统控制描述协议,Monitoringand Alarming Network System Control Description Protocol)协议格式定义,消息体详细解释见GB/T28181-2022 A.2.5通知命令-状态信息报送部分,GB/T28181-2022可通过关注,发送:协议规范,来获取。

  • xml中Notify元素表示此消息是通知命令
  • xml中CmdType表示命令类型,这里为Keepalive
  • xml中的SN表示序列号
  • xml中的DeviceID表示设备ID
  • xml中的Status表示设备状态,这里为OK
  1. 保活消息响应实例如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>;tag=698636847
CSeq: 20 MESSAGE
Call-ID: 1577903431
User-Agent: Easy SIP Server
Content-Length: 0

2.3 视频播放

前文已经介绍了视频播放的协议流程,如下图所示:
1

  1. 视频播放请求INVITE实例如下:
INVITE sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>
Call-ID: 787682407
CSeq: 3 INVITE
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 218
Content-Type: application/sdp
Contact: <sip:34020000002000000001@10.45.12.83:5061>
Subject: 34020000001320000002:0200000002,34020000002000000001:0

v=0
o=34020000002000000001 0 0 IN IP4 10.45.12.83
s=Play
c=IN IP4 10.45.12.83
t=0 0
m=video 50000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0200000002

SIP方法为INVITE,消息体为SDP,这里对请求的SDP进行详细介绍:

  • V表示协议版本,默认直接赋值0
  • O表示会话所有者标识(originator and session identifier),o=<用户名> <session id> <会话版本> <网络类型><地址类型> <地址>,国标协议中,用户名为国标ID,这里为服务器ID,session id为0,会话版本为0,网络类型为IN,地址类型为IPv4,地址为服务器IP地址。
  • S表示会话名称,s=<session name> <session description>,会话名称默认为Play,会话描述默认为空。
  • C表示数据连接描述,c=<networktype> <address type> <connection address>,
    网络类型为IN,地址类型为IPv4,地址为服务器IP地址。
  • t表示会话活动时间,t=<start time> <stop time>,实时视频时都赋值为0。
  • m表示媒体描述,描述媒体类型、接收媒体流端口、传输层协议、负载类型等,媒体类型采用video表示传输视频或音视频混合,采用audio表示纯音频;传输方式采用RTP/AVP表示采用RTP over UDP,采用TCP/RTP/AVP表示传输层协议采用RTP over TCP,本实例中表示申请的媒体类型为音视频/视频,接收媒体流的端口为50000,传输层协议为RTP over UDP,负载类型为96、98、97
  • a表示媒体扩展属性,a=recvonly表示只接受媒体流,a=rtpmap表示rtp映射信息描述,这里a=rtpmap:96 PS/90000表示传输的PS流的payload为96,采样率为90000,a=rtpmap:98 H264/90000表示传输的H264流的payload为98,采样率为90000,a=rtpmap:97 MPEG4/90000表示传输的MPEG4流的payload为97,采样率为90000。
  • y表示SSRC值,为十进制整数字符串,格式为:dddddddddd,第一位为0表示实时流,为1表示历史流,第2-6位为国标ID的4-8位,第7-10位作为流媒体同步信源表示。

28181中规定了SDP各字段的含义,具体可参照GB/T28181-2022 附录F。服务端发送INVITE携带的媒体信息,表示国标服务器支持的流媒体。

  1. INVITE响应消息实例:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 INVITE
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length:   199

v=0
o=34020000001110000002 261 261 IN IP4 10.45.12.141
s=Play
c=IN IP4 10.45.12.141
t=0 0
m=video 15060 RTP/AVP 96
a=setup:active
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0200000002

响应中的SDP描述的流媒体信息表示IPC支持的流媒体格式及传输方式,IPC响应的SDP中,包含了a=setup:active,这个字段只在TCP传输中起作用,UDP可以忽略,对于TCP传输,包含此字段表示IPC主动连接国标服务器,如果为a=setup:passive表示IPC端为被动模式,由国标服务器发起TCP连接。
通过SDP可以看出,IPC发送的是PS封装的实时流,payload为96,采用UDP的传输模式,发送流的源端端口为15060。国标协议支持最广泛的流媒体封装协议为PS,有关PS的详细介绍可关注,发送:ps,获取相关文章。

  1. ACK消息实例:
ACK sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK672682961
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 ACK
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 0

SIP的ACK方法,通知IPC服务端已经准备好了,可以发送媒体流了。

  1. RTP/RTCP媒体流传输

通过视频会话可知,接下来IPC应该主动向国标服务器发送RTP流,RTP协议带的媒体流封装格式为PS,传输层协议为UDP,RTP源端地址为15060,目的端地址为50000,SSRC=0200000002,抓包协议实例如下:
1
从RTP解析上看,与视频会话交互的信息一致。

总结

GB/T28181协议经过多个版本的迭代,应用在音视频传输中,已经非常完善了,最新的协议版本已经支持TCP模式进行信令交互和音视频传输,还支持主被动模式,在跨网上也有很好的适应性。


关注,发送:28181,获取更多28181文章。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解密RocketMq的运行机制,带你玩转分布式消息通信

一、 MQ背景&选型 消息队列作为高并发系统的核心组件之一&#xff0c;能够帮助业务系统解耦提升开发效率和系统稳定性。主要具有以下优势&#xff1a; 削峰填谷&#xff08;主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题&#xff09;系统解耦&#xf…

Faster R-CNN(2016.1)

文章目录 摘要引言过去计算proposals的算法我们提出的 相关工作Object ProposalsDeep Networks for Object Detection Faster R-CNNRegion Proposal NetworksAnchorsTranslation-Invariant AnchorsMulti-Scale Anchors as Regression References多尺度预测有两种流行的方法我们…

云计算未来展望:边缘计算、量子计算与AI

文章目录 边缘计算&#xff1a;数据处理的新时代应用领域挑战与机遇 量子计算&#xff1a;超越传统计算的新范式量子比特应用前景挑战与机遇 人工智能&#xff1a;云计算的动力云中的AI应用领域挑战与机遇 结语 &#x1f389;欢迎来到云计算技术应用专栏~云计算未来展望&#x…

Vue学习之样式汇总

Vue学习之样式汇总 一 二者左右排版 案例 说明&#xff1a;头部一左一右排版&#xff0c;内容一左一右两个排版&#xff0c;公告栏文字超过点点点显示 代码实现 说明&#xff1a; &#xff08;1&#xff09;头部实现一左一右排版需要使用一下两个样式 display: flex;justify-…

4、QtCharts 做心电图

文章目录 ui界面核心代码全部代码 ui界面 核心代码 void Dialog::slot_timer() {qreal xOffset0.f;//x的偏移量,推进的距离qreal dIncrease10;//增加量//数据for(int i0;i<10;i){m_xdIncrease;xOffsetdIncrease;m_splineSerise->append(m_x,qrand()%10);//根据实际情况删…

IDEA新建maven项目,使用mybatis操作数据库完整过程

IDEA新建maven项目&#xff0c;使用mybatis操作数据库完整过程 一、IDEA新建maven项目二、配置mybatis三、创建表对应实体类四、创建mapper接口五、使用mybatis操作数据库 前提&#xff1a; 这个教程是在maven项目中使用mybatis进行数据库操作&#xff0c;不是在spring boot项目…

51单片机复位电容计算与分析(附带Proteus电路图)

因为iC x (dU/dt).在上电瞬间&#xff0c;U从0变化到U,所以这一瞬间就是通的&#xff0c;然后这就是一个直流回路&#xff0c;因为电容C直流中是断路的&#xff0c;所以就不通了。 然后来分析一下这个电容的电压到底是能不能达到单片机需要的复位电压。 这是一个线性电容&…

听力检测为什么要在标准化的隔声屏蔽系统中进行?

作者兰明&#xff0c;医学硕士&#xff0c;听力学博士&#xff0c;听觉健康门诊主任 美国国家研究委员会;;行为、认知和感官科学委员会联合出版的听力损失确定社会保障福利的资格一书中关于测试环境的要求如下&#xff1a; 行动建议4-4 测试环境 听力学评估是在受控的声学环境中…

基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】

基于springboot实现休闲娱乐代理售票系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把休闲娱乐代理售票管理与现在网络相结合&#xff0c;利用java技术建设休闲娱乐代理售票系统&#xff0c;实现休闲娱乐代理售票的信息化。则对于进一步提高休闲娱乐代理售票管理发…

随写 - GPT使用时机

感慨科技的进步&#xff0c;还记得15年的时候初中&#xff0c;需要写一篇什么读后感&#xff0c;东抄西凑一篇500字的语句不通顺的文章交上去&#xff0c;那时候什么文库啥的都不需要会员&#xff0c;直接复制就行了。 现在问一问GPT什么都出来了。 1.EDA设计 由于课程结束&am…

基于springboot实现校园疫情防控系统项目【项目源码+论文说明】

基于springboot实现校园疫情防控系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&am…

2023-10-28 LeetCode每日一题(从数量最多的堆取走礼物)

2023-10-28每日一题 一、题目编号 2558. 从数量最多的堆取走礼物二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 gifts &#xff0c;表示各堆礼物的数量。每一秒&#xff0c;你需要执行以下操作&#xff1a; 选择礼物数量最多的那一堆。如果不止一堆都符…

Java练习题2022-3

从键盘上输入一个数值字符串&#xff08;表示非负整数&#xff0c;所以该字符串不带正负号和小数点&#xff09;&#xff0c;输出这个字符串中的数字字符重新组合的最小数。例如“654321”输出的为“123456”&#xff1b;“001254”输出为“100245”&#xff1b;“00000”输出为…

Python学习笔记--类的定义和调用

二、类的定义和调用 1、怎么理解类&#xff1f; 类是什么&#xff1f; 个人认为理解类&#xff0c;最简单的方式就是&#xff1a;类是一个变量和函数的集合。 可以看下下面的这张图。 这张图很好的诠释了类&#xff0c;就是把变量和函数包装在一起。 当然我们包装也不是毫…

SpringSecurity详解,实现自定义登录接口

目录 1 SpringSecurity概述1.1 权限框架1.1.1 Apache Shiro1.1.2 SpringSecurity 1.2 授权和认证1.3 SpringSecurity的功能 2 认证原理及流程2.1 项目引入SpringSecurity2.2 认证流程详解 3 自定义登录接口3.1 理论讲解3.2 代码实战3.3 接口测试 1 SpringSecurity概述 1.1 权限…

【计算机视觉】相机

文章目录 一、原始的相机&#xff1a;针孔相机&#xff08;Pinhole Camera&#xff09;二、针孔相机的数学模型三、真实相机四、透镜的缺陷 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#xff0c;PPT可以在课程主页看到。 成像原理 一、原始的相机&#xff1a;针孔相机…

C++11的std::function和bind绑定器

可调用对象 在C中&#xff0c;存在“可调用对象”这么一个概念。准确来说&#xff0c;可调用对象有如下几种定义&#xff1a; 1、是一个函数指针 2、是一个具有operator()成员函数的类对象&#xff08;仿函数&#xff09; 3、是一个可转换为函数指针的类对象 4、是一个类成员&a…

基于SSM和VUE的留守儿童信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

数据链路层和DNS之间的那些事~

数据链路层&#xff0c;考虑的是两个节点之间的传输。这里面的典型协议也很多&#xff0c;最知名的就是“以太网”。我们本篇主要介绍的就是以太网协议。这个协议规定了数据链路层&#xff0c;也规定了物理层的内容。 目录 以太网帧格式 帧头 载荷 帧尾 DNS 从输入URL到…

中软国际:战略携手三大伙伴,三线出击收割AI红利

【科技明说 &#xff5c; 重磅专题】 2023年&#xff0c;当我看到中软国际成立AIGC研究院的消息后&#xff0c;认为基于解放号平台全面能力&#xff0c;去推进政企数智化服务&#xff0c;在很大程度上还是需要生态伙伴的技术力量。 为什么呢&#xff1f;这里简单说一下中软国际…