GB28181协议,SIP协议框架,级联,注册

sip-proxy

github地址

www.isluna.ml

基于sip实现gb28181的通信框架,区分client和server。以便于快速构建发起SIP请求和处理响应。支持级联,告警,订阅等标准协议信令服务。项目不仅限于gb28181协议。也可以利用封装的SIP方法处理其他协议。

实现功能

  • SIP 通用请求构建
  • spring-boot starter自动配置
    • 端口监听
      • UDP 监听
      • TCP 监听
    • 基于javax的xml转化,写bean的方式写xml
  • GB28181
    • Server
      • 设备注册
      • 目录订阅
      • 设备认证
      • 设备控制(PTZ)
      • 云台控制
      • 安放告警
      • 设备查询
      • 实时点播
        • 视频回放点播
        • 视频回放控制
      • 设备移动订阅
    • Client
      • 设备注册
      • 目录更新上报
      • 设备控制响应
      • 告警上报
      • 事件推送
      • 设备状态回复
      • 设备录像上报
      • 心跳检测
      • 实时点播响应
      • 实时回放控制响应
      • 视频回放点播
  • 基于gb28181-proxy 实现平台级操作。搭建信令服务平台
  • 基于流媒体搭建完整的视频监控级联平台 zlm-spring-boot-starter 进行中
  • 基于客户端搭建本地NVR平台管理
  • wike教程
  • 其他。。。

如何使用

文档链接

全量包


<dependency>
    <groupId>io.github.lunasaw</groupId>
    <artifactId>gb28181-proxy</artifactId>
    <version>${last.version}</version>
</dependency>

按需引入 基于sip的请求封装包。注意:因为涉及到github action打包识别问题。故sip-common永远比client和sever小一个版本


<dependency>
<groupId>io.github.lunasaw</groupId>
<artifactId>sip-common</artifactId>
<version>${last.version}</version>
</dependency>

gb28181设备client

<dependency>
<groupId>io.github.lunasaw</groupId>
<artifactId>gb28181-client</artifactId>
<version>${last.version}</version>
</dependency>

sip服务器server

<dependency>
<groupId>io.github.lunasaw</groupId>
<artifactId>gb28181-server</artifactId>
<version>${last.version}</version>
</dependency>

1、背景介绍
GB28181协议指的是国家标准GB/T 28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》1,该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiation Protocol)协议2,流媒体传输层面使用的是实时传输协议(Real-time Transport Protocol,RTP)协议3,因此可以理解为GB28181是在国际通用标准的基础之上进行了私有化定制以满足视频监控联网系统互联传输的标准化需求。本文旨在说明在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。

2、相关技术介绍
2.1 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协议中具体通信协议结构图如下图1所示:
在这里插入图片描述

在这里插入图片描述
会话通道中,注册、实时视音频点播、历史视音频的回放等应用的会话控制采用SIP协议IETF RFC3261中规定的REGISTER、INVITE等请求和响应方法实现, 历史视音频回放控制采用SIP扩展协议IETF RFC29765规定的INFO方法实现,前端设备控制、信息查询、报警事件通知和分发等应用的会话控制采用SIP扩展协议IETF RFC34287规定的MESSAGE方法实现。下面详细介绍下注册、保活和实时视音频点播的SIP消息结构。

2.1.1 注册
注册指的是设备或系统进入联网系统时向SIP服务器(SIP UAS)进行注册登记的工作模式,在本文中FFmpeg即为一个SIP服务器,设备向FFmpeg发送注册请求,FFmpeg在接收到设备的注册请求后返回相应的回复消息,则完成设备注册流程。GB28181协议中基于数字摘要的挑战应答式安全技术进行注册流程如下图2所示:
在这里插入图片描述
注册流程描述如下:

(a) SIP代理向SIP服务器发送Register请求;

(b) SIP服务器向SIP代理发送响应401,并在响应的消息头WWW_Authenticate字段中给出适合SIP代理的认证体制和参数;

© SIP代理重新向SIP服务器发送REGISTER请求, 在请求的Authorization字段给出信任书,包含认证信息;

(d) SIP服务器对请求进行验证,如果检查出SIP代理身份合法,向SIP代理发送成功响应200OK,如果身份不合法则发送拒绝服务应答。

注册的请求消息内容范例如下:

1 REGISTER sip:34020000002000000001@3402000000 SIP/2.0

2 Via: SIP/2.0/UDP 192.168.137.11:5060;rport;branch=z9hG4bK1371463273

3 From: sip:34020000001320000003@3402000000;tag=2043466181

4 To: sip:34020000001320000003@3402000000

5 Call-ID: 1011047669

6 CSeq: 1 REGISTER

7 Contact: sip:34020000001320000003@192.168.137.11:5060

8 Max-Forwards: 70

9 User-Agent: IP Camera

10 Expires: 3600

11 Content-Length: 0

第1行表明这条SIP消息的方法(Method)是REGISTER,34020000002000000001是SIP服务器的国标ID,国标ID指的是由中心编码(8位) 、行业编码(2位) 、类型编码(3位)和序号(7位)四个码段共20位十进制数字字符构成,具体国标ID的编码方法可以参考GB/T 28181—2016中的附录D。3402000000指的是SIP服务器的域国标ID,SIP/2.0指的是SIP协议版本。
第2行为Via头,Via头中包含了发送请求方的相关信息,后续需要使用这些信息进行回复。SIP/2.0/UDP表示使用的是2.0版本的SIP协议,使用的传输协议是UDP,也可以使用TCP协议。192.168.137.11:5060为请求发送方的IP地址和端口号。Via头中必须包含branch参数,具体值是一个在整个SIP通信过程中不重复的数值。branch是一个事务ID(Transaction ID),用于区分同一个UA所发起的不同Transaction,它不会对未来的request或者是response造成影响,对于遵循IETF RFC3261规范的实现,这个branch参数的值必须用”z9hG4bK”打头. 其它部分是对To, From, Call-ID头域和Request-URI按一定的算法加密后得到。rport字段表示使用rport机制路由响应,即发送的响应时,按照rport中的端口发送SIP响应,也就是说IP和端口均完全遵照从哪里来的,发回哪里去的原则,如果没有rport字段时,服务端的策略是IP使用UDP包中的地址,即从哪里来回哪里去,但是端口使用的是via中的端口,详情见IETF RFC35818。
第3行为From头,From头中包含了请求发送方的逻辑标识,在GB28181协议中是发送请求的设备国标ID和域国标ID信息。tag参数是为了身份认证的,值为随机数字字符。
第4行为To头,To头在SIP协议中是为了标明请求接收方的逻辑标识的,在GB28181协议中填写的是发送请求的设备国标ID和域国标ID信息。
第5行为Call-ID头,Call-ID头是全局唯一的,在同一个session中保持一致,在不同session中不同。
第6行为CSeq头,CSeq头又叫Command Seqence(命令队列),用于标识命令顺序,值为序号+Method,序号部分为无符号整数,最大值为2^31。序号起始值是随机的,后续在同一个session中依次递增,比如发1 REGISTER没返回—>再发2 REGISTER—>没返回—>再发3 REGISTER—>这时返回了2 REGISTER就知道是第2个请求得到了响应。对于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头表示SDP消息的长度,因为REGISTER消息不需要SDP,因此为0。
注册的回复消息内容范例如下,各头信息含义见上面:

1SIP/2.0 200 OK2Via: SIP/2.0/UDP192.168.137.11:5060;rport;branch=z9hG4bK13714632733From: sip:34020000001320000003@34020000004To: sip:34020000001320000003@34020000005CSeq: 1 REGISTER6Call-ID: 10110476697Contact: sip:34020000001320000003@192.168.137.11:50608User-Agent: FFmpeg GB28181 v1.09Expires: 360010Content-Length: 0

2.1.2 保活
当UA发现工作异常时, 应立即向本SIP监控域的SIP服务器发送状态信息; 无异常时,应定时向本SIP监控域的SIP服务器发送状态信息。状态信息报送采用IETF RFC3427中定义的方法MESSAGE实现。通过周期性的状态信息报送,实现注册服务器与源设备之间的状态检测即心跳机制。心跳发送方、接收方需统一配置“心跳间隔”参数,按照“心跳间隔”定时发送心跳消息,默认心跳间隔60s。心跳发送方、接收方需统一配置“心跳超时次数”参数,心跳消息连续超时达到“心跳超时次数”则认为对方下线,默认心跳超时次数3次。心跳接收方在心跳发送方上线状态下检测到心跳消息连续超时达到商定次数则认为心跳发送方离线; 心跳发送方在心跳接收方上线状态下检测到心跳消息响应消息连续超时达到商定次数则认为心跳接收方离线。具体命令流程如图3:
在这里插入图片描述
命令流程描述如下:

(a) 源设备向SIP服务器发送设备状态信息报送命令。设备状态信息报送命令采用MESSAGE方法携带;

(b) SIP服务器收到命令后返回200 OK。

保活消息内容范例如下:

1 MESSAGE sip:34020000002000000001@3402000000 SIP/2.0

2 Via: SIP/2.0/UDP 192.168.137.11:5060;rport;branch=z9hG4bK1066375804

3 From: sip:34020000001320000003@3402000000;tag=1925919231

4 To: sip:34020000002000000001@3402000000

5 Call-ID: 1185236415

6 CSeq: 20 MESSAGE

7 Content-Type: Application/MANSCDP+xml

8 Max-Forwards: 70

9 User-Agent: IP Camera

10 Content-Length: 175

11 <?xml version="1.0" encoding="UTF-8"?>

12

13 Keepalive

14 1

15 34020000001320000003

16 OK

17

18

19

MESSAGE消息头Content-type头为Content-type: Application/MANSCDP+xml。状态信息报送命令采用MANSCDP(监控报警联网系统控制描述协议,Monitoringand Alarming Network System Control Description Protocol)协议格式定义, 详细描述见GB/T 28181—2016中A.2.5状态信息报送。状态信息报送命令应包括命令类型(CmdType)、设备/系统编码(DeviceID)、是否正常工作(Status)等, 采用MESSAGE方法的消息体携带。Message消息的成功和错误应答均无消息体,Message回复消息内容范例如下:

1 SIP/2.0 200 OK

2 Via: SIP/2.0/UDP 192.168.137.11:5060;rport;branch=z9hG4bK1066375804

3 From: sip:34020000001320000003@3402000000

4 To: sip:34020000002000000001@3402000000

5 CSeq: 20 MESSAGE

6 Call-ID: 1185236415

7 User-Agent: FFmpeg GB28181 v1.0

8 Content-Length: 0

2.1.3 实时音视频播放
实时视音频点播采用SIP协议中的INVITE方法实现会话连接,采用RTP/RTCP协议(IETF RFC3550)实现媒体传输。需要注意的是,实时视音频点播需要上述的媒体流保活机制。客户端主动发起的实时视音频点播流程见图4:

在这里插入图片描述
其中,信令1、8、9、10、11、12为SIP服务器接收到客户端的呼叫请求后通过B2BUA代理方式建立媒体流接收者与媒体服务器之间的媒体流信令过程,信令2-7为SIP服务器通过三方呼叫控制建立媒体服务器与媒体流发送者之间的媒体流信令过程,信令13-16为媒体流接收者断开与媒体服务器之间的媒体流信令过程,信令17-20为SIP服务器断开媒体服务器与媒体流发送者之间的媒体流信令过程。

命令流程描述如下:

(a) 媒体流接收者向SIP服务器发送INVITE消息, 消息头域中携带Subject字段, 表明点播的视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号等参数,SDP消息体中s字段为“Play”代表实时点播。

(b) SIP服务器收到INVITE请求后,通过三方呼叫控制建立媒体服务器和媒体流发送者之间的媒体连接。向媒体服务器发送INVITE消息,此消息不携带SDP消息体。

© 媒体服务器收到SIP服务器的INVITE请求后,回复200 OK响应,携带SDP消息体,消息体中描述了媒体服务器接收媒体流的IP、端口、媒体格式等内容。

(d) SIP服务器收到媒体服务器返回的200 OK响应后,向媒体流发送者发送INVITE请求,请求中携带消息3中媒体服务器回复的200 OK响应消息体,s字段为“Play”代表实时点播, 增加y字段描述SSRC值,f字段描述媒体参数。

(e) 媒体流发送者收到SIP服务器的INVITE请求后,回复200 OK响应,携带SDP消息体,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容。

(f) SIP服务器收到媒体流发送者返回的200 OK响应后,向媒体服务器发送ACK请求,请求中携带消息5中媒体流发送者回复的200 OK响应消息体, 完成与媒体服务器的INVITE会话建立过程。

(g) SIP服务器收到媒体流发送者返回的200 OK响应后,向媒体流发送者发送ACK请求,请求中不携带消息体,完成与媒体流发送者的INVITE会话建立过程。

(h) 完成三方呼叫控制后,SIP服务器通过B2BUA代理方式建立媒体流接收者和媒体服务器之间的媒体连接。在消息1中增加SSRC值,转发给媒体服务器。

(i) 媒体服务器收到INVITE请求,回复200OK响应,携带SDP消息体,消息体中描述了媒体服务器发送媒体流的IP、端口、媒体格式、SSRC值等内容。

(j) SIP服务器将消息9转发给媒体流接收者。

(k) 媒体流接收者收到200 OK响应后,回复ACK消息,完成与SIP服务器的INVITE会话建立过程。

(l) SIP服务器将消息11转发给媒体服务器,完成与媒体服务器的INVITE会话建立过程。

(m) 媒体流接收者向SIP服务器发送BYE消息,断开消息1、10、11建立的同媒体流接收者的INVITE会话。

(n) SIP服务器收到BYE消息后回复200 OK响应, 会话断开。

(o) SIP服务器收到BYE消息后向媒体服务器发送BYE消息,断开消息8、9、12建立的同媒体服务器的INVITE会话。

§ 媒体服务器收到BYE消息后回复200 OK响应, 会话断开。

(q) SIP服务器向媒体服务器发送BYE消息,断开消息2、3、6建立的同媒体服务器的INVITE会话。

® 媒体服务器收到BYE消息后回复200 OK响应,会话断开。

(s) SIP服务器向媒体流发送者发送BYE消息,断开消息4、5、7建立的同媒体流发送者的INVITE会话。

(t) 媒体流发送者收到BYE消息后回复200 OK响应, 会话断开。

上述流程较为复杂,原因是在实际视频监控系统中,用户不是直接跟前端监控设备交互,而是与监控管理平台交互。媒体流接收者通常是用户的客户端,SIP服务器是单独的服务器,媒体服务器通常是监控系统中的媒体网关,媒体流发送者为前端摄像机。本文中FFmpeg既作为SIP服务器,也作为用户客户端向前端设备发送INVITE请求,因此可以简化为FFmpeg向前端设备发送INVITE请求后,前端设备向FFmpeg回复200OK,然后FFmpeg再向前端设备回复ACK,这样前端设备即开始发送媒体流。

INVITE消息范例如下:

1 INVITE sip:34020000001320000003@3402000000 SIP/2.0

2 Via: SIP/2.0/UDP 39.100.155.146:15063;rport;branch=z9hG4bK34208805

3 From: sip:34020000002000000001@39.100.155.146:15063;tag=512358805

4 To: sip:34020000001320000003@3402000000

5 Call-ID: 200008805

6 CSeq: 20 INVITE

7 Content-Type: Application/SDP

8 Contact: sip:34020000001320000003@3402000000

9 Max-Forwards: 70

10 User-Agent: FFmpeg GB28181 v1.0

11 Subject: 34020000001320000003:630886,34020000002000000001:0

12 Content-Length: 164

13 v=0

14 o=34020000001320000003 0 0 IN IP4 39.100.155.146

15 s=Play

16 c=IN IP4 39.100.155.146

17 t=0 0

18 m=video 9000 RTP/AVP 96

19 a=recvonly

20 a=rtpmap:96 PS/90000

21 y=630886

SIP消息头部分上述已经解释过了,这里解释下SDP相关字段含义。

v=表示的SDP版本,固定值,为0。
o=表示INVITE发起者的相关信息,后面的内容依次为设备国标ID、session ID、session版本、网络类型(IN/OUT)、地址类型(IPV4/IPV6)、发起者IP。
s=表示session名称,GB28181协议中规定实时点播必须填“Play”。
c=表示连接数据,依次是网络类型(IN/OUT)、地址类型(IPV4/IPV6)、发起者IP。
t=表示起始时间和终止时间,由于是实时点播,没有起始时间和终止时间,因此均为0.
m=表示的媒体流参数,m字段描述媒体的媒体类型、端口、传输层协议、负载类型等内容。媒体类型采用“video”标识传输视频或视音频混合内容,采用“audio”标识传输音频内容; 传输方式采用“RTP/AVP”标识传输层协议为RTP over UDP,采用“TCP/RTP/AVP”标识传输层协议为RTP over TCP。例如:“m=video 6000 RTP/AVP 96”标识媒体类型为视频或视音频, 传输端口为6000,采用RTP over UDP传输方式,负载类型为96。“m=video 6000 TCP/RTP/AVP 96”标识媒体类型为视频或视音频,传输端口为6000,采用RTP over TCP传输方式, 负载类型为96。
a=可以用于表示媒体相关的参数,如启用IETF RFC 4566中对a字段的定义a=rtpmap: / [/]中的, 利用该属性携带编码器厂商名称(如:企业1或企业2编码名称DAHUA或HIKVISION)。该属性表明该流为某厂商编码器编码且是不符合本标准规定的媒体流, 符合本标准规定的媒体流无需该属性。recvonly表示仅接收媒体流,sendonly表示仅发送。
y=表示SSRC,可以在端口复用模式情况下区分不同路的媒体流,SSRC值全局唯一,用户可以自定义。
INVITE回复消息范例如下:

1SIP/2.0 200 OK2Via: SIP/2.0/UDP39.100.155.146:15063;rport=15063;branch=z9hG4bK342088053From: sip:34020000002000000001@39.100.155.146:15063;tag=5123588054To: sip:34020000001320000003@3402000000;tag=10831113115Call-ID: 2000088056CSeq: 20 INVITE7Contact: sip:34020000001320000003@192.168.137.11:50608Content-Type: application/sdp9User-Agent: IP Camera10Content-Length: 26311v=012o=34020000001320000003 1073 1073 IN IP4 192.168.137.1113s=Play14c=IN IP4 192.168.137.1115t=0 016m=video 15060 RTP/AVP 9617a=setup:active18a=sendonly19a=rtpmap:96 PS/9000020y=0000630886

ACK消息范例如下:

1ACK sip:34020000001320000003@3402000000 SIP/2.02Via: SIP/2.0/UDP 39.100.155.146:15063;rport;branch=z9hG4bK342088053From: sip:34020000002000000001@39.100.155.146:15063;tag=5123588054To: sip:34020000001320000003@34020000005Call-ID: 2000088056CSeq: 20 ACK7Max-Forwards: 708User-Agent: FFmpeg GB28181 v1.09Content-Length: 0

BYE消息范例如下:

1BYE sip:34020000001320000003@3402000000 SIP/2.02Via: SIP/2.0/UDP 39.100.155.146:15063;rport;branch=z9hG4bK342088053From: sip:34020000002000000001@3402000000;tag=5123588054To: sip:34020000001320000003@3402000000;tag=10831113115Call-ID: 2000088056CSeq: 79 BYE7Max-Forwards: 708User-Agent: FFmpeg GB28181 v1.09Content-Length: 0

2.2 RTP协议

RTP是一个网络传输协议,IETF RFC3550详细描述了RTP协议内容。GB28181协议中规定了两种方式传输媒体流,一种是将音视频数据打包成MPEG2-PS流然后再通过RTP协议传输,另外一种是直接使用RTP传输裸的音视频流,在实际应用中主要以第一种方式为主,因此本文着重介绍下第一种方式。基于RTP的PS封装首先按照ISO/IEC13818-1:20008将视音频流封装成PES包,然后再将PES包封装成PS包, 再将PS包以负载的方式封装成RTP包。进行PS封装时,应将每个视频帧封装为一个PS包,且每个关键帧的PS包中应包含系统头(System Header)和PSM(Program Stream Map),系统头和PSM放置于PS包头之后、第一个PES包之前。典型的视频关键帧PS包结构如图6所示,其中PESV为视频PES包,PESA为音频PES包,视频非关键帧的PS包结构中一般不包含系统头和PSM。PS包中各部分的具体数据结构参见ISO/IEC13818-1:2000中的相关描述。
在这里插入图片描述
系统头应包含对PS包中码流种类的描述, 其中视频和音频的流ID(stream_id)取值如下:

(a) 视频流ID:0xE0;

(b) 音频流ID:0xC0。

针对几种视音频格式,PSM中流类型(stream_type)的取值如下:

(a) MPEG-4 视频流:0x10;

(b) H.264 视频流:0x1B;

© SVAC 视频流:0x80;

(d) G.711 音频流:0x90;

(e) G.722.1 音频流:0x92;

(f) G.723.1 音频流:0x93;

(g) G.729 音频流:0x99;

(h) SVAC 音频流:0x9B。

PS包的RTP封装格式参照IETF RFC2250,RTP的主要参数设置如下:

(a) 负载类型(payloadtype):96;

(b) 编码名称(encoding_name):PS;

© 时钟频率(clockrate):90 kHz;

(d) SDP描述中“m”字段的“media”项:video。

3、方案实现
3.1 GB28181 demuxer
首先我们在FFmpeg中实现了GB28181协议的demuxer,方案的框架图如图6所示。主要包含两个子模块,一个是SIP stack模块,负责SIP协议功能,一个GB28181 demuxer模块,负责调用SIP接口与前端设备IPC进行交互,同时解析IPC通过RTP发送过来的MPEG2-PS流,得到音视频数据流后以packet的形式返回给lavf上层,再依次往FFmpeg上层传。SIP stack模块提供单一功能的SIP接口,比如发送回复消息,发送INVITE/BYE/ACK请求;GB28181 demuxer模块需要按照FFmpeg上层接口调用顺序与IPC进行相关的交互,同时创建与设备之间的RTP链接,在拿到MPEG2-PS流后进行解析。
在这里插入图片描述
由于FFmpeg只有解析PS流封装的本地视频demuxer,并没有解析PS流的demuxer,因此本文也在本地PS流封装视频demuxer的基础之上实现了PS流的demuxer。核心思路是从RTP包中解析PS头信息,再根据PS头信息找到PES头,从PES头中取出每个PES包的长度。由于RTP长度限制,一个PES包会被切分成很多份分成多个RTP包传输过来,因此PS demuxer需要缓存这些PES切片,等一个完整的PES包凑齐后再解析取出音视频流并以packet格式返回上FFmpeg上层模块。由于IETF RFC22509并没有规定PS流应该如何封装到RTP中,因此PES头可能出现在RTP包的任何位置,demuxer也针对不同的情况做了处理。

3.2 GB28181 Server
上述方案存在局限性,只能对单一设备进行管理和拉流,但实际场景中一个SIP域中存在众多设备。因此在上述GB28181 demuxer的基础之上,我们也实现了GB28181 server,方案的框架图如下图7所示。

在这里插入图片描述
GB28181 server功能包括:
1、作为SIP server,管理多设备的注册、保活监控、拉流/停止拉流信令交互;
2、作为media server,对外提供HTTP接口,用户可以获取设备信息、对指定设备进行拉流并转推RTMP、停止拉流等操作。
GB28181 server可以使用户不感知GB28181协议的存在,用户只需要对感兴趣的设备进行操作即可。具体实现中,我们对上述GB28181 demuxer进行了功能扩展,使其具备两种工作模式,一种就是上述的单一设备模式,一种就是多设备管理模式。后者将设备状态信息、发送拉流/停止拉流接口暴露出来供GB28181 server调用。因此当GB28181 server运行后,其自动会对发出注册请求的设备进行管理,监控设备是否在线或离线并更新设备信息。同时监听用户请求,当接收到用户的HTTP请求时做相应的拉流/停止拉流等操作。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181-2011版本和GB28181-2016版本)     2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源 对资源列表进行管理     3、支持国标GB28181的目录订阅,对接收的订阅通知进行处理     4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     5、支持国标GB28181 PTZ控制     6、支持国标GB28181 录像查询     7、支持国标GB28181 历史视频点播 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     8、支持国标GB28181 历史视频下载 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))     9、支持对接收的国标实时视频码流和历史视频码流进行管理     10、支持将国标的PS码流转换成ES码流     11、支持丢包打印和断流打印     13、支持RTSP服务和RTSP会话管理     14、支持RTSP客户端 UDP传输和TCP传输     15、支持国标GB28181设备5000路左右的接入管理,支持国标请求视频在100路左右     16、支持国标28181设备和通道写入mysql数据库      17、支持设备的云台PTZ控制,控制类型:上"up",下"down",左"left",右"right",左上"leftup",左下"leftdown",右上"rightup",右下"rightdown",镜头近"zoomin",镜头远"zoomout", 焦距远"focusfar",焦距近"focusnear", 设置预置位"setpos",调预置位"callpos"     18、支持历史视频的查询和历史视频的点播控制     19、支持对国标设备的控制,"record":录像开启和停止-通道id "guard":布放和撤防-报警通道id "reboot":设备重启-设备id "keyfame":强制关键帧-通道id     20、支持对实时视频的图片截图,通过http直接访问图片    21、支持rtmp和hls会话一直保留    22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知    23、支持公网和局域网同时存在    24、支持httpserver,接口支持http+json    25、支持设备上线、下线和设备报警通过httpclient通知到指定的httpserver   26、支持http+json设置平台信息  27、支持http+json获取资源组、资源等信息  29、支持国标28181级联上级
### 回答1: GB28181 J级联测试工具是针对GB28181 J级联视频监控系统进行功能测试和性能评估的工具。该测试工具主要用于检测J级联视频监控系统的设备接入、实时监控、视频流传输、统一接口、事件通知等功能是否正常,以及系统的稳定性和性能是否达标。 GB28181 J级联测试工具具有以下主要功能: 1. 设备接入测试:测试工具可以模拟GB28181 J级联视频监控系统中的设备接入,例如摄像头、录像机等,检测设备是否成功接入系统,能否正常工作。 2. 实时监控测试:测试工具可以模拟实时监控场景,测试系统对实时视频流的接收、解码、显示等功能,检测视频监控的实时性和稳定性。 3. 视频流传输测试:测试工具可以模拟视频流传输场景,测试系统对视频流的传输稳定性、带宽占用情况等,检测视频流的传输质量。 4. 统一接口测试:测试工具可以测试系统的统一接口,检测系统是否能够正确处理各种请求和指令,保证不同设备间的通信正常。 5. 事件通知测试:测试工具可以模拟各种事件场景,例如设备状态改变、告警事件等,测试系统是否能正确接收并处理事件通知。 通过使用GB28181 J级联测试工具,用户可以全面评估GB28181 J级联视频监控系统的功能和性能,找出系统中存在的问题和不足,并进行相应的优化和改进,保证系统的稳定运行和性能达标。 ### 回答2: GB28181是中国国家标准化管理委员会发布的一项关于视频监控系统的技术标准,包括了网络摄像机、视频监控系统的设备和相关的网络接口、传输协议等。其中,GB28181j级联测试工具是用于对GB28181系统中级联功能的测试工具。 GB28181j级联测试工具的主要功能是模拟多个设备之间的级联连接,以验证设备间的通讯功能和网络稳定性。通过该工具,可以模拟分布式的视频监控系统,将多个摄像机与监控中心进行连接,进行设备注册、视频流的传输、控制命令的交互等功能的测试。 在测试过程中,GB28181j级联测试工具可以模拟设备的多种工作状态,例如设备的注册、心跳、告警等。同时,还可以模拟各种网络环境,如带宽、延迟、丢包等,以测试设备在不同网络环境下的稳定性和性能。 使用GB28181j级联测试工具,可以帮助开发人员和系统集成商进行系统的功能和性能测试,及时发现和解决问题。通过模拟实际的级联连接,可以确保系统的可靠性和稳定性,提高视频监控系统的效率和可用性。 总之,GB28181j级联测试工具是用于测试GB28181系统中级联功能的工具,通过模拟多个设备的级联连接,验证系统的通讯功能和网络稳定性,提高视频监控系统的效率和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值