gb28181通讯协议下快速实时流响应的实现机制
技术领域
1.本技术涉及通信技术领域,尤其涉及一种gb28181通讯协议下快速实时流响应的实现机制。
背景技术:2.目前在市场上流行的安防设备都支持gb28181通讯协议,在使用实时预览界面预览指定摄像头的时候,设备和平台之间通过gb28181触发后怎么能够快速联动到平台和客户端界面的rtsp触发的实现机制是决定产品体验好坏的关键。很多场景下,开发者会选择线性的处理机制去实现信号之间的联动,这样会加大代码逻辑的复杂性,加大了问题的排查难度,高并发的实时流请求下会导致隐含的隐患。
技术实现要素:3.本技术提供了一种gb28181通讯协议下快速实时流响应的实现机制,其技术目的是提供一种简洁明了的信号触发联动方式,有效实现gb28181通讯协议和rtsp通讯协议之间的消息联动,建立gb28181和rtsp之间高效的消息传输和响应机制,动态的实现服务器和前端镜头之间的gb28181协议的交互。
4.本技术的上述技术目的是通过以下技术方案得以实现的:
5.一种gb28181通讯协议下快速实时流响应的实现机制,包括请求实时流、获取实时流和关闭实时流;
6.所述请求实时流的过程包括:
7.步骤1:客户端通过监控界面向指定的前端设备发起实时流请求;
8.步骤2:业务控制系统判断前端设备注册的指定服务器;其中,指定服务器包括mv_access_control组件和mv_mu_stream组件,mv_access_control组件包括vms通讯模块;
9.步骤3:业务控制系统向mv_access_control组件上发送实时流请求报文;mv_access_control组件判断前端设备是否存在分发,若存在分发则返回指定服务器地址作为rtsp地址,若不存在分发则返回一个rtsp地址;
10.步骤4:mv_access_control组件对mv_mu_stream组件的负载进行判断,然后分配负载最轻的mv_mu_stream组件;
11.步骤5:mv_access_control组件向业务控制系统返回rtsp地址;
12.步骤6:业务控制系统向客户端返回rtsp地址;
13.步骤7:客户端向mv_mu_stream组件发送实时浏览请求;
14.步骤8:mv_mu_stream组件判断是否在分发及多路复用,若没有分发则分配接收视频流的端口和资源;
15.步骤9:mv_access_control组件接受mv_mu_stream组件发送的svs_msg_type_mdu_session_setup_req消息,然后查找前端设备会话信息;
16.步骤10:mv_access_control组件向前端设备发送实时浏览请求消息;
17.步骤11:mv_access_control组件接收到前端设备返回的正确消息后,通过vms通讯模块发送svs_msg_type_mdu_session_setup_resp消息给mv_mu_stream组件;
18.步骤12:mv_mu_stream组件向客户端返回rtsp的响应消息;
19.步骤13:mv_access_control组件向前端设备发送ack消息;
20.所述获取实时流的过程包括:
21.步骤14:客户端做好接收视频流的准备;
22.步骤15:前端设备向mv_mu_stream组件发送rtp流,mv_mu_stream组件对rtp流进行处理得到h264裸流;
23.步骤16:mv_mu_stream组件向客户端发送h264裸流;
24.所述关闭实时流的过程包括:
25.步骤17:客户端向mv_mu_stream组件发送关闭实时浏览消息;
26.步骤18:mv_access_control组件接收到mv_mu_stream组件发送的svs_msg_type_mdu_session_teardown_req关闭会话消息请求后,mv_access_control组件停止会话;
27.步骤19:mv_access_control组件向前端设备发送bye消息;
28.步骤20:前端设备向mv_access_control组件返回正确消息,其他同事mv_access_control组件向mv_mu_stream组件发送svs_msg_type_mdu_session_teardown_resp消息;
29.步骤21:mv_mu_stream组件定时向mv_access_control组件上报全部会话流信息,然后向mv_access_control组件发送关闭rtp传输流请求消息svs_msg_type_mu_session_report_req;
30.步骤22:mv_access_control组件向业务控制系统发送http消息。
31.本技术的有益效果在于:本技术所述的gb28181通讯协议下快速实时流响应的实现机制,在mv_access_control组件内部新增一个开源的vms通讯模块,使得组件之间的消息交互更加有效;在不阻塞gb28181通讯协议和rtsp通讯协议两类消息交互的情况下实现联动,接收到rtsp消息中的describe消息后去触发gb28181消息的下发。提供了一种简洁明了的信号触发联动方式,实现了按需拉流。
附图说明
32.图1为本技术所述实现机制的流程图;
33.图2为本技术测试效果示意图;
34.图3为本技术所述实现机制的逻辑架构图。
具体实施方式
35.下面将结合附图对本技术技术方案进行详细说明。
36.本技术所述的gb28181通讯协议下快速实时流响应的实现机制包括包括请求实时流、获取实时流和关闭实时流这三个过程,其具体实施过程如图1所示,其逻辑架构图如图3所示。以下前端设备一般指带gb28181通讯协议的摄像头。
37.请求实时流的过程从步骤1至步骤15,具体包括:
38.步骤1:客户端通过监控界面向指定的前端设备发起实时流请求。
39.步骤2:业务控制系统判断前端设备注册的指定服务器;其中,指定服务器包括mv_
access_control组件和mv_mu_stream组件,mv_access_control组件包括vms通讯模块。
40.指定服务器主要包括mv_access_control和mv_mu_stream两个组件,这两个组件联合使用实现对gb28181设备的快速相应和处理。
41.mv_access_control组件主要处理和前端设备之间的通讯(gb28181通讯协议),mv_mu_stream组件主要处理rtsp信令和对rtp流的处理;rtsp信令与gb28181通讯协议之间的信令的联动就是通过vms通讯模块的第三方库来实现的,例如下文定义的svs_msg_type_mdu_session_setup_req、svs_msg_type_mdu_session_setup_resp、svs_msg_type_mdu_session_teardown_req、svs_msg_type_mdu_session_teardown_resp等。
42.mv_access_control组件的作用包括:(1)客户端请求的rtsp信令的解析,并判断当前请求的前端设备是否已经在分发视频流,在已经分发流的情况下,就不用在向前端设备请求视频流,直接在流媒体服务器中分发一路流出来到客户端;(2)mv_access_control组件同时含有vms通讯机制,可以将mv_access_control组件和mv_mu_stream组件的消息处理联动起来;(3)mv_access_control组件还处理前端设备的gb28181协议,通过这个组件和设备之间实现gb2818协议的通讯。
43.mv_mu_stream组件主要是对rtsp信令进行处理,并实现对rtp信令流的接受和处理。
44.步骤3:业务控制系统向mv_access_control组件上发送实时流请求报文。
45.步骤3.1:mv_access_control组件判断前端设备是否存在分发,若存在分发则返回指定服务器地址作为rtsp地址,若不存在分发则返回一个rtsp地址。
46.无论前端设备分发与否,都要返回rtsp地址,这个rtsp地址是在服务器中组装的,有这个rtsp地址后,才可以正常的向mv_mu_stream组件发送实时浏览请求。
47.步骤4:mv_access_control组件对mv_mu_stream组件的负载进行判断,然后分配负载最轻的mv_mu_stream组件。
48.分发与否,都需要一个负载均衡的判断,并往负载轻的组件上请求视频流。mv_mu_stream组件定时向mv_access_control组件发送负载信息,mv_access_control组件对负载均衡进行判断。
49.一般地,前端设备第一次请求时默认给前端设备分配了一个负载最轻的mv_mu_stream组件,当第一次请求时前端设备已经分配了一个mv_mu_stream组件(并非已有分发任务)。
50.步骤5:mv_access_control组件向业务控制系统返回rtsp地址。
51.步骤6:业务控制系统向客户端返回rtsp地址。
52.步骤7:客户端向mv_mu_stream组件发送实时浏览请求。
53.步骤7.1:mv_mu_stream组件判断是否在分发及多路复用。
54.步骤8:若没有分发mv_mu_stream组件则分配接收视频流的端口和资源。
55.一般接收视频流的端口为udp端口;若有分发,就不需要开辟新的端口接收视频流,只需要将内存中的视频数据拷贝一份直接发往客户端即可。
56.步骤9:mv_access_control组件接受mv_mu_stream组件发送的svs_msg_type_mdu_session_setup_req消息。
57.步骤10:mv_access_control组件查找前端设备会话信息。
58.mv_access_control组件接收到从mv_mu_stream组件发送的svs_msg_type_mdu_session_setup_req消息(图1-9),mv_access_control组件会成功创建一个会话(图1-10),通过这个会话来维持和mv_mu_stream组件之间的通讯。
59.步骤11:mv_access_control组件向前端设备发送实时浏览请求消息,即invite消息。
60.步骤12:mv_access_control组件接收到前端设备返回的正确消息。
61.步骤13:通过mv_access_control组件的vms通讯模块发送svs_msg_type_mdu_session_setup_resp消息给mv_mu_stream组件。
62.步骤14:mv_mu_stream组件向客户端返回rtsp的响应消息。
63.步骤15:mv_access_control组件向前端设备发送ack消息。
64.获取实时流的过程即前端设备将rtp流发送给中台,该过程包括步骤16至步骤18,具体为:
65.步骤16:客户端做好接收视频流的准备;
66.步骤17:前端设备向mv_mu_stream组件发送rtp流,mv_mu_stream组件对rtp流进行处理得到h264裸流;
67.步骤18:mv_mu_stream组件向客户端发送h264裸流。
68.关闭实时流的过程包括步骤19至步骤27,具体包括:
69.步骤19:客户端向mv_mu_stream组件发送关闭实时浏览消息。
70.步骤20:mv_access_control组件接收到mv_mu_stream组件发送的svs_msg_type_mdu_session_teardown_req关闭会话消息请求后。
71.步骤21:mv_access_control组件停止会话。
72.步骤22:mv_access_control组件向前端设备发送bye消息。
73.步骤23:前端设备向mv_access_control组件返回正确消息(即200ok消息)。
74.步骤24:其他同事mv_access_control组件向mv_mu_stream组件发送svs_msg_type_mdu_session_teardown_resp消息。
75.步骤25:mv_mu_stream组件定时向mv_access_control组件上报全部会话流信息。
76.步骤26:mv_mu_stream组件向mv_access_control组件发送关闭rtp传输流请求消息svs_msg_type_mu_session_report_req。
77.步骤27:mv_access_control组件向业务控制系统发送http消息。
78.根据上述实时流的快速响应机制得到的测试效果图如图2所示,在不阻塞gb28181通讯协议和rtsp通讯协议两类消息交互的情况下实现联动,接收到rtsp消息中的describe消息后去触发gb28181消息的下发,通过函数回调的方式实现,如下所示:
79.iaccesscontrolmanager::instance().asyncrequest(odevmediarequest,cbusinessmanager::asyncresponse,&cbusinessmanager::instance())
80.如果资源中当前前端设备没有发流,则中台发送请求消息到前端设备实现gb28181消息的发送。
81.以上为本技术示范性实施例,本技术的保护范围由权利要求书及其等效物限定。