发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于单个ffmpeg进程并行处理多个视频源的方法、软件系统、终端,通过并行处理的方式避免了针对每个输入视频源的分析处理都要开启一个独立ffmpeg进程的情况,从而有效地减少了计算机系统的资源消耗,提升了系统性能。
为实现上述目的及其他相关目的,本发明提供一种基于单个ffmpeg进程并行处理多个视频源的方法,包括以下步骤:构建StreamingManager类、Worker类和Reaper类;基于所述StreamingManager类将多个视频源的处理任务映射至所述Worker类中,并将所述Reaper类回传的jpeg格式图像文件发送至后续处理程序;基于所述Worker类生成单个ffmpeg进程的命令行参数,以使所述ffmpeg进程从所述多个视频源中抽取包含有效信息的jpeg格式图像文件;基于所述Reaper类将抽取的jpeg格式图像文件回传至所述StreamingManager类。
于本发明一实施例中,基于所述Worker类将每个视频源中抽取的jpeg格式图像文件存储在一个单独的输出文件夹。
于本发明一实施例中,基于所述Reaper类监控所述输出文件夹,并通过第一回传接口将抽取的jpeg格式图像文件回传至所述StreamingManager类。
于本发明一实施例中,还包括基于所述Reaper类监测已崩溃的视频源,并通过第二回传接口通知所述StreamingManager类针对所述已崩溃的视频源重新建立处理任务至所述Worker 类。
对应地,本发明提供一种基于单个ffmpeg进程并行处理多个视频源的系统,包括构建模块、驱动模块、抽取模块和回传模块;
所述构建模块用于构建StreamingManager类、Worker类和Reaper类;
所述驱动模块用于基于所述StreamingManager类将多个视频源的处理任务映射至所述 Worker类中,并将所述Reaper类回传的jpeg格式图像文件发送至后续处理程序;
所述抽取模块用于基于所述Worker类生成单个ffmpeg进程的命令行参数,以使所述 ffmpeg进程从所述多个视频源中抽取包含有效信息的jpeg格式图像文件;
所述回传模块了用于基于所述Reaper类将抽取的jpeg格式图像文件回传至所述StreamingManager类。
于本发明一实施例中,基于所述Worker类将每个视频源中抽取的jpeg格式图像文件存储在一个单独的输出文件夹。
于本发明一实施例中,基于所述Reaper类监控所述输出文件夹,并通过第一回传接口将抽取的jpeg格式图像文件回传至所述StreamingManager类。
于本发明一实施例中,还包括基于所述Reaper类监测已崩溃的视频源,并通过第二回传接口通知所述StreamingManager类针对所述已崩溃的视频源重新建立处理任务至所述Worker 类。
本发明提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的基于单个ffmpeg进程并行处理多个视频源的方法。
最后,本发明提供一种基于单个ffmpeg进程并行处理多个视频源的终端,包括:处理器及存储器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器存储的计算机程序,以使所述基于单个ffmpeg进程并行处理多个视频源的终端执行上述的基于单个ffmpeg进程并行处理多个视频源的方法。
如上所述,本发明的基于单个ffmpeg进程并行处理多个视频源的方法、软件系统、终端,具有以下有益效果:
(1)通过并行处理的方式避免了针对每个输入视频源的分析处理都要开启一个独立 ffmpeg进程的情况;
(2)有效降低了程序运行对系统CPU、内存等硬件资源的需求,提升了进行视频信息智能分析的计算机软件系统的运行性能。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的基于单个ffmpeg进程并行处理多个视频源的方法、软件系统、介质、终端,通过从从多个视频源中抽取包含有效信息的jpeg格式图像文件的方式,实现了基于单个ffmpeg 进程对多个视频源的并行处理,避免了针对每个输入视频源的分析处理都要开启一个独立 ffmpeg进程的情况,从而有效地减少了计算机系统的资源消耗,提升了进行视频信息智能分析的计算机软件系统的运行性能。
如图1和图2所示,于一实施例中,本发明的基于单个ffmpeg进程并行处理多个视频源的方法包括以下步骤:
步骤S1、构建StreamingManager类、Worker类和Reaper类。
具体地,本发明的基于单个ffmpeg进程并行处理多个视频源的方法将并行功能设计分散到几个不同的实现类里面,具体包括StreamingManager类、Worker类和Reaper类。
步骤S2、基于所述StreaingManager类将多个视频源的处理任务映射至所述Worker类中,并将所述Reaper类回传的jpeg格式图像文件发送至后续处理程序。
具体地,StreamingManager类是进行视频码流处理过程的对外接口和驱动者(Driver),用于负责创建其他的类实例,决定视频源的处理任务StreamingTask映射到每个Worker类实例的分布,以及负责处理从Reaper类实例回传的jpeg格式图像文件,并将jpeg格式图像文件回传给调用它的后续处理程序。优选地,所述StreamingManager类还用于管理Worker类实例的状态,包括运行、停止、重启中的一种或多种组合。
其中,所述多个视频源包括至少一个视频源。
步骤S3、基于所述Worker类生成单个ffmpeg进程的命令行参数,以使所述ffmpeg进程从所述多个视频源中抽取包含有效信息的jpeg格式图像文件。
具体地,所述Worker类根据StreamingManager类所分配的视频源的处理任务StreamingTask,生成具体的单个ffmpeg进行命令行参数,并创建ProcessRunner类实例,来负责管理ffmpeg进程的运行。ffmpeg进程的运行可以从多个视频源中抽取包含有效信息的jpeg格式图像文件。优选地,每个视频源有设置有单独的jpeg图像输出文件夹。
其中,一个Worker类实例可以执行多个视频源的处理任务StreamingTask。多个视频源的处理任务StreamingTask对应一个ProcessRunner类实例和一个ffmpeg进程。每个视频源的处理任务StreamingTask都有自己的jpeg图像输出文件目录。每个视频源的处理任务 StreamingTask的id和对应的视频源id是一致的,从而便于进行索引。
步骤S4、基于所述Reaper类将抽取的jpeg格式图像文件回传至所述StreamingManager类。
具体地,所述Reaper类监控视频源的处理任务StreamingTask的jpeg图像输出文件目录,并将产生的jpeg格式图像文件回传至回传接口A。
优选地,所述Reaper类实例还能够监测已崩溃(frozen)的视频源。若发现某个视频源在一段时间内没有生成jpeg格式图像文件,视频源的处理任务StreamingTask判定该视频源已崩溃,则会根据该视频源注册时系统分配的回传接口B,通知所述StreamingManager类进行处理。对于已崩溃的视频源,所述StreamingManager类重启对应的Worker类实例,Worker 类实例会相应重启ffmpeg进程。
下面通过具体实施例来进一步说明本发明的基于单个ffmpeg进程并行处理多个视频源的方法。具体地,在包含有8路720P高清输入视频源的应用场景中,设置单个ffmpeg进程并行分析处理4路输入视频源,每秒从每路输入视频源中抽取4帧图像。经过实际运行测试,软件系统的CPU使用率在60%左右,内存占用3.2GB左右。而在未采用本发明的基于单个 ffmpeg进程并行处理多个视频源的方法时,8路输入视频源需要并行启动8个ffmpeg进程进行处理,同样的应用场景测试,软件系统的多核CPU使用率在200%左右,内存占用5.3GB 左右。由上可知,本发明的基于单个ffmpeg进程并行处理多个视频源的方法明显降低了系统的CPU和内存资源的占用需求,提升了系统运行效率。
如图3所示,于一实施例中,本发明的基于单个ffmpeg进程并行处理多个视频源的系统包括构建模块31、驱动模块32、抽取模块33和回传模块34。
构建模块31用于构建StreamingManager类、Worker类和Reaper类。
具体地,本发明的基于单个ffmpeg进程并行处理多个视频源的方法将并行功能设计分散到几个不同的实现类里面,具体包括StreamingManager类、Worker类和Reaper类。
驱动模块32与所述构建模块31相连,用于基于所述StreamingManager类将多个视频源的处理任务映射至所述Worker类中,并将所述Reaper类回传的jpeg格式图像文件发送至后续处理程序。
具体地,StreamingManager类是进行视频码流处理过程的对外接口和驱动者(Driver),用于负责创建其他的类实例,决定视频源的处理任务StreamingTask映射到每个Worker类实例的分布,以及负责处理从Reaper类实例回传的jpeg格式图像文件,并将jpeg格式图像文件回传给调用它的后续处理程序。优选地,所述StreamingManager类还用于管理Worker类实例的状态,包括运行、停止、重启中的一种或多种组合。
其中,所述多个视频源包括至少一个视频源。
抽取模块33与构建模块31和驱动模块32相连,用于基于所述Worker类生成单个ffmpeg 进程的命令行参数,以使所述ffmpeg进程从所述多个视频源中抽取包含有效信息的jpeg格式图像文件。
具体地,所述Worker类根据StreamingManager类所分配的视频源的处理任务StreamingTask,生成具体的单个ffmpeg进行命令行参数,并创建ProcessRunner类实例,来负责管理ffmpeg进程的运行。ffmpeg进程的运行可以从多个视频源中抽取包含有效信息的jpeg格式图像文件。优选地,每个视频源有设置有单独的jpeg图像输出文件夹。
其中,一个Worker类实例可以执行多个视频源的处理任务StreamingTask。多个视频源的处理任务StreamingTask对应一个ProcessRunner类实例和一个ffmpeg进程。每个视频源的处理任务StreamingTask都有自己的jpeg图像输出文件目录。每个视频源的处理任务 StreamingTask的id和对应的视频源id是一致的,从而便于进行索引。
回传模块34与构建模块31和驱动模块32相连,用于基于所述Reaper类将抽取的jpeg 格式图像文件回传至所述StreamingManager类。
具体地,所述Reaper类监控视频源的处理任务StreamingTask的jpeg图像输出文件目录,并将产生的jpeg格式图像文件回传至回传接口A。
优选地,所述Reaper类实例还能够监测已崩溃(frozen)的视频源。若发现某个视频源在一段时间内没有生成jpeg格式图像文件,视频源的处理任务StreamingTask判定该视频源已崩溃,则会根据该视频源注册时系统分配的回传接口B,通知所述StreamingManager类进行处理。对于已崩溃的视频源,所述StreamingManager类重启对应的Worker类实例,Worker 类实例会相应重启ffmpeg进程。
需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。
本发明的存储介质上存储有计算机程序,该程序被处理器执行时实现上述的基于单个 ffmpeg进程并行处理多个视频源的方法。所述存储介质包括:ROM、RAM、磁碟、U盘、存储卡或者光盘等各种可以存储程序代码的介质。
如图4所示,于一实施例中,本发明的基于单个ffmpeg进程并行处理多个视频源的终端包括:处理器41及存储器42。
所述存储器42用于存储计算机程序。
所述存储器42包括:ROM、RAM、磁碟、U盘、存储卡或者光盘等各种可以存储程序代码的介质。
所述处理器41与所述存储器42相连,用于执行所述存储器42存储的计算机程序,以使所述基于单个ffmpeg进程并行处理多个视频源的终端执行上述的基于单个ffmpeg进程并行处理多个视频源的方法。
优选地,所述处理器41可以是中央处理器(Central Processing Unit,简称CPU);还可以是专用集成电路(Application Specific Integrated Circuit,简称ASIC)。
综上所述,本发明的基于单个ffmpeg进程并行处理多个视频源的方法、软件系统、终端通过并行处理的方式避免了针对每个输入视频源的分析处理都要开启一个独立ffmpeg进程的情况;有效降低了程序运行对系统CPU、内存等硬件资源的需求,提升了进行视频信息智能分析的计算机软件系统的运行性能。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。