一种基于分布式管理的视频调度引擎装置与方法转让专利

申请号 : CN202210221915.X

文献号 : CN114327838B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李鹏飞

申请人 : 中电云数智科技有限公司

摘要 :

本发明提供一种基于分布式管理的视频调度引擎装置与方法,该装置包括:任务解析模块,用于获取存储任务开启请求的参数以及任务所需要开启的摄像头的参数;确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;任务分发模块,用于将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;摄像头管理模块,用于对任务管理模块提交的摄像头进行分布式管理;摄像头执行模块,用于开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息。本发明能实现资源更加高效被利用的视频调度。

权利要求 :

1.一种基于分布式管理的视频调度引擎装置,其特征在于,所述基于分布式管理的视频调度引擎装置包括:任务解析模块,用于获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;

任务分发模块,用于扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;

摄像头管理模块,用于对任务管理模块提交的摄像头进行分布式管理;

摄像头执行模块,用于开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息;

摄像头执行模块具体用于:

开启摄像头拉流进程;

判断是否达到该摄像头的最小抽帧周期,当达到最小抽帧周期时,对摄像头进行抽帧;

根据该摄像头下挂载的每个任务参数的执行周期计算该摄像头下每个任务的抽帧周期;

判断是否达到某个任务的抽帧周期,当达到某个任务的抽帧周期时,计算该任务的路由信息;

根据路由信息向该任务的系统消息队列发送图片消息。

2.根据权利要求1所述的基于分布式管理的视频调度引擎装置,其特征在于,任务解析模块具体用于:获取摄像头id、name和url参数以及任务id参数;

以摄像头id为key存储该摄像头下所有的任务id;

以任务id为key存储该任务的参数;

将摄像头的id拼接“period”字符串作为存储数据的键,将该摄像头的最小抽帧周期作为值,以摄像头id+“period”为key存储该摄像头的最小抽帧周期;

将摄像头的id拼接“update”字符串作为存储数据的键,将是否需要重新计算摄像头参数进行更新的标志位作为值,以摄像头id+“update”为key存储该摄像头是否需要更新参数。

3.根据权利要求2所述的基于分布式管理的视频调度引擎装置,其特征在于,摄像头管理模块具体用于:从消息队列中读取需要开启的摄像头信息;

将需要开启的摄像头加入管理列表;

读取管理列表中每个摄像头的信息,判断该摄像头的状态是否正常,当摄像头的状态不正常时,重新开启拉流进程;

判断该管理模块是否压力过大,当该管理模块压力过大时,将部分摄像头移交到节点压力小的其他管理模块;

判断管理模块是否异常,当管理模块异常时,将所有摄像头移交到其他管理模块;

判断管理节点是否需要开启高性能模式,当管理节点需要开启高性能模式时,将该管理模块低优先级的摄像头移交到其他管理模块。

4.根据权利要求3所述的基于分布式管理的视频调度引擎装置,其特征在于,所述装置还包括任务监控模块,用于从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息。

5.根据权利要求4所述的基于分布式管理的视频调度引擎装置,其特征在于,所述装置还包括任务清理模块,用于从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息。

6.一种基于分布式管理的视频调度引擎方法,其特征在于,所述基于分布式管理的视频调度引擎方法包括:任务解析模块获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;

任务分发模块扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;

摄像头管理模块对任务管理模块提交的摄像头进行分布式管理;

摄像头执行模块开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息;

任务监控模块从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息;

任务清理模块从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息;

其中,摄像头执行模块开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,具体包括:开启摄像头拉流进程;

判断是否达到该摄像头的最小抽帧周期,当达到最小抽帧周期时,对摄像头进行抽帧;

根据该摄像头下挂载的每个任务参数的执行周期计算该摄像头下每个任务的抽帧周期;

判断是否达到某个任务的抽帧周期,当达到某个任务的抽帧周期时,计算该任务的路由信息;

根据路由信息向该任务的系统消息队列发送图片消息。

7.根据权利要求6所述的基于分布式管理的视频调度引擎方法,其特征在于,任务解析模块获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存具体包括:获取摄像头id、name和url参数以及任务id参数;

以摄像头id为key存储该摄像头下所有的任务id;

以任务id为key存储该任务的参数。

8.根据权利要求6所述的基于分布式管理的视频调度引擎方法,其特征在于,摄像头管理模块对任务管理模块提交的摄像头进行分布式管理,具体包括:从消息队列中读取需要开启的摄像头信息;

将需要开启的摄像头加入管理列表;

读取管理列表中每个摄像头的信息,判断该摄像头的状态是否正常,当摄像头的状态不正常时,重新开启拉流进程;

判断该管理模块是否压力过大,当该管理模块压力过大时,将部分摄像头移交到节点压力小的其他管理模块;

判断管理模块是否异常,当管理模块异常时,将所有摄像头移交到其他管理模块;

判断管理节点是否需要开启高性能模式,当管理节点需要开启高性能模式时,将该管理模块低优先级的摄像头移交到其他管理模块。

说明书 :

一种基于分布式管理的视频调度引擎装置与方法

技术领域

[0001] 本发明涉及视频调度技术领域,尤其涉及一种基于分布式管理的视频调度引擎装置与方法。

背景技术

[0002] 目前通用的视频调度引擎主要采用以下方案进行:对每个摄像头配置固定的参数,在开启摄像头任务后,摄像头根据参数将视频流下发给需要处理的业务系统。上述现有方案在实际应用中存在以下不足:1)由于摄像头是根据预先配置的固定参数将视频流下发到各个业务系统,所以会导致同一路视频流被不同的业务系统重复拉取,从而对服务器的网络带宽资源(IO)造成较大的浪费;2)由于摄像头的参数是预先配置的,因此在应用时无法进行动态的调整,当对摄像头新增业务时,系统需要关掉所有任务并重新配置更新的参数,然后再重启,效率不高;3)视频调度引擎与业务系统之间强耦合,需要在不同的业务系统之间做适配;4)无法实现不同业务系统以及不同摄像头拉流的优先级处理;5)无法根据任务数量以及摄像头的数量对系统的资源进行动态的调整。
[0003] 因此,如何提供一种视频调度引擎方法,实现资源更加高效被利用的视频调度,成为亟待解决的技术问题。

发明内容

[0004] 有鉴于此,本发明提供一种基于分布式管理的视频调度引擎方法与装置,实现高效的视频调度。
[0005] 一方面,本发明提供一种基于分布式管理的视频调度引擎装置,包括:
[0006] 任务解析模块,用于获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;
[0007] 任务分发模块,用于扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;
[0008] 摄像头管理模块,用于对任务管理模块提交的摄像头进行分布式管理;
[0009] 摄像头执行模块,用于开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息。
[0010] 进一步的,本发明基于分布式管理的视频调度引擎装置中的任务解析模块具体用于:
[0011] 获取摄像头id、name和url参数以及任务id参数;
[0012] 以摄像头id为key存储该摄像头下所有的任务id;
[0013] 以任务id为key存储该任务的参数;
[0014] 将摄像头的id拼接“period”字符串作为存储数据的键,将该摄像头的最小抽帧周期作为值,以摄像头id+“period”为key存储该摄像头的最小抽帧周期;
[0015] 将摄像头的id拼接“update”字符串作为存储数据的键,将是否需要重新计算摄像头参数进行更新的标志位作为值,以摄像头id+“update”为key存储该摄像头是否需要更新参数。
[0016] 进一步的,本发明基于分布式管理的视频调度引擎装置中的摄像头管理模块具体用于:
[0017] 从消息队列中读取需要开启的摄像头信息;
[0018] 将需要开启的摄像头加入管理列表;
[0019] 读取管理列表中每个摄像头的信息,判断该摄像头的状态是否正常,当摄像头的状态不正常时,重新开启拉流进程;
[0020] 判断该管理模块是否压力过大,当该管理模块压力过大时,将部分摄像头移交到节点压力小的其他管理模块;
[0021] 判断管理模块是否异常,当管理模块异常时,将所有摄像头移交到其他管理模块;
[0022] 判断管理节点是否需要开启高性能模式,当管理节点需要开启高性能模式时,将该管理模块低优先级的摄像头移交到其他管理模块。
[0023] 进一步的,本发明基于分布式管理的视频调度引擎装置中的摄像头执行模块具体用于:
[0024] 开启摄像头拉流进程;
[0025] 判断是否达到该摄像头的最小抽帧周期,当达到最小抽帧周期时,对摄像头进行抽帧;
[0026] 根据该摄像头下挂载的每个任务参数的执行周期计算该摄像头下每个任务的抽帧周期;
[0027] 判断是否达到某个任务的抽帧周期,当达到某个任务的抽帧周期时,计算该任务的路由信息;
[0028] 根据路由信息向该任务的系统消息队列发送图片消息。
[0029] 进一步的,本发明基于分布式管理的视频调度引擎装置还包括任务监控模块,用于从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息。
[0030] 进一步的,本发明基于分布式管理的视频调度引擎装置还包括任务清理模块,用于从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息。
[0031] 另一方面,本发明提供了一种基于分布式管理的视频调度引擎方法,包括:
[0032] 任务解析模块获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;
[0033] 任务分发模块扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;
[0034] 摄像头管理模块对任务管理模块提交的摄像头进行分布式管理;
[0035] 摄像头执行模块开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息;
[0036] 任务监控模块从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息;
[0037] 任务清理模块从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息。
[0038] 进一步的,任务解析模块获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存具体包括:
[0039] 获取摄像头id、name和url参数以及任务id参数;
[0040] 以摄像头id为key存储该摄像头下所有的任务id;
[0041] 以任务id为key存储该任务的参数。
[0042] 进一步的,摄像头管理模块对任务管理模块提交的摄像头进行分布式管理,具体包括:
[0043] 从消息队列中读取需要开启的摄像头信息;
[0044] 将需要开启的摄像头加入管理列表;
[0045] 读取管理列表中每个摄像头的信息,判断该摄像头的状态是否正常,当摄像头的状态不正常时,重新开启拉流进程;
[0046] 判断该管理模块是否压力过大,当该管理模块压力过大时,将部分摄像头移交到节点压力小的其他管理模块;
[0047] 判断管理模块是否异常,当管理模块异常时,将所有摄像头移交到其他管理模块;
[0048] 判断管理节点是否需要开启高性能模式,当管理节点需要开启高性能模式时,将该管理模块低优先级的摄像头移交到其他管理模块。
[0049] 进一步的,摄像头执行模块开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,具体包括:
[0050] 开启摄像头拉流进程;
[0051] 判断是否达到该摄像头的最小抽帧周期,当达到最小抽帧周期时,对摄像头进行抽帧;
[0052] 根据该摄像头下挂载的每个任务参数的执行周期计算该摄像头下每个任务的抽帧周期;
[0053] 判断是否达到某个任务的抽帧周期,当达到某个任务的抽帧周期时,计算该任务的路由信息;
[0054] 根据路由信息向该任务的系统消息队列发送图片消息。
[0055] 本发明基于分布式管理的视频调度引擎方法与装置,具有以下有益效果:1)对一路摄像头只拉取一次流,根据不同任务不同周期通过抽帧进行分发的方式避免了不同任务多次拉取同一路流对IO资源造成的浪费;2)采用了动态更新的方式实时检测摄像头下挂载的任务参数,可以做到不停止读流而执行新的任务分发策略;3)视频调度引擎与业务系统松耦合,只关注摄像头的周期和路由信息,业务参数透传到各业务系统进行解析;4)根据任务的优先级不同可以自动开启高性能模式保证任务高优先级执行;5)由于采用的了分布式的摄像头管理和摄像头执行模块因此在机器资源允许的情况下可以根据执行的任务数量以及需要开启的摄像头数量动态的调整资源。

附图说明

[0056] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0057] 图1为根据本发明示例性第一实施例的基于分布式管理的视频调度引擎装置的结构框图。
[0058] 图2为根据本发明示例性第二实施例的基于分布式管理的视频调度引擎方法的流程图。
[0059] 图3为根据本发明示例性第三实施例的基于分布式管理的视频调度引擎方法的流程图。
[0060] 图4为根据本发明示例性第四实施例的基于分布式管理的视频调度引擎方法的流程图。
[0061] 图5为根据本发明示例性第五实施例的基于分布式管理的视频调度引擎方法的流程图。

具体实施方式

[0062] 下面结合附图对本发明实施例进行详细描述。
[0063] 需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0064] 需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
[0065] 图1为根据本发明示例性第一实施例的基于分布式管理的视频调度引擎装置的结构框图。如图1所示,本实施例中基于分布式管理的视频调度引擎装置包括:
[0066] 任务解析模块,用于获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;
[0067] 任务分发模块,用于扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;
[0068] 摄像头管理模块,用于对任务管理模块提交的摄像头进行分布式管理;
[0069] 摄像头执行模块,用于开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息;
[0070] 任务监控模块,用于从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息;
[0071] 任务清理模块,用于从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息。
[0072] 图2为根据本发明示例性第二实施例的基于分布式管理的视频调度引擎装置中任务解析模块的的运行流程图。图2为图1所示装置的优选实施方式。如图2所示,任务解析模块,具体用于:
[0073] 获取摄像头id(摄像头的编号)、name(摄像头的名称)和url(摄像头的地址)参数以及任务id(任务的编号)参数;
[0074] 以摄像头id为key存储该摄像头下所有的任务id;
[0075] 以任务id为key存储该任务的参数;
[0076] 将摄像头的id拼接“period”字符串作为存储数据的键,将该摄像头的最小抽帧周期作为值,以摄像头id+“period”为key存储该摄像头的最小抽帧周期;
[0077] 将摄像头的id拼接“update”字符串作为存储数据的键,将是否需要重新计算摄像头参数进行更新的标志位作为值,以摄像头id+“update”为key存储该摄像头是否需要更新参数。
[0078] 本实施例中,一个摄像头下可能会挂载多个任务,每个任务拥有不同的抽帧周期,最小的抽帧周期用来满足所有的任务抽帧需求。因此,本实施例根据摄像头下挂载的所有任务参数中的执行周期确定该摄像头的最小抽帧周期。
[0079] 本实施例中,摄像头可以根据需要动态地挂载或删除任务,每次挂载或删除任务时,摄像头都需要重新计算最小抽帧周期等参数,因此需要设置是否更新的标志位,标志位1为需要计算更新,标志位0为不需要计算更新。
[0080] 图3为根据本发明示例性第三实施例的基于分布式管理的视频调度引擎装置中摄像头管理模块的运行流程图。图3为图1和图2所示装置的优选实施方式。如图3所示,摄像头管理模块,具体用于:
[0081] 从消息队列(Rabbitmq)中读取需要开启的摄像头信息;
[0082] 将需要开启的摄像头加入管理列表;
[0083] 读取管理列表中每个摄像头的信息,判断该摄像头的状态是否正常,当摄像头的状态不正常时,重新开启拉流进程;
[0084] 判断该管理模块是否压力过大,当该管理模块压力过大时,将部分摄像头移交到节点压力小的其他管理模块;
[0085] 判断管理模块是否异常,当管理模块异常时,将所有摄像头移交到其他管理模块;
[0086] 判断管理节点是否需要开启高性能模式,当管理节点需要开启高性能模式时,将该管理模块低优先级的摄像头移交到其他管理模块。
[0087] 本实施例的摄像头管理模块主要是用于管理需要开启读流的摄像头,由于实际生产环境中摄像头的个数可能很多,因此本实施例可以实现同时并行开启多个摄像头管理模块,将需要开启读流的摄像头平均分配到每个摄像头管理模块中实现分布式的管理,并根据开启摄像头的数量动态地增加或者减少管理模块数量,使资源达到最优利用。
[0088] 同时本实施例的摄像头管理模块内部实现了负载均衡功能,当某一个管理模块出现异常或压力过大时,该管理模块会自动将其管理的摄像头移交到其他管理模块进行管理,并且摄像头管理模块也实现了高性能模式,当某一路摄像头的优先级较高时,管理模块会自动将低优先级的摄像头移交到其他管理低优先级摄像头的管理模块,只保留高优先级的摄像头单独处理;摄像头管理模块同时也对开启异常的摄像头进行捕获并实现重新开启。
[0089] 本实施例中重新开启拉流进程可以为一次或多次,每一次摄像头发生异常,都会增加一次该摄像头的异常次数;摄像头在异常后下一次重新开启拉流进程的时间间隔为当前该摄像头的异常次数乘以5秒。
[0090] 本实施例当该摄像头的执行模块拉取视频流失败时,会改变该摄像头的状态为异常,由摄像头管理模块进行捕获。
[0091] 图4为根据本发明示例性第四实施例的基于分布式管理的视频调度引擎装置中摄像头执行模块的运行流程图。图4为图1所示装置的优选实施方式。如图4所示,摄像头执行模块,具体用于:
[0092] 开启摄像头拉流进程;
[0093] 判断是否达到该摄像头的最小抽帧周期,当达到最小抽帧周期时,对摄像头进行抽帧;
[0094] 根据该摄像头下挂载的每个任务参数的执行周期计算该摄像头下每个任务的抽帧周期;
[0095] 判断是否达到某个任务的抽帧周期,当达到某个任务的抽帧周期时,计算该任务的路由信息;
[0096] 根据路由信息向该任务的系统消息队列发送图片消息。
[0097] 图5为根据本发明示例性第五实施例的基于分布式管理的视频调度引擎装置中任务清理模块的运行流程图,图5为图1所示装置的优选实施方式。如图5所示,任务清理模块从redis扫描所有摄像头信息,判断摄像头是否挂载了任务,对不再挂载任务的摄像头进程及所有该摄像头的信息进行清理。
[0098] 本发明示例性第六实施例涉及基于分布式管理的视频调度引擎方法,包括:
[0099] 采用任务解析模块获取任务开启请求的参数以及任务所需要开启的摄像头的参数,将所述参数记录并存入redis缓存;并根据摄像头下挂载的所有任务参数中的任务的执行周期确定该摄像头的最小抽帧周期,存储该满足所有任务抽帧需求的最小抽帧周期;
[0100] 采用任务分发模块扫描redis缓存中所有挂载任务的摄像头,将挂载了任务但是没有开启的摄像头通过消息队列的形式提交给摄像头管理模块进行管理;
[0101] 采用摄像头管理模块对任务管理模块提交的摄像头进行分布式管理;
[0102] 采用摄像头执行模块开启摄像头拉流进行抽帧,根据摄像头不同任务的执行周期和路由参数向处理该任务的业务系统队列分发图片,同时向摄像头管理模块报告异常信息;
[0103] 采用任务监控模块从redis中的读取任务与摄像头的状态,监督任务以及任务下摄像头的异常信息;
[0104] 采用任务清理模块从redis中扫描所有摄像头信息,清理该摄像头进程以及所有关于该摄像头存储的信息。
[0105] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。