本公开涉及视频通信技术领域,特别涉及一种编解码一致性检测方法、装置、设备。
背景技术:
近年来,视频通信迅速发展,尤其是在短视频、直播、视频会议等应用领域。
在视频通信过程中,服务器端对视频数据进行编码处理,产生视频流,然后发送给终端。终端接收视频流后进行解码,然后进行图像显示。在此过程中,如果要保证终端能够实现图像显示,则需要保证编解码的一致性,也即终端能够解码出视频流中的视频数据。
为了确定编解码的一致性,通常会在上线视频服务前进行编解码一致性的测试。相关技术中,通常进行的编解码测试均是模拟理想的网络环境下进行的,可能测试结果与实际使用时的情况有所差别,造成测试结果不准确。
技术实现要素:
本公开实施例提供了一种编解码一致性检测方法、装置、设备,能够增加测试的准确性。所述技术方案如下:
一方面,提供了一种编解码一致性检测方法,所述方法包括:
获取待编码视频帧;
基于设定丢包率确定是否丢弃所述待编码视频帧;
在不丢弃所述待编码视频帧时,对所述待编码视频帧进行编码;
获取编码过程中获得的重建图像的信息摘要算法值;
基于所述重建图像的信息摘要算法值和编码后的视频帧生成视频流。
一方面,提供了一种编解码一致性检测方法,所述方法包括:
获取编码后的视频流,所述视频流包括视频帧和编码过程中获得的重建图像的信息摘要算法值,所述视频帧是编码端按照设定丢包率选取视频帧后编码得到的;
获取所述视频帧的帧相关参数,确定所述视频帧是否能够解码;
在所述视频帧能够解码时,对所述视频帧进行解码,得到解码图像;
获取所述解码图像的信息摘要算法值;
基于所述解码图像的信息摘要算法值和所述编码过程中获得的重建图像的信息摘要算法值,确定编解码一致性结果。
一方面,提供了一种编解码一致性编码装置,所述装置包括:
第一获取模块,用于获取待编码视频帧;
确定模块,用于基于设定丢包率确定是否丢弃所述待编码视频帧;
编码模块,用于在不丢弃所述待编码视频帧时,对所述待编码视频帧进行编码;
第二获取模块,用于获取编码过程中获得的重建图像的信息摘要算法值;
生成模块,用于基于所述重建图像的信息摘要算法值和编码后的视频帧生成视频流。
一方面,提供了一种编解码一致性检测装置,所述装置包括:
第一获取模块,用于获取编码后的视频流,所述视频流包括视频帧和编码过程中获得的重建图像的信息摘要算法值,所述视频帧是编码端按照设定丢包率选取视频帧后编码得到的;
第一确定模块,用于获取所述视频帧的帧相关参数,确定所述视频帧是否能够解码;
解码模块,用于在所述视频帧能够解码时,对所述视频帧进行解码,得到解码图像;
第二获取模块,用于获取所述解码图像的信息摘要算法值;
第二确定模块,用于基于所述解码图像的信息摘要算法值和所述编码过程中获得的重建图像的信息摘要算法值,确定编解码一致性结果。
一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的编解码一致性检测方法。
一方面,本申请实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的编解码一致性检测方法。
本公开实施例提供的技术方案带来的有益效果是:
通过在编码过程中,根据设定丢包率来确定是否丢弃待编码视频帧,模拟实际网络状态下的视频编解码情况,进而在不经过网络传输的情况下,使得解码端接收到的视频流中包含的视频帧,与实际网络在设定丢包率下接收到的相近。从而可以测试出,在设定丢包率下,编解码一致性情况。通过上述方案,实现了对实际网络状况的模拟,在模拟的网络状况下对于编解码一致性的检测,增加了测试的准确性。
附图说明
为了更清楚地说明本公开实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种编解码一致性检测方法的流程图;
图2是本公开实施例提供的一种编解码一致性检测方法的流程图;
图3是本公开实施例提供的一种编解码一致性检测方法的流程图;
图4是本公开实施例提供的一种编解码一致性编码装置的结构示意图;
图5是本公开实施例提供的一种编解码一致性检测装置的结构示意图;
图6是本公开实施例提供的一种计算机设备的示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
在视频服务中,视频的编码和解码可以由服务商提供的软件开发工具包(softwaredevelopmentkit,sdk)完成。因此,在进行编解码一致性测试时,实际也是测试sdk编码和解码是否一致。
在本公开实施例中,可以在一计算机设备中安装该sdk,从而采用该计算机设备同时模拟视频编解码的编码端和解码端。编码端和解码端之间无需网络连接。
图1是本公开实施例提供的一种编解码一致性检测方法的流程图,该方法的执行主体可以为计算机设备,参见图1,该方法可以包括:
101、获取待编码视频帧。
这里,待编码视频帧是用于测试的测试视频中的视频帧。该测试视频可以事先确定并存储在计算机设备中。
102、基于设定丢包率确定是否丢弃待编码视频帧。
这里的丢包率可以基于需要模拟的网络环境设定,用来模拟视频流的网络传输状况。因此本申请提供的方法可以模拟测试出不同网络环境下的编解码一致性,特别是网络环境较差情况下的编解码一致性。
103、在不丢弃待编码视频帧时,对待编码视频帧进行编码。
在丢弃待编码视频帧时,则不对该待编码视频帧进行编码。重新执行步骤101,获取下一个待编码的视频帧。
104、获取编码过程中获得的重建图像的信息摘要算法(messagedigestalgorithm,md5)值。
在进行视频编码时,会获得视频帧的重建图像,该重建图像的md5值可以在解码后与解码的视频图像比较,确定编解码的一致性。
105、基于重建图像的md5值和编码后的视频帧生成视频流。
通过在编码过程中,根据设定丢包率来确定是否丢弃待编码视频帧,模拟实际网络状态下的视频编解码情况,进而在不经过网络传输的情况下,使得解码端接收到的视频流中包含的视频帧,与实际网络在设定丢包率下接收到的相近。从而可以测试出,在设定丢包率下,编解码一致性情况。通过上述方案,实现了对实际网络状况的模拟,在模拟的网络状况下对于编解码一致性的检测,增加了测试的准确性。
图2是本公开实施例提供的一种编解码一致性检测方法的流程图,该方法的执行主体可以为计算机设备,参见图2,该方法可以包括:
201、获取编码后的视频流,视频流包括视频帧和编码过程中获得的重建图像的md5值,视频帧是编码端按照设定丢包率选取视频帧后编码得到的。
这里的丢包率可以基于需要模拟的网络环境设定,因此本申请提供的方法可以模拟测试出不同网络环境下的编解码一致性,特别是网络环境较差情况下的编解码一致性。
202、获取视频帧的帧相关参数,确定视频帧是否能够解码。
这里,帧相关参数的作用是使得解码端可以根据该帧相关参数确定是否能够对当前要解码的视频帧进行正确的解码,只有确定可以解码时采用进行解码,提高解码效率。
203、在视频帧能够解码时,对视频帧进行解码,得到解码图像。
在视频帧不能够解码时,不对视频帧进行解码,确定下一个待解码的视频帧否能够解码。
204、获取解码图像的md5值。
通过md5算法计算解码出的解码图像的md5值。
205、基于解码图像的md5值和编码过程中获得的重建图像的md5值,确定编解码一致性结果。
在进行视频编码时,会获得视频帧的重建图像,该重建图像的md5值与解码后与解码的视频图像比较,可以确定编解码的一致性。
通过在编码过程中,根据设定丢包率来确定是否丢弃待编码视频帧,模拟实际网络状态下的视频编解码情况,进而在不经过网络传输的情况下,使得解码端接收到的视频流中包含的视频帧,与实际网络在设定丢包率下接收到的相近。从而可以测试出,在设定丢包率下,编解码一致性情况。通过上述方案,实现了对实际网络状况的模拟,在模拟的网络状况下对于编解码一致性的检测,增加了测试的准确性。
图3是本公开实施例提供的一种编解码一致性检测方法的流程图,该方法的执行主体可以为计算机设备,参见图3,该方法可以包括:
301、获取待编码视频帧。
这里,待编码视频帧是用于测试的测试视频中的视频帧。该测试视频可以事先确定并存储在计算机设备中。
302、基于设定丢包率确定是否丢弃待编码视频帧。当确定不丢弃待编码视频帧时,执行步骤303;当确定丢弃待编码视频帧时,丢弃该待编码视频帧,并重新执行步骤301。
示例性地,确定各个待编码视频帧是否丢弃可以采用如下方式:
例如,获取随机数;比较随机数和基于设定丢包率得到的门限值大小;基于比较结果确定是否丢弃待编码视频帧。
也即,对于每个视频帧均需要单独确定是否丢弃,从而模拟实际的网络传输状况。这里,基于比较结果确定是否丢弃待编码视频帧,是指如果随机数大于门限值则不丢弃待编码视频帧,如果不大于门限值则丢弃待编码视频帧;或者如果随机数小于门限值则不丢弃待编码视频帧,如果不小于门限值则丢弃待编码视频帧。
比如,随机数的取值范围可以为1~100,设定丢包率为30%,此时的门限值为30。如果随机数大于30则不丢弃该视频帧,如果小于或等于该门限值30,则丢弃该视频帧。再比如,随机数的取值范围可以为1~100,设定丢包率为30%,此时的门限值为70。如果随机数大于或等于70则丢弃该视频帧,如果小于该门限值70,则不丢弃该视频帧。
再例如,确定待编码视频帧是否为即时解码刷新(instantaneousdecoderrefresh,idr)帧(i帧(关键帧)的一种),idr帧的特点是立刻刷新,使错误不致传播;在待编码视频帧不是idr帧时,获取随机数;比较随机数和基于设定丢包率得到的门限值大小;基于比较结果确定是否丢弃待编码视频帧。
这里,如果待编码视频帧是idr帧,则不丢弃该视频帧。只有不是idr帧时,才采用设定丢包率确定是否丢弃,采用设定丢包率确定的方式和前一种方案相同。这样做是因为在视频的网络传输过程中,部分sdk会有idr的重传动作,确保sdk的成功传输,为了模拟这种场景,采用了上述不丢弃idr帧的方式。
303、对待编码视频帧进行编码。
计算机设备通过调用sdk中的编码模块,执行待编码视频帧的编码操作。
304、获取视频帧的帧相关参数和编码过程中获得的重建图像的md5值。
这里,帧相关参数的作用是使得解码端可以根据该帧相关参数确定是否能够对当前要解码的视频帧进行正确的解码,只有确定可以解码时采用进行解码,提高解码效率。帧相关参数可以由编码模块得到。
通常,帧相关参数包括:视频帧的帧类型、待编码视频帧所属的图像组(groupofpicture,gop)组别、待编码视频帧的图像序列号(pictureordercount,poc)和待编码视频帧的参考帧的poc。
其中,帧类型可以包括i帧、p(向前搜索)帧、b(双向搜索)帧等等,因为i帧不需要参考帧,因此可以直接解码;基于视频帧所属的gop组别、poc等可以确定在不是i帧的情况下是否可以正确解码,详细如何判断,在后续解码模块再详细说明。
而在解码完成后,判断解码一致性则需要重建图像的md5值,重建图像是在编码过程中得到的图像。重建图像的md5值可以基于md5算法计算得到。
305、将视频帧的帧相关参数和重建图像的md5值写入编码得到的视频流的头部。
在常规编码过程中,待编码视频帧的帧相关参数和重建图像的md5值会和对应的视频帧一起写在视频流中,例如将帧相关参数在帧头部,这样获取帧相关参数和重建图像的md5值时,解析过程比较繁琐。而本申请则将待编码视频帧的帧相关参数和重建图像的md5值写在视频流的头部,视频流的头部是指视频流开始时用来传输数据的部分,也即本申请可以将视频帧的帧相关参数和重建图像的md5值在视频流开始时进行传输,这样只需要解析视频流的头部即可得到视频帧的帧相关参数和重建图像的md5值,从而可以加快确定各个视频帧是否可以解码,从而提高解码效率。
由于视频流中各个视频帧的帧相关参数和重建图像的md5值均写在视频流的头部,因此在视频流的头部可以采用视频帧的编号区分这些视频帧的帧相关参数和重建图像的md5值。
306、获取编码后的视频流,视频流包括携带的视频帧的帧相关参数和编码过程中获得的重建图像的md5值。
由于本申请的编码端和解码端是采用同一计算机设备模拟的,因此,视频流无需传输,计算机设备直接获取编码后的视频流即可。
307、获取视频帧的帧相关参数,确定视频帧是否能够解码。如果该视频帧可以解码,则执行步骤308;如果该视频帧不可以解码,则对下一个视频帧执行步骤307。
其中,获取视频帧的帧相关参数可以包括:解析视频流的头部;从视频流的头部获取视频帧的帧相关参数。
其中,确定视频帧是否能够解码,可以包括:
确定视频帧是否为i帧;如果视频帧为i帧,则确定该视频帧可以解码;
如果视频帧不是i帧,则在已解码的视频帧中查找是否存在gop组别相同、poc号和自身的参考帧的poc号相同的视频帧;如果存在,则确定该视频帧可以解码;否则,确定该视频帧不能解码。
如前所述,对于i帧而言,由于不需要参考帧,因此只要是i帧均是可以解码的,通常视频流的第一个帧就是i帧。而对于其他帧而言,则需要确定已解码的视频帧中是否存在其参考帧,如果存在则确认可以解码,否则不可以解码。
相应地,该方法还包括:保存已解码的视频帧的帧相关参数,从而可以在后续解码过程,用来判断各个视频帧是否存在参考帧,进而确定是否可以被解码。
308、对视频帧进行解码,得到解码图像。
计算机设备通过调用sdk中的解码模块,执行视频帧的解码操作。
309、获取解码图像的md5值。
计算机设备通过md5算法,计算每个视频帧解码图像的md5值。
310、基于解码图像的md5值和编码过程中获得的重建图像的md5值,确定编解码一致性结果。
如果视频帧的解码图像的md5值和该视频帧的在编码过程中获得的重建图像的md5值相同,则说明该视频帧编解码一致;否则,说明该视频帧编解码不一致。基于各个视频帧的编解码一致性的情况,得到最终模拟测试出的编解码一致性结果。
当编解码一致性结果中存在视频帧编解码不一致时,则说明编码器和解码器中存在问题,需要进一步定位解决。
本公开提供的方法模拟丢包场景对编解码的一致性进行测试,主要用于模拟当网络情况不好(如丢包率大于10%,如30%)时,编码后的码流包会被随机丢失的情况下,编解码是否还能保持编解码一致,以此对编码器和解码器的性能进行衡量。
图4是本公开实施例提供的一种编解码一致性编码装置的结构示意图。参见图4,该装置包括:第一获取模块401、确定模块402、编码模块403、第二获取模块404和生成模块405。
其中,第一获取模块401,用于获取待编码视频帧;
确定模块402,用于基于设定丢包率确定是否丢弃待编码视频帧;
编码模块403,用于在不丢弃待编码视频帧时,对待编码视频帧进行编码;
第二获取模块404,用于获取编码过程中获得的重建图像的md5值;
生成模块405,用于基于重建图像的md5值和编码后的视频帧生成视频流。
在一种可能的实施方式中,确定模块402,用于获取随机数;比较随机数和基于设定丢包率得到的门限值大小;基于比较结果确定是否丢弃待编码视频帧;
或者,确定模块402,用于确定待编码视频帧是否为idr帧;
在待编码视频帧不是idr帧时,获取随机数;比较随机数和基于设定丢包率得到的门限值大小;基于比较结果确定是否丢弃待编码视频帧。
在一种可能的实施方式中,生成模块405,用于获取视频帧的帧相关参数;
将视频帧的帧相关参数和重建图像的md5值写入编码得到的视频流的头部。
在一种可能的实施方式中,帧相关参数包括:
视频帧的帧类型、视频帧所属的gop组别、视频帧的poc号和视频帧的参考帧的poc号。
图5是本公开实施例提供的一种编解码一致性检测装置的结构示意图。参见图5,该装置包括:第一获取模块501、第一确定模块502、解码模块503、第二获取模块504和第二确定模块505。
第一获取模块501,用于获取编码后的视频流,视频流包括视频帧和编码过程中获得的重建图像的md5值,视频帧是编码端按照设定丢包率选取视频帧后编码得到的;
第一确定模块502,用于获取视频帧的帧相关参数,确定视频帧是否能够解码;
解码模块503,用于在视频帧能够解码时,对视频帧进行解码,得到解码图像;
第二获取模块504,用于获取解码图像的md5值;
第二确定模块505,用于基于解码图像的md5值和编码过程中获得的重建图像的md5值,确定编解码一致性结果。
在一种可能的实施方式中,第一确定模块502,用于解析视频流的头部;
从视频流的头部获取视频帧的帧相关参数。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图6是本公开实施例提供的一种计算机设备的示意图,该计算机设备600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)601和一个或一个以上的存储器602,其中,所述存储器602中存储有至少一条指令,所述至少一条指令由所述处理器601加载并执行以实现上述各个方法实施例提供的基于区块链的兴奋剂检测信息管理方法。当然,该计算机设备还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该计算机设备还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述实施例中的编解码一致性检测方法。例如,所述计算机可读存储介质可以是只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、紧凑型光盘只读储存器(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本公开的可选实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
1.一种编解码一致性检测方法,其特征在于,所述方法包括:
获取待编码视频帧;
基于设定丢包率确定是否丢弃所述待编码视频帧;
在不丢弃所述待编码视频帧时,对所述待编码视频帧进行编码;
获取编码过程中获得的重建图像的信息摘要算法值;
基于所述重建图像的信息摘要算法值和编码后的视频帧生成视频流。
2.根据权利要求1所述的方法,其特征在于,基于设定丢包率确定是否丢弃所述待编码视频帧,包括:
获取随机数;比较所述随机数和基于所述设定丢包率得到的门限值大小;基于比较结果确定是否丢弃所述待编码视频帧;
或者,基于设定丢包率确定是否丢弃所述待编码视频帧,包括:
确定所述待编码视频帧是否为即时解码刷新帧;
在所述待编码视频帧不是即时解码刷新帧时,获取随机数;比较所述随机数和基于所述设定丢包率得到的门限值大小;基于比较结果确定是否丢弃所述待编码视频帧。
3.根据权利要求1或2所述的方法,其特征在于,所述基于所述重建图像的信息摘要算法值和编码后的视频帧生成视频流,包括:
获取所述视频帧的帧相关参数;
将所述视频帧的帧相关参数和所述重建图像的信息摘要算法值写入编码得到的视频流的头部。
4.根据权利要求3所述的方法,其特征在于,所述帧相关参数包括:
所述视频帧的帧类型、所述视频帧所属的图像组组别、所述视频帧的图像序列号和所述视频帧的参考帧的图像序列号。
5.一种编解码一致性检测方法,其特征在于,所述方法包括:
获取编码后的视频流,所述视频流包括视频帧和编码过程中获得的重建图像的信息摘要算法值,所述视频帧是编码端按照设定丢包率选取视频帧后编码得到的;
获取所述视频帧的帧相关参数,确定所述视频帧是否能够解码;
在所述视频帧能够解码时,对所述视频帧进行解码,得到解码图像;
获取所述解码图像的信息摘要算法值;
基于所述解码图像的信息摘要算法值和所述编码过程中获得的重建图像的信息摘要算法值,确定编解码一致性结果。
6.根据权利要求5所述的方法,其特征在于,所述获取所述编码后的视频帧的帧相关参数,包括:
解析所述视频流的头部;
从所述视频流的头部获取所述视频帧的帧相关参数。
7.一种编解码一致性编码装置,其特征在于,所述装置包括:
第一获取模块,用于获取待编码视频帧;
确定模块,用于基于设定丢包率确定是否丢弃所述待编码视频帧;
编码模块,用于在不丢弃所述待编码视频帧时,对所述待编码视频帧进行编码;
第二获取模块,用于获取编码过程中获得的重建图像的信息摘要算法值;
生成模块,用于基于所述重建图像的信息摘要算法值和编码后的视频帧生成视频流。
8.一种编解码一致性检测装置,其特征在于,所述装置包括:
第一获取模块,用于获取编码后的视频流,所述视频流包括视频帧和编码过程中获得的重建图像的信息摘要算法值,所述视频帧是编码端按照设定丢包率选取视频帧后编码得到的;
第一确定模块,用于获取所述视频帧的帧相关参数,确定所述视频帧是否能够解码;
解码模块,用于在所述视频帧能够解码时,对所述视频帧进行解码,得到解码图像;
第二获取模块,用于获取所述解码图像的信息摘要算法值;
第二确定模块,用于基于所述解码图像的信息摘要算法值和所述编码过程中获得的重建图像的信息摘要算法值,确定编解码一致性结果。
9.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至3任一所述的编解码一致性检测方法,或者实现如权利要求4至6任一所述的编解码一致性检测方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至3任一所述的编解码一致性检测方法,或者实现如权利要求4至6任一所述的编解码一致性检测方法。
技术总结