本发明涉及视频编码领域,具体涉及一种软硬件协同编码方法及系统。
背景技术:
根据统计,互联网流量中,视频数据的流量占据了大部分网络带宽资源。视频编码技术通过对视频数据进行压缩,达到节省网络带宽和存储空间的目的,具有巨大的经济效益。由于视频编码算法计算量大,通常采用特殊的硬件进行编码。实际应用中,单纯的硬件编码器计算效率高,但是编码效率不高。单纯的软件编码器经过充分的算法优化,压缩效率高,但是消耗cpu资源过多。
目前缺乏一种既能充分利用设备有限的cpu资源,进行高效的视频编码,还能消除软件编码对cpu资源消耗过多造成的编码丢帧问题的编码方法。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种编码效率高且能消除编码卡顿和丢帧的软硬件协同编码方法。
为达到以上目的,本发明采取的技术方案是:
一种软硬件协同编码方法,包括以下步骤:
将原始视频图像输入硬件编码器进行编码,得到多个由硬件编码输出的画面组gop,同时还将原始视频图像输入到图像缓存队列中;
根据cpu计算能力将所述多个由硬件编码输出的gop中的部分gop删除;
从图像缓存队列中取出与被删除的gop对应的原始视频图像进行软件编码;以及
将由硬件编码输出的gop和由软件编码输出的gop输出到编码图像队列。
在上述技术方案的基础上,定义初始的软件编码gop比例因子确定所述硬件编码输出的gop中应删除的gop的数量。
在上述技术方案的基础上,定义软件编码gop比例因子的动态调整周期,并判断一个动态调整周期是否结束,若是,根据cpu实时的计算能力,对软件编码gop比例因子进行修正,由修正的软件编码gop比例因子动态调整所述硬件编码输出的gop中应删除的gop的数量,若否,保持原软件编码gop比例因子。
在上述技术方案的基础上,所述动态调整周期表示为在对预设数量的gop所对应的原始视频图像编码后才对软件编码gop比例因子进行修正。
在上述技术方案的基础上,所述对软件编码gop比例因子进行修正的步骤包括:
获取最近一个删除的gop所对应的原始视频图像进行软件编码时消耗的cpu的时间tr,得到进行软件编码的最大频率1/tr;
根据该gop在软件编码时所包含的编码图像数nf、图像帧率fr和时间间隔tg,将tr转换为标准值tr’=tr*(nf*fr/tg);
综合考虑cpu计算能力空闲以及预测偏差,制定安全系数β进行校正,其中0<β<1;
根据该gop的时间间隔tg、标准值tr’和安全系数β得到修正后的软件编码gop比例因子α=β*(tg/tr’)。
在上述技术方案的基础上,根据初始的软件编码gop比例因子或修正的软件编码gop比例因子,采用位掩码区分表示由硬件编码输出的gop和由软件编码输出的gop。
在上述技术方案的基础上,所述从图像缓存队列中取出与被删除的gop对应的视频图像进行软件编码的步骤包括:
对被删除的gop,扫描gop内的每帧图像的pts,计算得到最小pts和最大pts;
在图像缓存队列中的原始视频图像中顺序查找最小pts和最大pts对应的视频图像,将最小pts和最大pts之间的视频图像序列进行软件编码输出。
在上述技术方案的基础上,将所述最小pts对应的视频图像编码成idr帧,同时将最大pts之前的视频图像从图像缓存队列中的原始视频图像中删除。
与此同时,本发明还提供一种编码效率高且能消除编码卡顿和丢帧的软硬件协同编码系统。
为达到以上目的,本发明采取的技术方案是:
一种实现上述软硬件协同编码方法的系统,包括:
硬件编码器,其用于对原始视频图像进行硬件编码,并得到由硬件编码输出的gop;
软件编码决策模块,其用于判断所述硬件编码输出的gop中应删除的gop的数量;以及
软件编码器,其用于对原始视频图像进行软件编码,并得到由软件编码输出的gop。
在上述技术方案的基础上,所述软件编码决策模块还包括动态调整模块,所述动态调整模块用于定义动态调整周期,并在动态调整周期内定义由硬件编码和软件编码输出的gop总量,所述动态调整模块还用于判断当前已经输出的gop是否超过gop总量,若否,则软件编码决策模块维持原应删除的gop的数量,若是,则软件编码决策模块修正应删除的gop的数量。
与现有技术相比,本发明的优点在于:
本发明的软硬件协同编码方法采用了软件编码和硬件编码相协同的方式进行编码,其中软件编码时考虑了cpu的计算能力,能够充分利用设备有限的cpu资源,消除了软件编码对cpu资源消耗过多造成的编码丢帧问题。通过软件编码和硬件编码相协同的方式克服了现有技术中单纯的硬件编码导致编码效率不高,单纯的软件编码消耗cpu资源过多的问题。更进一步的是,还能根据cpu实时的计算能力,进行动态调整,实时调整硬件编码和软件编码各自所占的比例,具体是通过修正软件编码gop比例因子来实现的。从而可以实时避免因cpu计算能力过度消耗,而导致缓存溢出丢帧的现象。此外,为了方便区分硬件编码和软件编码的比例,还可以采用位掩码来区分表示,更为形象化。
附图说明
图1为本发明实施例中软硬件协同编码方法的流程图;
图2为本发明实施例中软硬件协同编码系统的结构框图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供一种软硬件协同编码方法,包括以下步骤:
s1.配置硬件编码器。
在进行编码之前,首先需要配置硬件编码器,即对硬件编码器进行参数配置,通常包括原始视频图像宽高、颜色格式、gop(groupofpictures,画面组)时间间隔、帧率、码率或编码质量级别等进行配置。
s2.将原始视频图像输入硬件编码器进行编码,得到多个由硬件编码输出的画面组gop,同时还将原始视频图像输入到图像缓存队列中。
原始视频图像输入硬件编码器进行编码,编码后的视频帧以gop输出。硬件编码器的参数集(如序列参数集和图像参数集)中含有重要的编码信息,从中可解析出视频编码帧的量化参数。
s3.根据cpu计算能力将多个由硬件编码输出的gop中的部分gop删除。
硬件编码输出的gop一部分直接输出到编码图像队列,一部分被删除。而被删除的这部分gop对应的原始视频图像将会由软件编码器进行软件编码。具体有多少比例的gop会被删除,而改由软件编码来代替,涉及到软件编码gop比例因子的计算。
通过定义初始的软件编码gop比例因子可以确定硬件编码输出的gop中应删除的gop的数量,在得知软件编码gop比例因子后,即可确定有多少比例的gop所对应的原始视频图像应由软件编码器来编码,从而可以确定硬件编码输出的gop中应删除的gop的数量。
本实施例中为了能够根据cpu实时的计算能力做出自适应调整,定义了软件编码gop比例因子的动态调整周期。在每个动态调整周期结束时,根据cpu实时的计算能力,对软件编码gop比例因子进行修正,由修正的软件编码gop比例因子动态调整所述硬件编码输出的gop中应删除的gop的数量。动态调整周期表示的是只有在对预设数量的gop所对应的原始视频图像编码后才对软件编码gop比例因子进行修正,而没有完成预设数量时将不会对软件编码gop比例因子进行修正,将会保持原有的软件编码gop比例因子。这里对预设数量的gop所对应的原始视频图像编码包括硬件编码和软件编码。
其中,对软件编码gop比例因子进行修正的步骤包括:
(1)获取最近一个删除的gop对应的原始视频图像进行软件编码消耗的cpu的时间tr,得到进行软件编码的最大频率1/tr。
软件编码使用cpu资源,需要结合实际运行cpu的计算能力来确定软件编码gop比例因子,这样既能充分利用cpu的处理能力,又能避免丢帧造成问题。对于最近一个删除的gop对应的原始视频图像进行软件编码消耗的cpu的时间tr,如果超过这一上限频率进行软件编码,将导致cpu计算能力过度消耗,最终将导致缓存溢出丢帧。
(2)根据该gop在软件编码时所包含的编码图像数nf、图像帧率fr和时间间隔tg,将tr转换为标准值tr’=tr*(nf*fr/tg)。
实际编码中,由于每个gop包含的编码帧数可能不完全一致,为此需要将tr转换为标准值tr’。
(3)综合考虑cpu计算能力空闲以及预测偏差,制定安全系数β进行校正,其中0<β<1。
考虑到cpu的计算能力应该有一部分空闲,以及采用最近一个gop来预测存在一定偏差,因此需要乘以一个安全系数β进行校正,这里0<β<1,本实施例中的β为0.6。
(4)根据该gop的时间间隔tg、标准值tr’和安全系数β得到修正后的软件编码gop比例因子α=β*(tg/tr’)。
首先可以定义初始的软件编码gop比例因子,比如1/10,然后便可以通过上述步骤来对初始的软件编码gop比例因子进行修正。这里设动态修正周期为t,则在一个动态修正周期为t内,软件编码占比数为n=α*t。
更具体地,可以用位掩码来表示哪些gop所对应的原始视频图像应该采用软件编码,哪些gop所对应的原始视频图像采用硬件编码。如t=10,α=0.6,n=6,则取10位来存储标记,其中6位标记为1,表示采用软件编码,4位标记为0,表示直接输出硬编码的编码gop,其标记掩码为1111110000。
s4.配置软件编码器。
在利用软件编码器编码时,同样需要对软件编码器进行配置,软件编码器除了硬件编码器的基本配置参数外,可进行更加具体的配置(如视频内容类别),这些配置可让软件编码器针对应用场景进行编码优化。原始视频宽高、颜色格式、gop时间间隔这些参数,软件编码器采用与硬件编码器同样的配置。如果硬件编码器采用码率控制方式,软件编码器采用同样的码率配置,这样可以提高画面质量。如果硬件编码器采用恒定质量级别控制方式,软件编码器设置与硬件编码器同样的量化参数。另外,如果实际应用环境中播放器要求同样的参数集,可配置软件编码器与硬件编码器同样的参数集。
s5.从图像缓存队列中取出与被删除的gop对应的原始视频图像进行软件编码。
被决定使用软件编码重新编码的gop,需要在原始视频图像队列中查找对应的原始视频图像。首先对被删除的gop,扫描gop内的每帧图像的pts,计算得到最小pts和最大pts,然后在图像缓存队列中的原始视频图像中顺序查找最小pts和最大pts对应的视频图像,将最小pts和最大pts之间的视频图像序列进行软件编码输出。本实施例中将最小pts对应的视频图像编码成idr帧,同时将最大pts之前的视频图像从图像缓存队列中的原始视频图像中删除,以释放内存空间。
s6.将由硬件编码输出的gop和由软件编码输出的gop输出到编码图像队列。
此时,便完成了软件编码和硬件编码的协同编码。
参见图2所示,本发明实施例还提供一种实现上述软硬件协同编码方法的系统,其包括硬件编码器、软件编码决策模块和软件编码器。其中硬件编码器用于对原始视频图像进行硬件编码,并得到由硬件编码输出的gop。软件编码决策模块用于判断硬件编码输出的gop中应删除的gop的数量。软件编码器用于对原始视频图像进行软件编码,并得到由软件编码输出的gop。
软件编码决策模块还包括动态调整模块,动态调整模块用于定义动态调整周期,并在动态调整周期内定义由硬件编码和软件编码输出的gop总量,动态调整模块还用于判断当前已经输出的gop是否超过gop总量,若否,则软件编码决策模块维持原应删除的gop的数量,若是,则软件编码决策模块修正应删除的gop的数量。
综上所述,本实施例采用了软件编码和硬件编码相协同的方式进行编码,其中软件编码时考虑了cpu的计算能力,能够充分利用设备有限的cpu资源,消除了软件编码对cpu资源消耗过多造成的编码丢帧问题。通过软件编码和硬件编码相协同的方式克服了现有技术中单纯的硬件编码导致编码效率不高,单纯的软件编码消耗cpu资源过多的问题。
更进一步的是,本实施例还能根据cpu实时的计算能力,进行动态调整,实时调整硬件编码和软件编码各自所占的比例,具体是通过修正软件编码gop比例因子来实现的。从而可以实时避免因cpu计算能力过度消耗,而导致缓存溢出丢帧的现象。此外,为了方便区分硬件编码和软件编码的比例,还可以采用位掩码来区分表示,更为形象化。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。