一种面向流式音视频数据的分布式处理方法及其装置与流程

文档序号:11254422阅读:446来源:国知局
一种面向流式音视频数据的分布式处理方法及其装置与流程

本发明涉及音视频处理领域,具体来说,涉及到一种面向流式音视频数据的分布式处理方法及其装置。



背景技术:

随着移动互联网、大数据、人工智能的发展,音视频处理在直播、娱乐、通信、安防等领域的需求越来越大。如何实现音视频处理系统的高性能、高通量、高效能、易维护、易扩展、易优化,是该领域面临的新挑战。

传统的音视频处理方法一般只能支持一种或几种音视频数据的输入(例如,本地文件、rtp、rstp、hls),然后对这些形式的音视频数据直接进行分布式编解码处理。因此,传统的处理方法存在着以下弊端:1.不易于通过扩展支持多种输入形式,编解码模块依赖于每路的上下文,不能独立编解码,编解码速度慢,支持的路数少,物理机利用率低。2.物理机的数量和功能是在设计阶段确定的,不能根据用户流量的变化而变化,造成物理机资源利用率低或者不足。3.物理机在音视频流量低负载时依然满负荷运转,存在着功耗大,负载不均衡等弊端。4.编解码依赖于每路编解码上下文,分布式的规模不易于做的很大,可扩展性差,不能充分发挥分布式的优势。



技术实现要素:

本发明的目的是解决上述海量音视频流式数据处理时遇到的输入形式不易扩展、编解码效率低、支持的路数少、功耗大、物理机数量不能随着用户流量变化而变化、负载不均衡等问题。

为了达到上述目的,本发明提出一种面向流式音视频数据的分布式处理方法,包括以下步骤:

s1:将多台物理机划分为具有特定功能的不同类别,包括分布式资源管理功能、分布式数据内存化功能、分布式封装切片功能、分布式解码功能和其它音视频分布式处理功能,建立不同类别的物理机之间的映射关系;

s2:将来自所有传输通道的音视频码流提取出来存入内存;

s3:将内存中存储的所述音视频数码流的片段直接封装为能够独立编解码的音视频短片段;

s4:在不需要维护每路编解码上下文的情况下,对所述音视频短片段进行编解码;

s5:对解码后的yuv数据或者经过独立编解码的所述音视频短片段进行进一步的音视频处理。

根据本发明提出的面向流式音视频数据的分布式处理方法,所述步骤s1中将多台物理机划分为具有特定功能的不同类别的过程为:

s12:判断当前物理机的功能属性;

s13:根据物理的功能属性执行相应的功能;如果当前物理机被设置为执行资源管理功能的物理机,那么执行分布式资源管理功能;如果当前物理机被设置为执行数据内存化的物理机,那么执行数据内存化功能;如果当前物理机被设置为执行封装切片功能的物理机,那么执行封装切片功能;如果当前物理机被设置为执行解码功能的物理机,那么执行解码功能;如果当前物理机被设置为执行其他功能的物理机,那么执行其他音视频处理功能;如果当前物理机未设置功能,那么进入休眠或者低功耗模式。

根据本发明提出的面向流式音视频数据的分布式处理方法,其中,所述步骤s1还包括动态调整各个物理机之间的数据处理关系,具体为:

s101:获取当前网络中各种类型物理机的状态;

s102:按照特定功能的不同类别,分析所有功能类别中的物理机的运行状态数据,对每个功能类别中的所有物理机的运行状态按照规则排序;

s103:如果同一功能类别中的所有物理机都高于性能阈值,转至步骤s106;否则,转至步骤s104;

s104:将低负载率的物理机中的所有正在处理的音视频流重映射到高负载率的物理机上,或者不将新输入的音视频码流映射到低负载率的物理机上,使得负载将某几台物理机达到性能阈值,剩余的物理机则从该功能类中删除,进入休眠状态或者低功耗状态;转至步骤s105;

s106:检测是否有尚未分配功能的物理机;如果有,转至步骤s107;如果没有,转至步骤s110;

s107:唤醒一台尚未分配功能的物理机;

s108:赋予功能;

s109:建立与前驱功能所在物理机的映射关系,使新输入的音视频码流根据该映射表流入相应的物理机;转至步骤s105;

s110:通知系统管理员,物理机资源不足;

s105:休眠固定时间;转至步骤s101。

根据本发明提出的面向流式音视频数据的分布式处理方法,所述步骤s2包括:

s21:调用相应的协议接口获取打包的音视频数据;

s22:根据协议抽取出每路的音视频数据并存入内存。

根据本发明提出的面向流式音视频数据的分布式处理方法,所述步骤s3包括:

s31:获取音视频内存数据,自定义数据格式封装;

s32:使用多媒体视频处理工具将内存音视频片段封装为独立解码的音视频片段;

s33:根据当前物理机中下一台物理机的路由表,将独立解码的音视频片段送到指定的解码物理机或者对独立解码片段进行处理的物理机。

根据本发明提出的面向流式音视频数据的分布式处理方法,所述步骤s4包括:

s41:使用编解码库对独立解码的音视频流进行解码;

s42:根据当前物理机中下一台物理机的路由表,将解码的音视频数据送到指定的后续物理机;如果后续要对解码后的yuv/pcm数据进行处理,送入其他处理物理机。

根据本发明提出的面向流式音视频数据的分布式处理方法,步骤s5中进一步的音视频处理的实现方法包括:

将进一步的音视频处理功能设置到解码物理机上,从而减少内存拷贝和网络传输;或者

将进一步的音视频处理功能和解码功能设置到不同的物理机上,通过流水掩盖两者的传输时延。

本发明同时还提供了一种面向流式音视频数据的分布式处理装置,包括:

多台物理机,所述物理机按照功能划分为执行分布式资源管理功能的物理机和执行其它功能的物理机,所述执行其它功能的物理机又划分为分布式数据内存化功能集群、分布式封装切片功能集群、分布式解码功能集群和其它音视频分布式处理功能集群;

分布式内存化模块,用于将来自所有传输通道的音视频码流提取出来存入内存;

分布式封装切片模块,与所述分布式内存化模块相连,用于将内存中存储的所述音视频数码流的片段直接封装为能够独立编解码的音视频短片段;

分布式解码模块,与所述分布式封装切片模块相连,用于对所述能够独立编解码的音视频短片段进行编解码;

其它分布式音视频处理模块,与所述分布式解码模块相连,用于对解码后的yuv数据或者经过独立编解码的所述音视频短片段进行进一步的音视频处理;

分布式资源管理模块,与所述分布式内存化模块、所述分布式封装切片模块、所述分布式解码模块和所述其它分布式音视频处理模块均相连,用于感知音视频流量特点以及所述多台物理机的运行状况,管理所述分布式内存化模块、所述分布式封装切片模块、所述分布式解码模块和所述其它分布式音视频处理模块与所述执行其它功能的物理机之间的映射,以及建立属于不同功能集群的物理机之间的映射。

根据本发明提出的面向流式音视频数据的分布式处理装置,其中,所述分布式资源管理模块管理所述分布式内存化模块、所述分布式封装切片模块、所述分布式解码模块和所述其它分布式音视频处理模块与所述执行其它功能的物理机之间的映射的步骤包括:

s101:获取当前网络中各种类型物理机的状态;

s102:按照特定功能的不同类别,分析所有功能类别中的物理机的运行状态数据,对每个功能类别中的所有物理机的运行状态按照规则排序;

s103:如果同一功能类别中的所有物理机都高于性能阈值,转至步骤s106;否则,转至步骤s104;

s104:将低负载率的物理机中的所有正在处理的音视频流重映射到高负载率的物理机上,或者不将新输入的音视频码流映射到低负载率的物理机上,使得负载将某几台物理机达到性能阈值,剩余的物理机则从该功能类中删除,进入休眠状态或者低功耗状态;转至步骤s105;

s106:检测是否有尚未分配功能的物理机;如果有,转至步骤s107;如果没有,转至步骤s110;

s107:唤醒一台尚未分配功能的物理机;

s108:赋予功能;

s109:建立与前驱功能所在物理机的映射关系,使新输入的音视频码流根据该映射表流入相应的物理机;转至步骤s105;

s110:通知系统管理员,物理机资源不足;

s105:休眠固定时间;转至步骤s101。

根据本发明提出的面向流式音视频数据的分布式处理装置,其中,所述分布式内存化模块存储音视频码流的步骤包括:

s21:调用相应的协议接口获取打包的音视频数据;

s22:根据协议抽取出每路的音视频数据并存入内存。

根据本发明提出的面向流式音视频数据的分布式处理装置,其中,所述分布式封装切片模块进行封装的步骤包括:

s31:获取音视频内存数据,自定义数据格式封装;

s32:使用多媒体视频处理工具将内存音视频片段封装为独立解码的音视频片段;

s33:根据当前物理机中下一台物理机的路由表,将独立解码的音视频片段送到指定的解码物理机或者对独立解码片段进行处理的物理机。

根据本发明提出的面向流式音视频数据的分布式处理装置,其中,所述分布式解码模块进行编解码的步骤为:

s41:使用编解码库对独立解码的音视频流进行解码;

s42:根据当前物理机中下一台物理机的路由表,将解码的音视频数据送到指定的后续物理机;如果后续要对解码后的yuv/pcm数据进行处理,送入其他处理物理机。

与现有的发明相比,具有易于工程实现、高性能、高通量、高能效、易维护、易调式、易优化、易扩展等优点。当需要扩展支持新的流式数据来源时,只需要针对编写将该来源转换为内存流的模块,因此容易通过扩展支持新的流式数据来源。只有分布式封装切片模块需要维护音视频流每路的上下文,分布式解码模块不需要维护流式数据上下文,系统吞吐量大,抗干扰能力强。直接将流式数据封装为短视频,而不需要将流式数据组装成完整音视频文件,再进行切片,降低了对存储容量的需求,从而能够支持更多的音视频路数并发处理。分布式资源管理模块实现了各功能模块与物理机,以及各个物理机间的动态管理与映射,实现了多个并发解码单元间的负载均衡,避免单个解码单元的拥塞。音视频流量低时,可以使部分并发处理单元在低负载时进入休眠状态,降低功耗;音视频流量高时,根据资源分配映射算法,通过增加具有解码功能的物理机、具有封装功能的物理机数量来提高系统的处理能力。因此,该系统能够适应用户流量的弹性变化。其中资源分配映射算法不仅仅具有理论意义,也具有易于量化实现的特点,实际运行中不需要刻意设置物理机的性能参数,即使物理机的性能差别很大,系统运行的过程中也能够动态充分发掘各个物理机的性能指标。此外,通过资源管理物理机,该系统也易于得到整个系统的资源分配情况,进而有针对性的优化与调试。能够动态的发掘每个功能所需要的物理机的最小数量,不会造成物理机的浪费。分布式规模可以做的很大,且容易增加新的物理机。

附图说明

图1为本发明中每路音视频的生命周期;

图2为本发明实施过程中功能模块到物理机的映射示意图;

图3为本发明实施过程中物理机的物理位置示意图;

图4为本发明中物理机的运行过程示意图;

图5为本发明中资源管理功能的执行过程示意图;

图6为本发明中封装切片功能的执行过程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下文中所述的物理机可以指代服务器、板卡、嵌入式设备、pc等物理运行实体。物理机间的通信方式不局限于网络,也可以是pcie等。系统实现时音视频处理功能可以基于ffmpeg、libav、mp4v2、libmad、libresample等实现。系统支持的音视频格式包括mp4、flv、asf、avi、webm、ogv、mpeg等,编解码格式包括h.264、h.265、avs等,这些格式的种类由所采用的音视频处理库决定。

本发明提出的分布式处理方法通过内部软件模块执行。所用到的软件模块具体包括:将多种流式数据分布式内存化模块、分布式封装切片模块、分布式解码模块、分布式资源管理模块、其他分布式音视频处理模块。

所述多种流式数据分布式内存化模块,用于将来自网络、pcie等传输通道的流式音视频转化为统一的内存流。将各种传输通道中的音视频码流数据提取出来,存入内存。

所述分布式封装切片模块,用于将内存中的音视频码流片段直接封装为能够独立编解码的音视频短片段。具体实现时可以在多台封装切片物理机上进行该过程,实现了分布式封装切片。

所述分布式解码模块,用于对独立编解码的音视频短片段进行编解码。由于短片段已经被封装为了独立编解码片段,因此不需要维护每路的编解码上下文。

所述其他分布式音视频处理模块,用于对解码后的yuv、或者独立编解码音视频片段进行进一步的音视频处理,例如播放、聚类、重采样等等。

所述分布式资源管理模块,具有如下功能:1.感知音视频流量特点,感知其他物理机的处理情况,例如cpu、内存利用率、网络带宽、音视频等待队列长度等。2.管理上述各个模块到物理机的映射,动态的将物理机映射为具有特定模块功能的物理机。将所有物理机划分为具有特定功能的功能类。3.建立不同功能类间物理机的映射。也就是说,每台物理机都是对等的,都能够被重映射为具有特定模块功能的物理机,物理机间数据处理关系也是可以动态调整的。

如图1所示,每路音视频需要经过如下模块处理:分布式资源管理模块100、将多种流式数据分布式内存化模块101、分布式封装切片模块102、分布式解码模块103、其他分布式音视频处理模块104。

如图2所示,物理机分为两大类,一类是执行分布式资源管理模块功能的物理机200,另一类是执行其他模块功能的物理机,202表示负责将各种流式音视频数据转化为内存数据的物理机集群,203表示将内存数据通过封装切片为可以独立解码短音视频的物理机集群、204表示负责对独立解码短音视频解码的物理机集群,205表示负责其他音视频操作的物理机集群。分布式资源管理物理机集群200中的某一个或多个需要运维人员手动配置生效,而执行其他模块功能的物理机则会根据系统的运行情况被分布式资源管理物理机动态设置。运行一段时间后,具有以下特点:物理机根据功能被划分为了多个类别。各个类别中的物理机间没有依赖关系,独立执行其功能;各个类别间的物理机间有映射关系,由分布式资源管理功能所在物理机动态管理。

如图3所示,图2中的各种物理机301的物理位置没有特定要求,随机放置。只需要通过互联网络将其连接。

如图4所示,单个物理机的执行分为如下步骤:

步骤1:判断当前物理机的功能属性

步骤2:根据物理的功能属性执行相应的功能。体现了物理机固化为具有特定功能的物理机。如果当前物理机被设置为执行资源管理功能的物理机,那么执行分布式资源管理功能;如果当前物理机被设置为执行数据内存化的物理机,那么执行数据内存化功能;如果当前物理机被设置为执行封装切片功能的物理机,那么执行封装切片功能;如果当前物理机被设置为执行解码功能的物理机,那么执行解码功能;如果当前物理机被设置为执行其他功能的物理机,那么执行其他音视频处理功能;如果当前物理机未设置功能,那么进入休眠或者低功耗模式。

所述分布式资源管理模块,是本专利需要保护的非常重要的一个功能。具有如下功能:1.感知音视频流量特点,感知其他物理机的处理情况,例如cpu、内存利用率、网络带宽、音视频等待队列长度等。2.管理上述各个模块到物理机的映射,动态的将物理机映射为具有特定模块功能的物理机。将所有物理机划分为具有特定功能的功能类。3.建立不同功能类间物理机的映射。也就是说,每台物理机都是对等的,都能够被重映射为具有特定模块功能的物理机,物理机间数据处理关系也是可以动态调整的。如图5所示,资源管理功能的执行分为如下步骤:

步骤s501:获取当前网络中各种类型物理机的状态。状态包括:网络带宽,cpu利用率,内存利用率,正在处理的音视频路数,音视频队列中的路数等。

步骤s502:按照功能类,分析所有功能类中的物理机的运行状态数据,对每个功能类中的所有物理机的运行状态按照某种规则进行排序。对每个功能类内的物理机进行如下操作:

步骤s503:如果所有物理机都处于性能阈值,这表明网络流量比较强,该功能类中需要增加物理机的数量。转步骤步骤s506。否则说明网络流量比较小,当前功能类中的物理机有冗余,需要减少。转步骤s504。

步骤s504:将低负载率的物理机中的所有正在处理的音视频流重映射到高负载率的物理机上,或者新来音视频流映射不要映射到低负载率的物理机上。使得负载尽可能将某几台物理机达到性能阈值,但是剩余的物理机可以从该功能类中删除,进入休眠状态或者低功耗状态。转步骤s505.

步骤s506:是否有尚未分配功能的物理机。如果有,转步骤s507.如果没有,转步骤s510.

步骤s507:唤醒一台尚未分配功能的物理机

步骤s508:赋予功能

步骤s509:建立与前驱功能所在物理机的映射关系。这样新来的音视频流根据该映射表,就会流入该物理机。转s505.

步骤s510:通知系统管理员,物理机资源不足

步骤s505:休眠固定时间。转步骤s501.

所述多种流式数据分布式内存化模块,用于将来自网络、pcie等传输通道的流式音视频转化为统一的内存流。将各种传输通道中的音视频码流数据提取出来,存入内存。数据内存化功能的执行步骤分为如下几步:

步骤1:调用相应的协议接口,获取打包的音视频数据。例如:pcie、rtp/rstp/rtmp/http、socket等

步骤2:根据协议,抽取出每路的音视频数据,存入内存。

步骤3:对打包出的音视频数据送入封装切片模块,封装成可以独立解码的音视频片段。实际实现的过程中,有两种方案:1.将两个功能放到同一台物理机上,这样会减少内存拷贝和网络传输。2.如果网络流大,也可以将两者放到不同的物理机上,用流水来掩盖两者的传输时延,这样更易于扩展输入操作,更易于维护,甚至有时候负责输入的物理机有特殊的使用约束。

所述分布式封装切片模块,是本专利非常重要的一个功能。本发明的特点是直接将内存中的音视频码流片段直接封装为能够独立编解码的音视频短片段,是对流式数据通过封装切片,而不是对完整的视频文件,因此占用的内存和磁盘空间极小,就像流水一样。另一个优点是实现了解码模块与其他模块的解耦和,使得解码可以分布式的进行,避免了依赖音视频参数上下文造成的影响,提高了解码效率。如图6所示,600表示第1路视频流,在等待封装切片队列里排队、601表示第1路音频流,在等待封装切片队列里排队,…。605中每个表示将600中每个内存视频流封装为可以独立解码短视频,606中每个表示将601中每个内存音频流封装为可以独立解码短音频。封装切片功能的执行步骤分为如下几步:

步骤1:获取音视频内存数据。当前物理机上的音视频流来自前驱功能类中的某台物理机,由资源管理物理机建立好了路由关系。因此内存数据可以直接从上下文中获取,可以经过自定义数据格式包装。

步骤2:利用ffmpeg库或者上面提到的其他库,实现将内存音视频片段封装为独立解码的音视频片段。如果是使用ffmpeg库,使用aviocontext结构体循环从内存中读取音视频数据,然后使用avstream封装成独立解码的音视频文件。实际上,某些格式的音视频数据本身就是可以独立解码的片段,比如flv、mp3等,该步骤可以简略。

步骤3:根据本机中下一台物理机的路由表,将独立解码的音视频片段送到指定的解码物理机或者对独立解码片段进行处理的物理机。

所述分布式解码模块,用于对独立编解码的音视频短片段进行编解码。由于短片段已经被封装为了独立编解码片段,因此不需要维护每路的编解码上下文。步骤如下:

步骤1:使用上文提到的编解码库,对独立解码的音视频流进行解码

步骤2:根据本机中下一台物理机的路由表,将解码的音视频数据送到指定的后续物理机。如果后续要对解码后的yuv/pcm数据进行处理,送入其他处理物理机。

所述其他分布式音视频处理模块,用于对解码后的yuv、或者独立编解码音视频片段进行进一步的音视频处理,例如播放、聚类、重采样等等。实际实现的过程中,有两种方案:1.将该功能放到解码物理机上,这样会减少内存拷贝和网络传输。2.如果网络流大,也可以将两者放到不同的物理机上,用流水来掩盖两者的传输时延,这样更易于扩展输入操作,更易于维护。

同时本发明增加新的物理机也非常容易,只需要在新的物理机上安装本发明的分布式处理方法实现的软件并建立到资源管理物理机的路由即可。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1