理论
GB/T 28181作为中国公共安全视频监控领域的核心国家标准,是一个基于国际标准协议进行定制化扩展的复杂技术体系。该协议在SIP、RTP等国际通用协议基础上,针对视频监控联网系统的特殊需求进行了深度优化和功能扩展,形成了完整的技术规范体系。本文将从协议栈架构、信令机制、媒体传输、设备控制等多个维度,深入解析GB28181协议的技术内核和实现机制。
技术架构与核心协议
系统架构设计
GB/T 28181采用了基于SIP监控域的分层架构设计,主要包括以下核心组件:
- SIP客户端:负责用户交互界面,具备注册登记、建立终止会话连接、接收播放视音频流等功能。
- SIP设备:包括网络摄像机、视频编解码设备、数字硬盘录像机等前端设备,具备注册、会话控制、媒体采集编解码和传送功能。
- 中心信令控制服务器:系统的核心组件,提供注册、路由选择、逻辑控制功能,包含代理服务器、注册服务器、重定向服务器等功能实体。
- 媒体服务器:提供实时媒体流转发服务、媒体存储、历史媒体检索和点播服务。
- 信令安全路由网关:负责域间信令路由、身份认证和安全控制,支持级联和互联两种组网方式。
多监测点、多中心的安全监控传输解决方案的多层网络架构图。
通信协议体系
GB/T 28181建立了完整的通信协议栈,分为会话通道和媒体流通道两大类:
会话通道协议:
-
SIP协议:基于IETF RFC 3261,负责设备注册、实时视音频点播、历史视音频回放的会话控制
-
SDP协议:基于IETF RFC 4566,用于会话建立过程中的会话协商和媒体协商
-
MANSCDP协议:监控报警联网系统控制描述协议,处理设备控制、报警信息、设备目录信息等
-
MANSRTSP协议:监控报警联网系统实时流协议,用于历史视音频回放控制
媒体流通道协议:
-
RTP/RTCP协议:基于IETF RFC 3550,实现实时数据传输和流量控制
-
媒体编解码:支持H.264、H.265、SVAC等视频编码,G.711、G.723.1、G.729等音频编码
媒体流发送方、接收方、SIP服务器和媒体服务器之间的SIP信令和实时多媒体流时序图。
说明会话发起协议(SIP)呼叫流的图表,详细说明了会话建立、实时传输协议(RTP)媒体流和会话终止的消息。
国标协议通信架构汇总
协议栈架构与通信机制
双通道架构设计
GB28181协议采用了双通道分离的核心架构设计,将控制信令和媒体数据传输分别通过不同的通道进行处理,这种设计有效提升了系统的可扩展性和稳定性
会话通道承载所有的控制信令交互,基于SIP协议构建,负责设备注册、会话建立、命令传输等控制功能。在SIP协议基础上,GB28181定义了三个关键的扩展协议:MANSCDP(监控报警联网系统控制描述协议)用于设备控制和信息查询,SDP(会话描述协议)用于媒体协商,MANSRTSP(监控报警联网系统实时流协议)用于历史视频回放控制
媒体流通道专门负责音视频数据传输,基于RTP/RTCP协议实现。经过H.264/H.265视频编码和G.711/AAC音频编码的媒体数据,通过PS(Program Stream)封装后,采用RTP协议进行实时传输
GB28181协议栈架构图:展示会话通道和媒体流通道的分层结构
协议栈层次结构
GB28181体现了标准化的网络协议分层设计理念。在传输层,协议支持UDP和TCP两种传输方式,其中UDP适用于实时性要求高的场景,TCP则提供更可靠的传输保障。
2016版本引入的TCP传输包括主动TCP和被动TCP两种模式进行推流(设备 → 平台),通过SDP中的setup参数进行协商。
- 主动TCP模式下,连接发起方:平台端(服务器)主动发起TCP连接
-
工作流程:
-
设备端启动TCP监听端口
-
设备端在SDP描述中告知平台端监听的TCP端口信息
-
平台端收到INVITE响应后,主动向设备端发起TCP连接
-
连接建立后,设备端通过这个连接向平台端发送RTP视频流
-
SDP标识:在SDP中包含
a=setup:active
属性
-
- 被动TCP模式下,连接发起方:设备端(客户端)主动发起TCP连接。
-
工作流程:
-
平台端监听TCP端口
-
平台端通过INVITE信令告知设备端TCP端口号
-
设备端收到端口信息后,主动向平台端发起TCP连接
-
连接建立后,设备端通过这个连接向平台端传输码流
-
SDP标识:在SDP中包含
a=setup:passive
属性
-
- TCP传输模式支持断线重连机制,重连间隔不少于1秒,重连次数不少于3次。
TCP传输遵循RFC4571标准,媒体数据以"长度+数据"的格式进行封装,前4字节为数据长度(网络字节序),后续为实际的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 ... |
---------------------------------------------------------------
基于RTSP中的RTP over TCP格式
| magic number | channel number | data length | data |magic number -
magic number:RTP数据标识符,"$" 一个字节
channel number:信道数字 - 1个字节,用来指示信道
data length :数据长度 - 2个字节,用来指示插入数据长度
data :数据 - ,比如说RTP包,总长度与上面的数据长度相同
主动 TCP vs 被动 TCP
a=setup:active
a=setup:passive
SIP协议扩展与信令机制
SIP协议在GB28181中的定制化应用
SIP中一个比较重要的概念是用户代理(User Agent),指的是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话。SIP用户代理又可分为用户代理客户端UAC(User Agent Client)和用户代理服务端UAS(User Agent Server)。UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应。(参考链接1)这种架构使得GB28181能够充分利用SIP协议的成熟机制,如事务处理、路由选择、负载均衡等
信令交互流程与会话管理
设备注册与实时视频点播流程
设备注册是GB28181协议中的基础功能,采用标准的SIP注册流程但增加了监控系统特有的认证和保活机制。(详细参考链接3)
注册流程遵循严格的时序要求:设备启动后主动向平台发送REGISTER请求,经过双次认证握手完成注册上线。注册成功后,设备需要定期发送OPTIONS方法的心跳消息维持在线状态,心跳间隔通常设置为60秒。如果平台在指定时间内未收到心跳消息,将认为设备离线并进行相应处理。
刷新注册机制确保设备能够长期稳定在线。设备需要在注册过期前重新发送REGISTER请求刷新注册状态,刷新间隔通常为注册有效期的一半。如果刷新注册失败,设备应间隔一定时间(不少于60秒)后重新尝试完整的注册流程。
媒体协商过程通过SDP协议实现,双方交换支持的编解码器、传输协议、网络地址等信息。协商成功后,客户端发送ACK确认消息,设备开始通过RTP协议向指定地址推送音视频流。整个过程严格遵循SIP会话建立的标准流程,但在SDP参数和媒体处理方面进行了监控系统的专门优化
实时视频点播是GB28181协议的核心应用功能,通过INVITE方法建立媒体会话。客户端发送包含SDP媒体描述的INVITE请求,指定需要观看的设备通道和媒体参数。设备接收到请求后,进行媒体协商并返回200 OK响应,同时在SDP中描述自己支持的媒体格式和传输参数
上级网关:作为主数据平台,承担服务提供者的角色,接收和处理来自下级网关的数据
下级网关:作为子平台,承担数据推送者的角色,主动向上级平台推送数据
下级网关主动推送数据到上级网关,上级网关被动接收并处理数据。
GB28181信令流程简图
抓包验证,订阅信令需注意是插上电源线的时候触发,而不是视频入会。
设备控制命令系统
GB28181协议定义了丰富的设备控制命令体系,通过SIP MESSAGE方法实现各类设备操控功能。控制命令采用XML格式的MANSCDP协议进行封装,支持云台控制、录像管理、报警处理、设备配置等多种类型的操作。(参考链接4)
控制命令根据是否需要应答分为两类:
- 无应答命令包括PTZ控制、强制关键帧、拉框缩放等实时性要求高的操作,目标设备接收后立即执行,只返回SIP层面的200 OK确认。
- 有应答命令包括录像控制、报警布防、设备配置等需要执行结果反馈的操作,目标设备除了返回SIP确认外,还需要发送包含执行结果的应答消息。
PTZ控制与云台管理
云台控制是设备控制命令中最常用的功能,支持上下左右移动、变倍、变焦、光圈调节等操作。PTZ控制命令通过8字节的十六进制码进行编码,包含命令字、数据字节、校验位等信息。不同厂商的PTZ控制码可能存在差异,但GB28181规定了标准的命令格式和参数范围。
预置位管理允许用户设置、调用和查询云台预置位置。预置位命令包括设置预置位(PresetSet)、调用预置位(PresetQuery)、删除预置位等操作,每个预置位通过唯一的ID进行标识,支持最多255个预置位的管理
媒体传输协议与编码机制
国标编码体系
GB28181协议建立了完整的设备编码体系,采用20位十进制数字构成的统一编码规则。编码结构为:中心编码(8位)+ 行业编码(2位)+ 类型编码(3位)+ 网络标识(1位)+ 序号(6位)
- 中心编码采用GB/T2260行政区划代码,前6位表示省市区,后2位表示基层接入单位。
- 类型编码区分不同设备类型,如200表示中心服务器,132表示网络摄像机,216表示虚拟组织目录。
- 网络标识表示设备所在网络类型,如0-4为监控报警专网,5为公安信息网,7为Internet网等
MANSCDP消息结构协议采用XML格式定义控制命令和查询消息的结构。消息包含根元素、命令类型(CmdType)、序列号(SN)、设备ID(DeviceID)等基础字段,以及针对不同命令类型的专用参数。
PS封装机制是GB28181协议的重要特色,音视频数据经过编码后需要按照PS(Program Stream)格式进行封装,然后通过RTP协议传输。PS封装提供了音视频同步能力,支持多路音视频流的复用传输。接收端需要先解RTP封装,再解PS封装,最后进行音视频解码播放
GB28181协议的媒体传输基于RTP(Real-time Transport Protocol)协议实现,RTP协议提供了音视频数据的实时传输能力,包含时间戳、序列号、同步源标识等关键信息用于媒体同步和丢包检测。详细参考:RTSP RTP RTCP SDP基础知识_rtp rtsp-优快云博客
PS封装格式规范
GB28181要求音视频数据采用PS(Program Stream)格式封装。PS包由PS包头、系统头(可选)、系统映射表(可选)、PES包等组成。
PS包头长度为14字节,包含起始码(0x000001BA)、系统时钟参考(SCR)、多路复用速率、填充长度等字段。起始码用于包同步,SCR用于时钟恢复,多路复用速率表示系统比特率
1. 包头整体字节分布
字段 | 长度(字节) | 描述 |
---|---|---|
Pack start code | 4 | 包起始码,固定为 0x000001BA,用以标识一个PS包的开始. |
SCR(系统时钟参考) | 6 | 由 SCR_base(33位)+ marker_bit (1位 始终置1 )+ SCR_ext(9位 SCR扩展,以27 MHz为单位,可提高同步精度 )+ marker_bit (1位 始终置1 )组成,用于同步. |
Multiplex rate | 3 | 22位无符号整数,单位为400位/秒,指示目标解码器接收码率 |
Pack stuffing length + 保留位 | 1 | 前5位保留,后3位为填充长度,指示紧跟其后的填充字节数. |
Stuffing bytes (可选) | N | 填充字节,用于对齐或占位,长度由上一字段指定. |
系统头长度为18字节,包含起始码(0x000001BB)、音视频流边界信息、缓冲区大小等参数。系统头仅在第一个PS包中出现
PES包用于承载实际的音视频数据,包含PES包头和ES数据。PES包头包含流ID(视频流为0xE0,音频流为0xC0)、包长度、PTS/DTS时间戳等信息
stream_id 区间 | 含义 |
---|---|
0xE0 – 0xEF | 视频流(通常 0xE0 表示第一路视频) |
0xC0 – 0xDF | 音频流(0xC0 对应第一路音频,0xC1 第二路,以此类推) |
0xBD | 私有数据(可能是字幕、智能信息等) |
PS流结构(参考链接5)
包缩写 | 全称 | 作用说明 |
---|---|---|
PSH | Pack Header | PS包起始码,包含同步和时钟信息 |
SYS | System Header | 系统控制头,码率和缓冲信息 |
PSM | Program Stream Map | 流映射表,描述PS中各PES流及其关系 |
PES | Packetized Elementary Stream | 封装具体音视频数据的包,包含时间戳和编码数据 |
以上包的详细bit解析:
常见媒体格式与编解码解析--PS_ps流格式解析-优快云博客
常见stream_type字段值及其含义:
0x10:MPEG-4 视频流
0x1B:H.264(AVC)视频流
0x80:SVAC 视频流
0x90:G.711 音频流 在中国视频监控和国标协议中通常特指PCMA(G.711A-law,A律)
0x91: G.711 U-law(PCMU)音频流
0x92:G.722.1 音频流
0x93:G.723.1 音频流
0x99:G.729 音频流
0x9B:SVAC 音频流
关键帧(I帧)封装:
RTP包头 + PS包头(PSH) + 系统头(SYS) + 节目流映射表(PSM) + PES包头 + H.264数据(SPS+PPS+IDR)
非关键帧(P/B帧)封装:
RTP包头 + PS包头(PSH) + PES包头 + H.264数据
音频帧封装:
RTP包头 + PES包头 + 音频数据(如G711)
h264常见内存布局格式
H.264 start code 常放在SPS、PPS、IDR数据之前,但具体的使用有严格的规范要求。
- 对于AVCC格式,则是通过nalu.length作为开始部分,并且sps,pps放在全局数据externdata。
- Annex B格式中,NAL单元以起始码(start code)分隔,有两种形式 0x00 00 01 / 0x00 00 00 01。SPS和PPS必须使用4字节起始码
0x41 = 0b01000001
F | NRI | Type
0 | 10 | 00001H.264码流中的关键NAL单元类型:
NAL单元类型 Start Code要求 示例格式 SPS (类型7) 4字节(强制) 00 00 00 01 67
PPS (类型8) 4字节(强制) 00 00 00 01 68
IDR第一个slice (类型5) 4字节(强制) 00 00 00 01 65
IDR后续slice 3字节(可选) 00 00 01 65
普通帧第一个slice 4字节(强制) 00 00 00 01 41/61
普通帧后续slice 3字节(可选) 00 00 01 41/61
字节序列 | NAL头部二进制 | F | NRI | Type | 说明 |
---|---|---|---|---|---|
41 (0x41) | 0b01000001 | 0 | 10(2) | 1 | 非IDR图像slice,参考级别中等(NRI=2),常见P帧 |
61 (0x61) | 0b01100001 | 0 | 11(3) | 1 | 非IDR图像slice,参考级别较高(NRI=3),也是P帧 |
根据NAL头部的NRI字段,同一类型的NAL单元可能有不同的重要性标识:
起始码示例 | NRI值 | 重要性等级 | 典型用途 |
---|---|---|---|
00 00 01 01 | 00 | 不重要 | B帧,可丢弃 |
00 00 01 21 | 00 | 不重要 | 可丢弃的非IDR slice |
00 00 01 41 | 10 | 中等重要 | P帧参考slice |
00 00 01 61 | 11 | 高重要性 | 重要参考slice |
00 00 01 81 | 10 | 中等重要 | 中等重要性slice |
参考文献
gb28181信令流程简图 流程图模板_ProcessOn思维导图、流程图
GB28181协议常见几种信令流程(一)_28181 流媒体服务器信令流程-优快云博客