一种多路视频流显示系统及方法与流程

文档序号:31359665发布日期:2022-08-31 14:20阅读:46来源:国知局
一种多路视频流显示系统及方法与流程

1.本技术涉及视频监控技术领域,尤其涉及一种多路视频流显示系统及方法。


背景技术:

2.在网络日益发展的背景下,视频监控已经广泛应用于很多的场景中,人们可以在pc机、android手机及苹果手机上很方便的打开客户端浏览自己需要的摄像头。远程视频监控系统打破了传统监控图像无法进行无线网络传输的弊端,为人们提供了一个安全、客户端和媒体服务器之间一直以来是通过保活消息来保持连接,相互之间有正常交互消息则说明客户端和媒体服务器正常连接。但是在真正的运行场景中客户端和媒体服务器可以分布式部署到不同的硬件设备上,设备之间因为网络环境和本服务的运行环境而导致客户端和媒体服务器之间的连接状态和服务在硬件设备上的运行状态有多种情况,因此亟需一套机制来保障客户端和媒体服务器之间的状态交换和数据高效的联动。


技术实现要素:

3.本技术提供了一种多路视频流显示系统及方法,其技术目的是在客户端获取和显示监控视频的过程中,提高客户端和媒体服务器之间状态交换和数据交换的效率。
4.本技术的上述技术目的是通过以下技术方案得以实现的:
5.一种多路视频流显示系统,包括客户端、业务侧和媒体服务器,所述客户端包括显示模块和媒体能力引擎模块,所述显示模块内设有窗口管理器,所述媒体能力引擎模块包括依次连接的功能模块、逻辑模块和渲染模块;所述渲染模块与所述显示模块连接;
6.所述窗口管理器与所述业务侧和所述逻辑模块均连接;所述媒体服务器与所述业务侧连接;
7.所述功能模块和所述媒体服务器通过rtsp协议建立连接,所述媒体服务器的rtp数据流通过所述功能模块传输至所述客户端。
8.一种使用如上述多路视频流显示系统的显示方法,包括:
9.s1:业务侧通过http协议定时的向客户端上报设备列表,该设备列表中包括所有设备的在线状态和设备信息;客户端通过窗口管理器在显示模块显示所有设备的在线状态;
10.s2:从设备列表中选择在线设备,通过窗口管理器的窗口id值开启实时浏览功能;所述窗口管理器管理36个窗口,每个窗口对应不同的窗口id;
11.s3:逻辑模块初始化接口,并根据不同的平台初始化不同的接口;
12.s4:窗口管理器通过窗口id在逻辑模块中查询是否有已经启动的播放功能部件,若没有则在逻辑模块中启动一个播放功能部件;通过逻辑模块和媒体服务器建立rtsp信令链接,链接成功后,媒体服务器通过udp/tcp通道发送实时流给逻辑模块;
13.s5:数据接收部件通过功能模块的数据回调接口s5接收到实时rtp数据,并转发给播放功能部件;
14.s6:播放功能部件将rtp数据转发给数据输出部件,数据输出部件通过任务类型判断是实时流播放还是文件存储;若是实时流播放,则将rtp数据存放到内存中,并通过解码线程解码音视频数据;若是文件存储,则调用媒体功能模块接口s6,将音视频数据保存为mp4文件;
15.s7:解码线程将不断的从内存中取出rtp数据,并将rtp数据解码为yuv数据;获取到一帧yuv数据后,将yuv数据传递到不同的功能接口进行渲染以实现在不同的系统进行播放。
16.本技术的有益效果在于:本技术所述的多路视频流显示系统及方法,提供给客户端的数据流能够在不同的系统(windows、android、ios)上进行迁移,其开发更加便捷;rtsp协议的建连和rtp数据的传输是通过功能模块独立实现,增加了代码的简洁性,增强了代码的鲁棒性;功能模块提供了数据和状态的回调接口,使得在会话播放功能部件中处理数据和感知前端设备的状态更加便捷;功能模块能够及时感知到与媒体服务器之间的连接状态,在感知到连接成功状态时及时开辟资源,等待数据的接收,若感知到会话关闭、连接超时、连接失败、rtsp信令超时等则及时关闭资源;接收数据和接收状态位为异步执行,因此数据回调联动连接状态回调能够提供一种高效的解决方案,既能随时感知功能模块和媒体服务器之间的连接状态,也能根据状态来开辟内存和网络资源,并且在接收媒体数据的时候也能正常工作。
附图说明
17.图1为本技术所述系统结构示意图;
18.图2为tcp链路建立的流程图。
具体实施方式
19.下面将结合附图对本技术技术方案进行详细说明。
20.如图1所示,一种多路视频流显示系统,包括客户端、业务侧和媒体服务器,所述客户端包括显示模块和媒体能力引擎模块,所述显示模块内设有窗口管理器,所述媒体能力引擎模块包括依次连接的功能模块、逻辑模块和渲染模块;所述渲染模块与所述显示模块连接。
21.所述客户端包括android系统、ios系统和windows系统等。
22.所述窗口管理器与所述业务侧和所述逻辑模块均连接;所述媒体服务器与所述业务侧连接。
23.所述功能模块和所述媒体服务器通过rtsp协议建立连接,所述媒体服务器的rtp数据流通过所述功能模块传输至所述客户端。
24.功能模块对外提供了一个函数指针结构体,如下:
25.[0026][0027]
handle_client_status为返回状态的函数指针,handle_client_get_buffer为返回视频数据长度的函数指针,handle_client_media为返回视频数据的函数指针,ctx为传输句柄的指针。
[0028]
功能模块和媒体服务器之间建立rtsp协议通讯的流程如图2所示,具体包括:
[0029]
(1)初始化多路网络参数,等待功能模块和媒体服务器之间的tcp网络连接;
[0030]
(2)客户端创建客户端句柄,作为当前客户端的标识;功能模块创建两个个函数指针,一个指向接收数据函数,一个指向连接状态函数;
[0031]
(3)设置当前客户端的传输模式为tcp/udp;
[0032]
(4)功能模块和媒体服务器之间的tcp链路连接成功;
[0033]
(5)tcp链路接收来自媒体服务器发送的rtp报文;
[0034]
(6)tcp链路判断客户端和媒体服务器之间的链接状态。
[0035]
作为具体实施例地,所述逻辑模块包括数据接收部件、数据输出部件和播放功能部件;所述数据接收部件接收来自所述功能模块的rtp数据流,经所述播放功能部件转至所述数据输出部件,再经所述渲染模块渲染后在所述显示模块显示。
[0036]
作为具体实施例地,所述数据接收部件包括实时流接收单元和文件流接收单元,所述数据输出部件包括实时流输出单元和文件流输出单元。
[0037]
具体地,数据接收部件和数据输出部件都是播放功能部件下的一个成员变量。数据接收部件通过客户端发送的请求报文的type类型,能够确定是实时流还是录像,从而在播放功能部件初始化时确定实例化实时流接收部件还是实例化文件流接收部件。数据输出部件通过客户端发送的请求报文的type类型,确定是实时流解码还是将帧数据写入mp4中,在播放功能部件初始化时确定实例化解码能力部件还是实例化存储能力部件。
[0038]
所述功能模块向所述逻辑模块暴露6个api接口,包括接口s1、接口s2、接口s3、接口s4、接口s5、接口s6和接口s7。
[0039]
所述接口s1用于创建所述客户端的rtsp协议,启动所述功能模块和所述媒体服务器之间的链接。
[0040]
所述接口s2用于设置所述功能模块和所述媒体服务器之间的传输模式;所述传输模式包括tcp模式。
[0041]
所述接口s3用于实现所述功能模块和所述媒体服务器之间的通讯暂停。
[0042]
所述接口s4用于实现所述客户端的倍速播放。
[0043]
所述接口s5用于功能模块将数据回调给逻辑模块。具体地,功能模块提供了一个返回数据指针b,ctx是传输句柄的指针。
[0044]
所述接口s6用于功能模块将状态信息回调给逻辑模块。具体地,功能模块提供了一个返回状态的函数指针a,连接状态的值如下所示:
[0045]
[0046][0047]
所述接口s7用于实现音视频数据的下载。
[0048]
本发明所述的显示系统能够实现同一套系统能够在android、ios和windows使用的系统,并且能够实现同时拉取36路实时视频流,实现多路视频流录像的下载,同时实现36路播放窗口。
[0049]
安卓的手机侧的客户端、苹果的手机侧客户端和pc侧的客户端,通过分别调用jni接口、c接口实现和能力基座之间的数据互通。
[0050]
本技术所述的显示方法,具体过程包括:
[0051]
s1:业务侧通过http协议定时的向客户端上报设备列表,该设备列表中包括所有设备的在线状态和设备信息;客户端通过窗口管理器在显示模块显示所有设备的在线状态;
[0052]
s2:从设备列表中选择在线设备,通过窗口管理器的窗口id值开启实时浏览功能;所述窗口管理器管理36个窗口,每个窗口对应不同的窗口id。
[0053]
媒体能力引擎模块向客户端暴露3个api接口,每个api接口均封装成c接口形式,以实现跨平台的调用。该3个api接口包括初始化接口、功能接口和去初始化接口;其中,功能接口包括opengl接口、ffmpeg接口、sdl接口和其他第三方接口。
[0054]
s3:逻辑模块初始化接口,并根据不同的平台初始化不同的接口。
[0055]
具体地,android和ios初始化opengl接口,windows初始化ffmpeg接口,sdl功能接口的初始化以及第三方库的初始化等。根据传进来的参数判断进行如下的事件类型,全局定义的请求类型:
[0056]
type_realvideo_start=1001,//实时浏览开始
[0057]
type_realvideo_stop=1002,//实时浏览停止
[0058]
type_realvideo_pause=1003,//实时浏览暂停
[0059]
type_realvideo_resume=1004,//实时浏览继续
[0060]
s4:窗口管理器通过窗口id在逻辑模块中查询是否有已经启动的播放功能部件,若没有则在逻辑模块中启动一个播放功能部件;通过逻辑模块和媒体服务器建立rtsp信令链接,链接成功后,媒体服务器通过udp/tcp通道发送实时流给逻辑模块。
[0061]
s5:数据接收部件通过功能模块的数据回调接口s5接收到实时rtp数据,并转发给播放功能部件。
[0062]
s6:播放功能部件将rtp数据转发给数据输出部件,数据输出部件通过任务类型判断是实时流播放还是文件存储;若是实时流播放,则将rtp数据存放到内存中,并通过解码线程解码音视频数据;若是文件存储,则调用接口s7,将音视频数据下载并保存为mp4文件。
[0063]
s7:解码线程将不断的从内存中取出rtp数据,并将rtp数据解码为yuv数据;获取到一帧yuv数据后,将yuv数据传递到不同的功能接口进行渲染以实现在不同的系统进行播放。在接口sdl中进行渲染成能够在windows上播放的音视频数据,或者将数据传递到接口opengl中渲染成能够在android上播放的音视频数据。
[0064]
以上为本技术示范性实施例,本技术的保护范围由权利要求书及其等效物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1