GB28181 #
GB28181 协议是设备端主动向服务端发起注册消息,并定时发送保活消息,服务端收到后就认为设备在线,超时收不到保活的话就认为设备离线了。客户端发起播放视频请求时,服务端给指定的设备发送 INVITE 请求,通知设备将指定的通道的视频推送到服务端,服务端再转发给客户端,用户就可以播放了。
GB28181 传输协议是 RTP,去掉 RTP 头部,剩余数据为 H264 PS 流,可使用 VLC 直接播放
GB28181 报文 #
国标 IPC 的 IP 为 192.168.10.8, IPC 本地 SIP 端口为 60719, SIP ID 为 34020000002000000719;
SIP 服务器的 IP 为 192.168.10.10, SIP 服务器的端口为 57030, SIP ID 为 34020000002000000001。
整个国标信令部分基于 UDP 协议进行传输。
注册(REGISTER
)
#
注销(CANCEL
)
#
心跳(Keepalive
)
#
INVITE
#
云台控制(PTZ
)
#
GB28181 协议版本 #
2012 年,GB/T-28181 的第一版标准 #
国家为了规范安防行业的设备平台互联互通,在 2012 年出台了 GB/T-28181 的第一版标准
协议对流媒体的规范还是比较好(H.264 + G711
封装成 PS 流,再经过 RTP 协议进行实时传输),但是控制方面有很多不足,相对于当前流行的 ONVIF 协议在控制信令上还是有很多不足。
2014 年,修改补充文件 #
后续公安一所又感觉 2011 版本的协议不能满足方方面面的信令需求,于是增加了修改补充协议 这次的补充,完善之前协议各地方说辞有误或是不清晰的地方,还增加了不少的信令需求,如:回放、下载、配置、传输协议、设备控制(拉宽放大、缩小)等待一系列的功能。
2016 年,GB/T-28181 - 2016 版本 #
2016 年公安部一所又推出了 GB/T-28181 - 2016 版本,此版本就是对之前的 2011 版和修改补充版进行合并,并增加一些信令,说明制定协议的同志们一直都在努力。
这次的版本应该算是阶段性的版本了,短时间内应该不会修改了。
UDP
vs TCP 主动
vs TCP 被动
#
在 GB28181 的 2016 版中,对于媒体流的传输在原有 UDP 传输的基础中,增加了主动 tcp 和被动 tcp 的方式。
RTP over UDP
vs RTP over TCP
# 默认 UDP
m=audio 6000 RTP/AVP 8
# 指定 TCP
m=video 6000 TCP/RTP/AVP 96
主动 TCP
vs 被动 TCP
a=setup:active
a=setup:passive
UDP #
这个是普遍的传输方式
GB28181 服务端在发 invite 时,在携带的 SDP 中包含了接收媒体的端口,设备端(被呼叫端)收到 invite 后,解析该端口,通过 UDP 将媒体流发向该端口。
TCP 被动 #
GB28181 服务端在发 invite 时,在携带的 SDP 中包含了接收媒体的端口,并监听该端口的媒体数据,设备端(被呼叫端)收到 invite 后,解析该端口,通过 TCP 将媒体流发向该端口。
TCP 主动 #
设备端(被呼叫端)告知服务端自己的媒体流 tcp 端口,服务端主动去连接设备端(被呼叫端)的该端口,获取数据。
参考:
GB28181 的协议栈实现 #
GB/T-28181 协议其实就是在国际上通用的 SIP 协议进行私有化定制
,
流媒体方面就是在国际最流行的编码上进行封装(当然也有我们国家的编码标准 SVAC
)。
libosip + libexosip + libxml
来实现 IPC 和平台协议功能,前面两者负责 sip 协议的实现,libxml 用来封装和解析实体信令。通过 3~4 年的市场应用感觉挺稳定的。
流媒体方面:从编码中获取的 h.264 + g711
的视音频帧,进行 PS 媒体协议封装(自己写的 PS 封装协议),再经过 RTP 传输协议(自己实现)发送至平台。
平台对收到的 RTP 流媒体进行解 RTP, 解 PS,再进行 h.264 + g711
的解码。
SIP 协议 #
会话初始协议
SIP 协议是一个应用层的点对点协议,用于初始、管理和终止网络中的语音和视频会话,是 GB28181
的核心之一。
会话发起协议( Session Initiation Protocol,缩写 SIP)是一个由 IETF MMUSIC 工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。2000 年 11 月,SIP 被正式批准成为 3GPP 信号协议之一,并成为 IMS 体系结构的一个永久单元。SIP 与 H.323 一样,是用于 VoIP 最主要的信令协议之一。
osip vs exosip #
osip #
oSIP is a free software library for VoIP applications implementing lower layers of Session Initiation Protocol (SIP).
oSIP 的开发开始于 2000 年 7 月,第一个版本在 2001 年 5 月发布。
oSIP 采用 ANSI C 编写,而且结构简单小巧,所以速度特别快。
它并不提供高层的 SIP 会话 控制 API,它主要提供一些解析 SIP/SDP 消息的 API 和事务处理的状态机。
oSIP 不提供任何快速产生请求消息和响应消息的方法,所有请求消息和响应消息的形成必须调用一组 sip message api 来手动组装完成,
oSIP 的作者还开发了基于 oSIP 的 UA lib:exosip
和 proxy server lib:partysip
Software using oSIP
- eXosip, the “eXtended osip” library. An extension of oSIP for softphone implementation written by Aymeric Moizard.
- GNU SIP Witch
exosip #
pjsip #
PJSIP 是一个开源的 SIP 协议库,它实现了 SIP、SDP、RTP、STUN、TURN 和 ICE。PJSIP 作为基于 SIP 的一个多媒体通信框架提供了非常清晰的 API,以及 NAT 穿越的功能。PJSIP 具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。
PJSIP 同时支持语音、视频、状态呈现和即时通讯。PJSIP 具有非常完善的文档,对开发者非常友好。
PJSIP 由 Benny Prijono、Perry Ismangil 在 2005 年创建,之后不久,Nanang Izzuddin、Sauw Ming 加入开发团队。2006 年成立 Teluu Ltd.,成为开发和维护 PJSIP 的公司。PJSIP 采用双 License:GPLv2 以及商业许可证,开发者可以根据需要选择不同的 License。
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。