一种并发视频会话ip帧图像组的解码方法

文档序号:938975 发布日期:2021-03-05 浏览:15次 >En<

阅读说明:本技术 一种并发视频会话ip帧图像组的解码方法 (Decoding method of concurrent video session IP frame image group ) 是由 张玉晓 徐珠宝 赵志伟 刘长鑫 王继五 孙浩 贺志强 李静 刘立 于 2019-09-05 设计创作,主要内容包括:本申请公开了一种并发视频会话IP帧图像组的解码方法,该解码方法包括:步骤S1,对接收到的数据片段进行缓存,并依次对数据片段进行解码,当判定数据片段的最后一帧待解码视频帧不是完整帧时,判断最后一帧待解码视频帧是否为I帧,若是,保存I帧,记作拼接帧,并清除缓存的数据片段,若否,执行步骤S2;步骤S2,将缓存的解码尾帧进行I帧编码,记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧,并清除缓存的数据片段;步骤S3,将拼接帧与下一个数据片段的首帧进行拼接,并对拼接后的下一个数据片段进行解码。通过本申请中的技术方案,解决了并发解码丢帧问题,降低数据缓存的存储空间,优化了并发解码的实时性。(The application discloses a method for decoding concurrent video session IP frame image groups, which comprises the following steps: step S1, caching the received data segments, decoding the data segments in sequence, judging whether the video frame to be decoded of the last frame is an I frame or not when judging that the video frame to be decoded of the last frame of the data segments is not a complete frame, if so, storing the I frame, recording the I frame as a spliced frame, clearing the cached data segments, and if not, executing step S2; step S2, I frame coding is carried out on the cached decoding tail frame, the I frame is recorded as a splicing I frame, the splicing I frame and the video frame to be decoded of the last frame are stored and recorded as splicing frames, and the cached data segment is removed; and step S3, splicing the spliced frame with the first frame of the next data segment, and decoding the spliced next data segment. By the technical scheme, the problem of frame loss in concurrent decoding is solved, the storage space of data cache is reduced, and the real-time performance of concurrent decoding is optimized.)

一种并发视频会话IP帧图像组的解码方法

技术领域

本申请涉及视频处理的技术领域,具体而言,涉及一种并发视频会话IP帧图像组的解码方法。

背景技术

视频会话解码的并行性可以通过多进程或者多线程进行实现,但考虑到系统性能和资源问题,进程/线程的数量不能太多,在要进行并行解码的视频会话数量,远超进程/线程数量时,则需要将多个视频会话在一个进程/线程中进行并发解码。

在并发解码处理过程中,每一路视频会话的视频内容都是由碎片化的网络数据包负载,提取、拼接成数据片段后,进行解码的,解码进程/线程交替为不同路视频会话的数据片段进行解码。由于视频会话的数量过多,为每一路会话都维护相应解码上下文,会占用非常多的存储资源,因此,只能够对每个数据片段进行独立解码。因此,当内存资源受限,无法为每一路视频都维护解码上下文资源时,会出现由于分段并发解码导致的丢帧问题,无法满足全量不丢帧的解码需求。

视频会话是以图像组为一个解码的完整单位,图像组以一个I帧为起始,后面跟随多个帧类型为P帧的待解码视频帧,其中,I帧可以独立解码,P帧需要依赖前一个I帧或P帧的解码结果进行解码。对于包括I帧、P帧的图像组,此时图像组类型为IP帧型,该图像组中待解码视频帧的采集顺序、编码顺序、存储顺序、解码顺序和存储顺序是相同的,即在此类图像组中,可以进行顺序解码。

在并发解码时,每一路视频会话中的图像组,会被拆分为不同的数据片段,解码进程/线程交替解码不同的数据片段。但由于数据片段划分方式的不确定性,无法保证划分后的每个数据片段的首帧均为当前图像组中的I帧,因此,存在数据片段中第一个I帧之前的数据,由于无法解码,而造成数据丢帧的问题。

而现有技术中,为了解决数据丢帧问题,通常是采用数据缓存的方法,将缓存的数据拼接到当前的数据片段中,具体包括以下两种方法:

1、缓存前一个数据片段中的最后一个I帧,将缓存的I帧拼接到当前数据片段的前端,对拼接后的数据片段进行解码,再将当前数据片段的最后一个I帧进行缓存,以便于对下一个数据片段进行解码。而这种方法,不仅对缓存的I帧进行重复解码,而且当前数据片段中,对于由缓存的I帧进行解码的待解码视频帧而言,存在由于缺少前一帧的视频内容,导致当前解码的待解码视频帧解码失真的可能。

2、缓存前一个数据片段中的最后一个I帧以及该I帧后面的所有P帧,将缓存的I帧、P帧拼接到当前数据片段的前端,对拼接后的数据片段进行解码,再将当前数据片段的最后一个I帧和该I帧后面的所有P帧进行缓存,以便于对下一个数据片段进行解码。而这种方法,缓存的I帧、P帧均存在重复解码,导致解码延迟较高。在多路并发场景下,需要占用的缓存空间也比较大。

发明内容

本申请的目的在于:在解决并发解码丢帧问题的同时,降低数据缓存的存储空间,优化了并发解码的实时性。

本申请的技术方案是:提供了一种并发视频会话IP帧图像组的解码方法,适用于多路视频会话的并发数据片段解码,数据片段由图像组组成,图像组中包含多帧待解码视频帧,该解码方法包括:步骤S1,对接收到的数据片段进行缓存,并依次对数据片段进行解码,当判定数据片段的最后一帧待解码视频帧不是完整帧时,判断最后一帧待解码视频帧是否为I帧,若是,保存I帧,记作拼接帧,并清除缓存的数据片段,若否,执行步骤S2;步骤S2,将缓存的解码尾帧进行I帧编码,记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧,并清除缓存的数据片段;步骤S3,将拼接帧与下一个数据片段的首帧进行拼接,并对拼接后的下一个数据片段进行解码。

上述任一项技术方案中,进一步地,解码方法,还包括:当判定最后一帧待解码视频帧是完整帧时,对最后一帧待解码视频帧进行解码,并判断最后一帧待解码视频帧是否为I帧,若是,保存I帧,记作拼接帧,清除缓存的数据片段,执行步骤S3,若否,将最后一帧待解码视频帧的解码视频帧进行I帧编码,并保存,记作拼接帧,清除缓存的数据片段,执行步骤S3。

上述任一项技术方案中,进一步地,数据片段为IP帧,解码尾帧为数据片段中倒数第二帧待解码视频帧、解码后的解码视频帧。

上述任一项技术方案中,进一步地,步骤S2,包括:步骤S201,判断倒数第二帧待解码视频帧是否为I帧,若是,执行步骤S202,若否,执行步骤S203;步骤S202,将I帧记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧;步骤S203,将解码尾帧进行I帧编码,生成拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧;步骤S204,清除缓存的数据片段。

上述任一项技术方案中,进一步地,对数据片段进行解码,具体包括:步骤S101,读取缓存的数据片段中的第一待解码视频帧,判断第一待解码视频帧是否为P帧,若否,执行步骤S102,若是,执行步骤S103;步骤S102,清除第一待解码视频帧之前缓存的第二待解码视频帧和对应的、缓存的第二解码视频帧,对当前的第一待解码视频帧进行解码,生成第一解码视频帧,并对当前的第一待解码视频帧和第一解码视频帧进行缓存;步骤S103,根据之前的第二解码视频帧,对当前的P帧进行解码,生成所述第一解码视频帧,清除之前缓存的第二待解码视频帧和对应的第二解码视频帧,并对当前的P帧和第一解码视频帧进行缓存;步骤S104,输出第一解码视频帧。

本申请的有益效果是:

通过对接收到的最后一帧视频帧类型的判断,对解码尾帧和最后一帧视频帧进行保存,以便于对下一个数据片段的首帧进行拼接,解决了下一数据片段因缺少I帧或者中间视频帧,而导致并发解码丢帧的问题,同时通过对解码尾帧中所包含视频帧类型的判断,对不同的视频帧进行保存,降低了为解码下一个数据片段而保存的上一个数据片段视频帧的存储空间,在相同编解码的方法下,本申请的存储空间至少为一帧视频帧(且该视频帧为不完整I帧),最多为两帧视频帧(且最后一帧视频帧为不完整P帧)。

本申请对任一数据片段中全部的视频帧进行解码,在通过对数据片段尾部非I帧的解码视频帧,进行I帧编码并保存,降低了内存占用,且避免了数据片段尾部视频帧的重复解码,提高了视频会话中并发解码的实时性,降低了性能损耗,且能保证100%出帧率。

附图说明

本申请的上述和/或附加方面的优点在结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是现有的并发视频会话IP帧图像组的解码方法的示意流程图;

图2是根据本申请的一个实施例的并发视频会话IP帧图像组的解码方法的示意流程图;

图3是根据本申请的一个实施例的IP帧数据片段中最后一帧种类的示意图;

图4是根据本申请的一个实施例的IP帧解码方法的示意流程图;

图5是根据本申请的一个实施例的原始帧信息和解码帧信息的缓存示意图。

具体实施方式

为了能够更清楚地理解本申请的上述目的、特征和优点,下面结合附图和具体实施方式对本申请进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互结合。

在下面的描述中,阐述了很多具体细节以便于充分理解本申请,但是,本申请还可以采用其他不同于在此描述的其他方式来实施,因此,本申请的保护范围并不受下面公开的具体实施例的限制。

在多路并发网络视频会话数据处理过程中,由于无法为每一路网络视频会话进行独立解码,因此,需要采用并发视频解码技术,进行并发解码,并发视频解码处理过程主要包括以下几部分:1.识别并捕获承载有视频数据的网络报文;2.剥离出视频负载数据;3.缓存和拼接视频数据,将符合条件的拼接数据送入解码模块;4.在解码模块中,进行并发视频解码;5.解码后数据用于进行内容分析。

而现有的并发视频会话IP帧图像组的解码方法,以IP帧类型的数据片段为例,如图1所示,需要保存当前数据片段中最后一个I帧和其之后的全部P帧,用于对下一数据片段的首帧进行拼接,每一帧视频帧的存储内容较大,因此,无法在占用系统内存较低的存储空间的前提下,既保证降低解码失真的可能,又保证较低的解码延迟。

以下结合图2至图5对本申请的实施例进行说明。

如图2所示,本实施例提供了一种并发视频会话IP帧图像组的解码方法,适用于多路视频会话的并发数据片段解码,数据片段由图像组组成,图像组中包含多帧待解码视频帧,若图像组由I帧和P帧构成,则可将该数据片段的类型记作为IP帧,该解码方法包括:

步骤S1,对接收到的数据片段进行缓存,并依次对数据片段进行解码,当判定数据片段的最后一帧待解码视频帧不是完整帧时,判断最后一帧待解码视频帧是否为I帧,若是,保存I帧,记作拼接帧,并清除缓存的数据片段,若否,执行步骤S2;

具体地,对于现有的视频会话编码方法而言,任意一路视频会话的数据片段的首帧视频帧,一定为I帧,该I帧可以独立解码,对于IP帧数据片段而言,该I帧的解码结果可以用于对第二帧的P帧进行解码,再由该P帧的解码结果对下一个P帧进行解码,依次循环,直到将该数据片段中的所有视频帧全部解码。需要说明的是,在本实施例中,不考虑包含多个连续I帧的情况。

对于一个数据片段而言,由于数据片段划分方式的不确定性,其首帧可以为:完整的I帧、部分I帧、完整的P帧、部分P帧四种情况,对应于上一个数据片段的最后一帧视频帧(最后一帧待解码视频帧),其类型依次为:完整P帧、部分I帧、完整的I帧或完整的P帧、部分P帧(此时,倒数第二视频帧可以为完整的I帧或完整的P帧),如图3所示。因此,通过判断最后一帧待解码视频帧是否为完整帧、以及最后一帧待解码视频帧是否为I帧,可以对下一数据片段的解码方法以及保存的视频帧进行选择。

当判定最后一帧待解码视频帧不是完整帧时,分为以下情况:

1)最后一帧待解码视频帧为不完整的P帧,对应于C2和C4,此时需要执行步骤S2;

2)最后一帧待解码视频帧为不完整的I帧,对应于C6,直接将该不完整的I帧保存,记作拼接帧,将该拼接帧拼接到下一个数据片段的首帧之前,执行步骤S3,对拼接后的首帧进行解码。

进一步地,该方法还包括:

当判定最后一帧待解码视频帧是完整帧时,对最后一帧待解码视频帧进行解码,并判断最后一帧待解码视频帧是否为I帧,

若是,保存I帧,记作拼接帧,清除缓存的数据片段,执行步骤S3,若否,将最后一帧待解码视频帧的解码视频帧进行I帧编码,并保存,记作拼接帧,清除缓存的数据片段,执行步骤S3。

具体地,当不能够成功读取下一帧视频帧时,已缓存的原始帧信息(a)中的内容即为当前数据片段的最后一帧待解码视频帧,即最后一帧待解码视频帧为完整帧时,分为以下情况:

1)最后一帧待解码视频帧为完整的P帧,则利用现有的I帧编码方法,将该P帧解码后的解码视频帧进行I帧编码,记作拼接帧,将该拼接帧进行保存,若下一个数据片段的首帧为I帧,对应于C1,则将该拼接帧删除,执行步骤S3,仅依据下一数据片段的首帧进行解码即可;若下一个数据片段的首帧为P帧,对应于C3,则将该拼接帧拼接到下一个数据片段的首帧之前,执行步骤S3,对拼接后的首帧进行解码;

2)最后一帧待解码视频帧为完整的I帧,则将该I帧进行保存,记作拼接帧,将该拼接帧拼接到下一个数据片段的首帧之前,对应于C5,执行步骤S3,对拼接后的首帧进行解码。

在本实施例中,示出一种视频帧完整性判断的方法,具体包括:

视频被封装在固定的数据结构中,该数据结构包括定长部分和变长部分,其中,定长部分的字节数是确定的,存储视频帧的一些基本信息,这些基本信息中的某个特定字段是视频帧的字节数。变长部分的字节数是不确定的,变长部分用于存储视频帧的实际数据,该数据的数据长度,由定长部分的视频帧字节数确定。

从变长部分的起始位置开始读取数据,当读取的数据长度大于或等于视频帧字节数时,说明读取到的该视频帧为完整帧;当读取的数据长度小于视频帧字节数时,说明读取到的该视频帧是不完整帧。

在本实施例中,示出一种视频帧类型判断的方法,具体包括:

视频帧的起始位置也包括定长的数据结构,其中的某个字段指明了帧类型,因此,可以通过某个特定的字段,对帧的类型进行区分。

以H.264为例,紧随[头部专属字段]的第一个字节的低5位表示帧类型,5表示I帧,1表示P帧。区分P帧和I帧,需要继续解析第三个字节,该字节从高位起连续0的个数记录为n,读取连续0跟随的1之后的n个比特的值a,计算2^n-1+a。若值为0、3、5、8,则为P帧,若值为2、4、7、9则为I帧。

如图4所示,本实施例提供了一种并发视频会话IP帧图像组的解码方法,具体包括以下方法:

首先,接收视频数据片段后,对接收到的数据片段进行缓存,判断是否还有后续数据片段,若没有后续数据片段,则表明该路视频会话已处理完毕,清除缓存的数据;若还有后续数据片段,则判断当前数据片段的首帧是否为完整I帧,若是,则读取该首帧,并进行解码。解码该I帧后,对于该首帧之后的任一视频帧而言:1)当读取成功且判定该视频帧为完整帧时,则对该视频帧进行解码,并进行缓存,2)如果读取成功,但判定该视频帧不是完整帧时,则表明该视频帧为当前数据片段的最后一帧视频帧(最后一帧待解码视频帧),对该视频帧的类型进行判断,按照类型的不同,对该不完整的视频帧进行保存,3)如果未能成功读取,则表明当前数据片段中的视频帧以全部处理完毕,此时,对已缓存的视频帧进行保存。

如果当前数据片段的首帧不是完整的I帧,则将缓存的视频帧拼接到当前的首帧之后,再对拼接后的该首帧进行读取。

然后,待首帧解码成功之后,读取下一帧视频帧,重新判断是否读取成功、以及判断读取的视频帧是否为完整帧,依次循环,直到没有后续数据片段。

进一步地,在本实施例中示出一种IP帧数据片段的解码方法,当判定仍有后续数据片段、且对当前数据片段进行缓存后,依次对数据片段中的视频帧进行解码,该解码包括:

步骤S101,读取缓存的数据片段中的第一待解码视频帧,判断第一待解码视频帧是否为P帧,若否,执行步骤S102,若是,执行步骤S103;

步骤S102,清除第一待解码视频帧之前缓存的第二待解码视频帧和对应的、缓存的第二解码视频帧,对当前的第一待解码视频帧进行解码,生成第一解码视频帧,并对当前的第一待解码视频帧和第一解码视频帧进行缓存;其中,第一待解码视频帧为当前读取的待解码视频帧,第二待解码视频帧为已经解码过的、上一帧待解码视频帧,即原始帧。

具体地,如图5所示,将待解码视频帧和对应的解码视频帧缓存至原始帧信息(a)和解码帧信息(A)中,设定当前的读取的视频帧为第一待解码视频帧,前一帧视频帧为第二待解码视频帧,则此时的原始帧信息(a)中的内容为第二待解码视频帧,解码帧信息(A)中的内容为第二解码视频帧。

当成功读取一个完整的视频帧(即第一待解码视频帧)后,判断第一待解码视频帧是I帧还是P帧,如果是I帧,则可以根据该第一待解码视频帧进行独立解码,解码过程为现有的I帧解码过程即可,此过程不再赘述。因此,清除已缓存的原始帧信息(a)和解码帧信息(A)中的内容,以降低内存空间的占用,并对该第一待解码视频帧进行独立解码,再将解码后的第一解码视频帧和该第一待解码视频帧缓存入解码帧信息(A)和原始帧信息(a)中,以便于对后续的P帧进行解码。

步骤S103,根据之前缓存的第二解码视频帧,对当前的P帧进行解码,生成所述第一解码视频帧,清除之前缓存的第二待解码视频帧和对应的第二解码视频帧,并对当前的P帧和第一解码视频帧进行缓存;

具体地,当判定第一待解码视频帧是P帧时,由于对P帧解码需要将前一视频帧解码后的解码视频帧作为解码的依据,即第二解码视频帧,该第二解码视频帧已缓存于解码帧信息(A)中,因此,根据缓存的解码帧信息(A),利用现有的P帧解码过程,对第一待解码视频帧进行解码,得到第一解码视频帧。

之后,清除已缓存的原始帧信息(a)和解码帧信息(A)中的内容,再将第一待解码视频帧和第一解码视频帧依次缓存入原始帧信息(a)和解码帧信息(A)中,以便于对后续的P帧进行解码。

步骤S104,输出第一解码视频帧,读取下一个视频帧。

步骤S2,将缓存的解码尾帧进行I帧编码,记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧,并清除缓存的数据片段,其中,解码尾帧为数据片段中倒数第二帧待解码视频帧、解码后的解码视频帧;

进一步地,当最后一帧待解码视频帧不是完整帧、且为P帧时,步骤S2中具体包括:

步骤S201,判断倒数第二帧待解码视频帧是否为I帧,若是,执行步骤S202,若否,执行步骤S203;

步骤S202,将I帧记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧;

具体地,此时,原始帧信息(a)和解码帧信息(A)中的内容为倒数第二帧待解码视频帧和解码尾帧(解码视频帧),当判定倒数第二帧待解码视频帧为I帧时,对应于C4,则将原始帧信息(a)和最后一帧待解码视频帧进行缓存,再将缓存的原始帧信息(a)和最后一帧待解码视频帧进行保存,存入保存信息(H)中,记作拼接帧,并将缓存的原始帧信息(a)和解码帧信息(A)中的内容清除,以实现降低内存空间的目的。

步骤S203,将解码尾帧进行I帧编码,生成拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧;

具体地,当判定倒数第二帧待解码视频帧为P帧时,对应于C2,利用现有的I帧编码方法,将解码帧信息(A)中的内容进行I帧编码,记作拼接I帧,将拼接I帧和最后一帧待解码视频帧,缓存至原始帧信息(a)中,再对缓存的原始帧信息(a)和最后一帧待解码视频帧进行保存,存入保存信息(H)中,并将缓存的原始帧信息(a)和解码帧信息(A)中的内容清除,以实现降低内存空间的目的。

步骤S204,清除缓存的数据片段。

步骤S3,将拼接帧与下一个数据片段的首帧进行拼接,并对拼接后的下一个数据片段进行解码。

具体地,对于当前数据片段中的最后一帧待解码视频帧不是完整帧的情况,下一个数据片段的首帧必然不是完整帧,即下一个数据片段的首帧不是完整的I帧,因此,需要将上述步骤中保存的拼接帧与下一个数据片段的首帧进行拼接,之后,读取拼接后的下一个数据片段的首帧,对该首帧进行解码。

本实施例示出一种拼接方法,具体包括:

可以从保存信息(H)中的内容获取字节数N1以及对应的数据D1,对于下一个数据片段的首帧而言,其字节数N2和数据D2已知。通过分配一个能够容纳N1+N2字节的内存空间,并将D1拷贝到内存空间起始位置,将D2拷贝到D1的末尾,即可将该内存空间中的数据作为下一个数据片段的拼接首帧。

需要说明的是,本实施例中的编码方法和解码方法,采用现有的编解码方法即可。

通过对大量视频会话中数据片段的处理信息统计,本实施例中的并发视频会话IP帧图像组的解码方法,可以保证100%出帧率,可以适用于对出帧率要求100%的场景中,比如公安监测系统、网安检测系统、国安监测系统、军工检测系统等,并且具有如下效果:

(1)多路并发视频数据片段不丢帧、不失真解码;

(2)不需要维护解码上下文,每个数据片段最多缓存一个I帧和一个不完整的P帧,存储空间占用少;

(3)每个数据片段的处理中最多增加一次编码和两次解码操作,计算量相对较少,低性能损耗。

以上结合附图详细说明了本申请的技术方案,本申请提出了一种并发视频会话IP帧图像组的解码方法,该解码方法包括:步骤S1,对接收到的数据片段进行缓存,并依次对数据片段进行解码,当判定数据片段的最后一帧待解码视频帧不是完整帧时,判断最后一帧待解码视频帧是否为I帧,若是,保存I帧,记作拼接帧,并清除缓存的数据片段,若否,执行步骤S2;步骤S2,将缓存的解码尾帧进行I帧编码,记作拼接I帧,保存拼接I帧和最后一帧待解码视频帧,记作拼接帧,并清除缓存的数据片段;步骤S3,将拼接帧与下一个数据片段的首帧进行拼接,并对拼接后的下一个数据片段进行解码。通过本申请中的技术方案,解决了并发解码丢帧问题,降低数据缓存的存储空间,优化了并发解码的实时性。

本申请中的步骤可根据实际需求进行顺序调整、合并和删减。

本申请装置中的单元可根据实际需求进行合并、划分和删减。

尽管参考附图详地公开了本申请,但应理解的是,这些描述仅仅是示例性的,并非用来限制本申请的应用。本申请的保护范围由附加权利要求限定,并可包括在不脱离本申请保护范围和精神的情况下针对发明所作的各种变型、改型及等效方案。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:视频编解码的方法、装置、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类