一种基于多解码器动态融合的视频播放优化方法转让专利

申请号 : CN202310760480.0

文献号 : CN116546273B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 温研刘东

申请人 : 北京麟卓信息科技有限公司

摘要 :

本发明公开了一种基于多解码器动态融合的视频播放优化方法,建立了视频特征与解码器的映射关系,在视频文件播放时能够根据视频特征自动选择解码错误率低或解码效率更高的解码器,同时,通过主从解码器的设置及多解码器的动态融合,当出现解码错误时能够动态切换至从解码器或其他解码器,进而实现了视频解码的动态容错和动态择优,显著提升了视频播放的容错能力与播放体验。

权利要求 :

1.一种基于多解码器动态融合的视频播放优化方法,其特征在于,包括以下步骤:

步骤1、获取操作系统当前可用的解码器,采用各解码器分别完成具有不同视频特征的视频文件的解码得到解码器的解码属性,建立视频特征与解码器的映射关系;所述视频特征包括视频文件的视频编码格式及I帧量化值;

步骤2、在应用程序启动过程中记录解码框架的初始化参数,并为所有解码器创建实例后采用初始化参数完成各实例的初始化;

步骤3、当应用程序读取待播放视频文件时,计算待播放视频文件的第一视频特征,若映射关系中存在与第一视频特征相匹配的目标解码器,则从目标解码器中选取两个解码器分别作为主解码器和从解码器,若不存在则随机选取两个解码器分别作为主解码器和从解码器;并为主解码器和从解码器添加已使用标签;

步骤4、当应用程序解码视频帧时,主解码器执行标准解码流程解码当前视频帧,若主解码器产生解码错误则执行步骤6,否则执行步骤7;同时,在当前视频帧为I帧时从解码器执行标准解码流程解码当前视频帧,若从解码器产生解码错误则执行步骤5,否则执行步骤

7;

步骤5、从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,执行步骤7;若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,执行步骤7;

步骤6、若从解码器为空则从目标解码器中重新选择解码器作为新的主解码器,如果新的主解码器与当前主解码器相同则忽略当前视频帧并读取下一个视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间再执行步骤4,如果新的主解码器与当前主解码器不同则加载新的主解码器读取下一个I帧视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4;若从解码器不为空,则将从解码器变更为主解码器,再从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4;

步骤7、播放解码后的视频帧,若待播放视频文件未播放完毕则执行步骤4,否则根据记录错误帧数、已解码帧数和解码总时间计算解码属性,并采用解码属性更新映射关系,结束本流程。

2.根据权利要求1所述的视频播放优化方法,其特征在于,所述步骤1中所述I帧量化值的计算方式为:若I帧的间隔为固定间隔,则I帧量化值为视频文件前N个I帧量化值的平均值;若I帧的间隔为自动间隔,则I帧量化值为视频文件前N个I帧的码流阈值与宏块SAD值的平均值。

3.根据权利要求1所述的视频播放优化方法,其特征在于,所述视频特征的比较方式为:当视频编码格式相同且I帧量化值之间的偏差小于设定阈值时,则认为两个视频特征相同。

4.根据权利要求3所述的视频播放优化方法,其特征在于,所述偏差的计算方式为:两个I帧量化值之差的绝对值与较大的I帧量化值的比值。

5.根据权利要求1所述的视频播放优化方法,其特征在于,所述解码属性包括:错误帧率及平均解码时间,其中,错误帧率是指错误帧数与已解码帧数的比值。

6.根据权利要求1所述的视频播放优化方法,其特征在于,所述步骤3中所述计算待播放视频文件的第一视频特征的方式为:获取待播放视频文件的视频编码格式,并预先读取若干I帧计算待播放视频文件的I帧量化值。

7.根据权利要求1所述的视频播放优化方法,其特征在于,所述步骤3中所述从目标解码器中选取两个解码器分别作为主解码器和从解码器的方式为:优先选择具有最小错误帧率的解码器,若存在多个具有相同错误帧率的解码器则优先从中选择具有最短平均解码时间的解码器。

8.根据权利要求1所述的视频播放优化方法,其特征在于,所述步骤3中所述随机选取两个解码器分别作为主解码器和从解码器的方式为:按硬解码器优先的原则进行选取。

说明书 :

一种基于多解码器动态融合的视频播放优化方法

技术领域

[0001] 本发明属于计算机应用开发技术领域,具体涉及一种基于多解码器动态融合的视频播放优化方法。

背景技术

[0002] 目前流媒体等视频文件的编码格式非常多,不同的编码格式往往需要适配不同的解码器,此外,对于编码格式及编码码率等属性不同的视频文件不同解码器的解码正确率也不尽相同,因此,同一操作系统中往往需要安装多种解码器,以适应不同的视频文件。例如,安卓系统的MediaCodec解码框架后端可以使用多种执行实际解码操作的解码器,包括芯片厂商的解码器、安卓系统自带的软解码器、ffmpeg的硬解码器、ffmpeg的软解码器、VAAPI引擎、VDPAU库引擎等等。
[0003] 现有操作系统中当应用程序启动时往往会确定默认的编解码器,例如,安卓系统的视频解码器是在应用初始化解码框架时确定的,并且当视频文件出现解码错误时无法切换到其他解码器,进而导致视频文件无法正确播放。

发明内容

[0004] 有鉴于此,本发明提供了一种基于多解码器动态融合的视频播放优化方法,实现了基于多解码器动态融合的视频文件动态容错播放。
[0005] 本发明提供的一种基于多解码器动态融合的视频播放优化方法,包括以下步骤:
[0006] 步骤1、获取操作系统当前可用的解码器,采用各解码器分别完成具有不同视频特征的视频文件的解码得到解码器的解码属性,建立视频特征与解码器的映射关系;所述视频特征包括视频文件的视频编码格式及I帧量化值;
[0007] 步骤2、在应用程序启动过程中记录解码框架的初始化参数,并为所有解码器创建实例后采用初始化参数完成各实例的初始化;
[0008] 步骤3、当应用程序读取待播放视频文件时,计算待播放视频文件的第一视频特征,若映射关系中存在与第一视频特征相匹配的目标解码器,则从目标解码器中选取两个解码器分别作为主解码器和从解码器,若不存在则随机选取两个解码器分别作为主解码器和从解码器;并为主解码器和从解码器添加已使用标签;
[0009] 步骤4、当应用程序解码视频帧时,主解码器执行标准解码流程解码当前视频帧,若主解码器产生解码错误则执行步骤6,否则执行步骤7;同时,在当前视频帧为I帧时从解码器执行标准解码流程解码当前视频帧,若从解码器产生解码错误则执行步骤5,否则执行步骤7;
[0010] 步骤5、从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,执行步骤7;若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,执行步骤7;
[0011] 步骤6、若从解码器为空则从目标解码器中重新选择解码器作为新的主解码器,如果新的主解码器与当前主解码器相同则忽略当前视频帧并读取下一个视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间再执行步骤4,如果新的主解码器与当前主解码器不同则加载新的主解码器读取下一个I帧视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4;若从解码器不为空,则将从解码器变更为主解码器,再从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4;
[0012] 步骤7、播放解码后的视频帧,若待播放视频文件未播放完毕则执行步骤4,否则根据记录错误帧数、已解码帧数和解码总时间计算解码属性,并采用解码属性更新映射关系,结束本流程。
[0013] 进一步地,所述步骤1中所述I帧量化值的计算方式为:若I帧的间隔为固定间隔,则I帧量化值为视频文件前N个I帧量化值的平均值;若I帧的间隔为自动间隔,则I帧量化值为视频文件前N个I帧的码流阈值与宏块SAD值的平均值。
[0014] 进一步地,所述视频特征的比较方式为:当视频编码格式相同且I帧量化值之间的偏差小于设定阈值时,则认为两个视频特征相同。
[0015] 进一步地,所述偏差的计算方式为:两个I帧量化值之差的绝对值与较大的I帧量化值的比值。
[0016] 进一步地,所述解码属性包括:错误帧率及平均解码时间,其中,错误帧率是指错误帧数与已解码帧数的比值。
[0017] 进一步地,所述步骤3中所述计算待播放视频文件的第一视频特征的方式为:获取待播放视频文件的视频编码格式,并预先读取若干I帧计算待播放视频文件的I帧量化值。
[0018] 进一步地,所述步骤3中所述从目标解码器中选取两个解码器分别作为主解码器和从解码器的方式为:优先选择具有最小错误帧率的解码器,若存在多个具有相同错误帧率的解码器则优先从中选择具有最短平均解码时间的解码器。
[0019] 进一步地,所述步骤3中所述随机选取两个解码器分别作为主解码器和从解码器的方式为:按硬解码器优先的原则进行选取。
[0020] 有益效果
[0021] 本发明建立了视频特征与解码器的映射关系,在视频文件播放时能够根据视频特征自动选择解码错误率低或解码效率更高的解码器,同时,通过主从解码器的设置及多解码器的动态融合,当出现解码错误时能够动态切换至从解码器或其他解码器,进而实现了视频解码的动态容错和动态择优,显著提升了视频播放的容错能力与播放体验。

具体实施方式

[0022] 下面列举实施例,对本发明进行详细描述。
[0023] 本发明提供了一种基于多解码器动态融合的视频播放优化方法,其核心思想是:基于操作系统中已安装的解码器,建立视频特征与解码器的映射关系,当应用程序初始化解码框架时为各解码器创建实例,并根据待播放视频文件的视频特征及映射关系确定主从解码器,并通过主从解码器的切换等方式动态处理解码错误,以实现视频文件的容错播放。
[0024] 本发明提供的一种基于多解码器动态融合的视频播放优化方法,具体包括以下步骤:
[0025] 步骤1、获取操作系统当前可用的所有解码器,采用各解码器分别完成具有不同视频特征的视频文件的解码得到各解码器的解码属性,建立视频特征与解码器的映射关系。
[0026] 其中,视频特征包括视频文件的视频编码格式及I帧量化值。对于I帧的间隔为固定间隔的视频文件,则其I帧量化值为视频文件前N个I帧量化值的平均值;对于I帧的间隔为自动间隔的视频文件,则其I帧量化值为视频文件前N个I帧的码流阈值与宏块SAD值的平均值。N的取值根据实际情况确定。
[0027] 本发明中视频特征的比较方式为:当视频编码格式相同,且I帧量化值之间的偏差小于设定阈值,则认为两个视频特征相同。偏差的计算方式可为两个I帧量化值之差的绝对值与较大的I帧量化值的比值。
[0028] 编码器的解码属性包括错误帧率及平均解码时间,其中,错误帧率是指错误帧数与已解码帧数的比值。本发明中采用错误帧率而不是错误帧数表示解码属性,能够更准确的反应解码器的解码性能,规避了可能产生的某个解码器解码完少量数据帧就出错而导致的虽然错误帧数少但解码正确率较低的情况。
[0029] 获取操作系统当前可用的所有解码器的方式,可采用安卓系统的MediaCodec遍历或Linux系统的包管理器遍历视频解码库,遍历当前操作系统多媒体框架支持的所有解码器,例如芯片厂商提供的解码器、安卓系统自带的软解码器、ffmpeg的硬解码器、ffmpeg的软解码器、VAAPI引擎、VDPAU库引擎。
[0030] 步骤2、在应用程序启动过程中,当初始化解码框架时记录解码框架的初始化参数,并为所有解码器创建实例后采用初始化参数完成各实例的初始化。
[0031] 步骤3、当应用程序读取待播放视频文件时,计算待播放视频文件的第一视频特征,若映射关系中存在与第一视频特征相匹配的目标解码器,则从目标解码器中选取两个解码器分别作为主解码器和从解码器,若不存在则随机选取两个解码器分别作为主解码器和从解码器;并为主解码器和从解码器添加已使用标签。
[0032] 计算待播放视频文件的第一视频特征的方式为:获取待播放视频文件的视频编码格式,并预先读取若干I帧计算待播放视频文件的I帧量化值。
[0033] 从目标解码器中选取两个解码器分别作为主解码器和从解码器的方式为:优先选择具有最小错误帧率的解码器,若存在多个具有相同错误帧率的解码器则优先从中选择具有最短平均解码时间的解码器。
[0034] 为了进一步提高解码器的性能,随机选取两个解码器分别作为主解码器和从解码器时,可按硬解码器优先的原则进行选取,即优先选择硬解码器。
[0035] 步骤4、当应用程序解码视频帧时,主解码器执行标准解码流程解码当前视频帧,若主解码器产生解码错误则执行步骤6,否则执行步骤7;同时,在当前视频帧为I帧时从解码器执行标准解码流程解码当前视频帧,若从解码器产生解码错误则执行步骤5,否则执行步骤7。
[0036] 步骤5、从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,执行步骤7;若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,执行步骤7。
[0037] 从目标解码器中选择没有已使用标签的解码器作为新的从解码器的方式为:优先选择具有最小错误帧率的解码器,若存在多个具有相同错误帧率的解码器则优先从中选择具有最短平均解码时间的解码器。
[0038] 步骤6、若从解码器为空则从目标解码器中重新选择解码器作为新的主解码器,如果新的主解码器与当前主解码器相同则忽略当前视频帧并读取下一个视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间再执行步骤4,如果新的主解码器与当前主解码器不同则加载新的主解码器读取下一个I帧视频帧,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4;若从解码器不为空,则将从解码器变更为主解码器,再从目标解码器中选择没有已使用标签的解码器作为新的从解码器,并为新的从解码器添加已使用标签,若目标解码器中不存在没有已使用标签的解码器则将从解码器设置为空,记录主解码器的错误帧数、已解码帧数和解码总时间执行步骤4。
[0039] 从目标解码器中重新选择解码器作为新的主解码器,以及从目标解码器中选择没有已使用标签的解码器作为新的从解码器的方式均为:优先选择具有最小错误帧率的解码器,若存在多个具有相同错误帧率的解码器则优先从中选择具有最短平均解码时间的解码器。
[0040] 步骤7、播放解码后的视频帧,若待播放视频文件未播放完毕则执行步骤4,否则根据记录错误帧数、已解码帧数和解码总时间计算解码属性,并采用解码属性更新映射关系,结束本流程。实施例
[0041] 本实施例中采用本发明提供的一种基于多解码器动态融合的视频播放优化方法实现了视频文件动态容错播放,具体包括以下步骤:
[0042] S1、在当前操作系统中遍历获取多媒体框架支持的所有解码器。
[0043] S2、采用由视频编码格式及I帧量化值构成的二元组表示视频特征,构建具体不同视频特征的视频文件,并采用所有解码器逐一对视频文件进行解码,获取各解码器解码过程中的错误帧率及平均解码时间,建立视频特征与解码器之间的映射关系,该映射关系中视频特征与解码器之间是一对多的关系,且映射关系中采用解码属性描述解码器。
[0044] 本实施例中,N的取值为10,具体来说,当I帧的间隔为固定间隔时,I帧量化值=视频文件的前10个I帧量化值的平均数;当I帧的间隔为自动间隔时,I帧量化值=视频前10个I帧的码流阈值与宏块SAD值的平均数。
[0045] 同时,本实施例中当视频编码格式相同,且I帧量化值之间的偏差小于5%,则认为两个视频特征相同。
[0046] S3、当应用程序调用MediaCodec的构造函数初始化解码框架时,记录解码框架的初始化参数,该初始化参数包括视频编码格式、视频帧率等,为每个解码器均创建一个实例,再采用解码框架的初始化参数初始化各解码器。
[0047] S4、当应用程序开始读取视频文件时,执行以下操作:
[0048] S4.1、获取当前视频文件的视频编码格式,并基于读取到的视频文件的10个I帧计算视频文件的I帧量化值,得到视频文件的视频特征;
[0049] S4.2、根据上面得到的视频特征在映射关系中搜索:
[0050] 如存在与当前视频特征相匹配的解码器,则按照优先选择错误帧率最小的解码器,如存在多个相同错误帧率的解码器,则优先选择平均解码时间最短的方式选取两个解码器,并分别设置为主解码器和从解码器;如不存在则按照硬解码器优先的原则随机选取两个解码器,并分别设置为主解码器和从解码器;
[0051] 再为选定的两个解码器添加已使用标签。
[0052] S5、当应用程序解码一帧视频帧时,执行以下操作:
[0053] S5.1、主解码器执行标准解码流程解码一帧视频帧;
[0054] S5.2、如当前视频帧为I帧,则:
[0055] 从解码器解码当前视频帧,若从解码器解码此帧时报错则从没有已使用标签的解码器里重新选择一个从解码器,按照优先选择错误帧率最小的、其次优先选择平均解码时间最短的方式,并为被选出的解码器添加已使用标签;如没有可选的从解码器,即当前解码器均存在已使用标签,则将从解码器置空。
[0056] 从解码器存在替代主解码器的可能,因此从解码器的解码会话必须完成每个I帧的解码,否则如果主解码器在解码P帧或B帧时出错,那么由于P帧或B帧依赖之前的I帧而从解码器未解码这些I帧,而导致从解码器无法根据之前的I帧完成该P帧或B帧的解码。
[0057] S5.3、主解码器解码视频帧时如报错,则:
[0058] S5.3.1、如从解码器为空,此时实际上所有解码器都已被添加了已使用标签,则:从包括当前主解码器的所有解码器里重新选择一个解码器,优先选择错误帧率最小的、其次优先选择平均解码时间最短的;若选出的解码器还是当前主解码器,则跳过当前视频帧,将当前读取帧指向下一帧视频帧,再执行后续标准解码操作;若选出的解码器不是当前主解码器,则加载该解码器,并将当前读取帧指向下一个I帧。
[0059] 上述操作是因为所有解码器都已被使用过了,换句话说所有解码器都出现过解码出错的问题;将当前读取帧指向下一个I帧的原因是新的解码会话必须从I帧开始否则不能正确解码。
[0060] S5.3.2、如从解码器不为空,则切换到从解码器执行解码,从解码器升级为主解码器;从剩下的解码器里重新选择一个从解码器,优先选择错误帧率最小的、其次优先选择平均解码时间最短的,如果没有可选的从解码器则将从解码器置空。
[0061] S5.4、记录主解码器的错误帧数、已解码帧数和解码总时间。
[0062] S6、结束解码或播放时,保存当前的视频特征和已使用的解码器的解码属性的映射关系。
[0063] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。