数据包排序去抖方法及装置制造方法

文档序号:7824077阅读:248来源:国知局
数据包排序去抖方法及装置制造方法
【专利摘要】本发明适用于通信【技术领域】,提供了一种数据包排序去抖方法及装置,所述方法包括:在接收到的数据包满足入队要求时,将所述数据包入队;计算所述数据包的网络抖动,并根据所述抖动调整所述第一缓存数组的大小;若第二缓存数组中存在满足入队要求的数据包时,则对第二缓存数组中的数据包入队;在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;根据已出队数据包组建网络抽象层单元NALU。本发明降低了数据包的丢包率,实现了动态调整缓存数组的大小,且NALU在结构上保持完整,减少NALU组建的复杂度,有效解决了解码器崩溃的问题。
【专利说明】数据包排序去抖方法及装置

【技术领域】
[0001]本发明属于通信【技术领域】,尤其涉及数据包排序去抖方法及装置。

【背景技术】
[0002]现有的视频直播或者点播技术主要是基于用户数据包协议UDP来实现音视频信号的传输,然而UDP的传输是不可靠的。H264编码技术是一种新型高效的编码方式,相对于H263技术,在相同视频质量的情况下,H264所传输的数据量只是H263的一半。针对H264编码技术,现有的数据包排序去抖方法主要是基于VoIP,然而这种排序去抖方案只适用于传输音频数据,而不适用于传输视频数据,且容易造成人为丢包的情况;排序时所使用的缓存数组的大小是固定的,影响用户体验,并且不能对所传输的数据进行校验,容易造成解码器的崩溃。


【发明内容】

[0003]鉴于此,本发明实施例提供一种数据包排序去抖方法及装置,以解决现有音视频传输方法导致的解码器崩溃的问题,降低数据包的丢包率,保持NALU在结构上的完整性,减少NALU组建的复杂度以及动态调整缓存数组的大小。
[0004]第一方面,提供了一种数据包排序去抖方法,所述方法包括:
[0005]接收数据包;
[0006]在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;
[0007]在数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小;
[0008]在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;
[0009]在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;
[0010]根据已出队数据包组建网络抽象层单元NALU。
[0011]第二方面,提供了一种数据包排序去抖装置,所述装置包括:
[0012]接收模块,用于接收数据包;
[0013]第一入队模块,用于在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;
[0014]调整模块,用于在数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小;
[0015]第二入队模块,用于在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;
[0016]出队模块,用于在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;
[0017]组建模块,用于根据已出队数据包组建网络抽象层单元NALU。
[0018]与现有技术相比,本发明实施例增加了第二缓存数组用于暂存提前到达但不符合入队要求的数据包;在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;在所述数据包入队完成后,计算所述数据包的网络抖动,并根据所述抖动调整所述第一缓存数组的大小;在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;根据已出队数据包组建网络抽象层单元NALU ;从而实现了数据包的有序排列,并且所述第二缓存数组中暂存提前到达但不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还实现了动态调整缓存数组的大小,进一步提升了用户体验;且在组建网络抽象层单元NALU的过程中通过恢复丢失的数据包保证了 NALU在数据结构上的完整性,减少了 NALU组建的复杂度。

【专利附图】

【附图说明】
[0019]图1是本发明实施例一提供的数据包排序去抖方法的第一实现流程图;
[0020]图2是本发明实施例二提供的数据包排序去抖方法中数据包入队操作的实现流程图;
[0021]图3是本发明实施例三提供的数据包排序去抖方法中数据包出队操作的实现流程图;
[0022]图4是本发明实施例三提供的数据包排序去抖方法中数据包出队操作过程中步骤S302的具体实现流程图;
[0023]图5是本发明实施例四提供的数据包排序去抖装置的组成结构图。

【具体实施方式】
[0024]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0025]本发明实施例增加了第二缓存数组用于暂存提前到达但不符合入队要求的数据包;在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;在所述数据包入队完成后,计算所述数据包的网络抖动,并根据所述抖动调整所述第一缓存数组的大小;在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;根据已出队数据包组建网络抽象层单元NALU (NALU为Network Abstract1n Layer Unit的缩写);从而实现了数据包的有序排列,并且所述第二缓存数组暂存提前到达但不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还实现了动态调整缓存数组的大小,进一步提升了用户体验;且在组建网络抽象层单元NALU的过程中通过恢复丢失的数据包保证了 NALU在数据结构上的完整性,减少了 NALU组片的复杂度。本发明还提供了相应的装置,以下分别进行详细的说明。
[0026]实施例一
[0027]图1示出了本发明实施例一提供的数据包排序去抖方法的第一实现流程,为了便于说明,仅示出了与本发明相关的部分。所述方法用于实现音视频数据的传输过程。
[0028]在本发明实施例中,预先设置了一个用于存储满足入队要求的数据包的环形数组,即为第一缓存数组;一个用于存储提前到达而不符合入队要求的数据包的有序集合,即为第二缓存数组;一个与第一缓存数组对应的标志位数组,用于记录第一缓存数组相应位置上是否存储有数据。
[0029]如图1所示,所述方法包括:
[0030]在步骤SlOl中,接收数据包。
[0031]在本发明实施例中,所述数据包包括但不限于音频数据包、视频数据包。
[0032]在步骤S102中,在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队。
[0033]优选地,所述入队要求是指:所述数据包的序列号大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号。因此,在接收到数据包后,首先计算所述数据包的序列号,并判断所述序列号是否位于第一缓存数组可存储的数据包的序列号范围内,即判断所述序列号是否大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号。示例性地,若所述第一缓存数组可存储100个数据,且第一缓存数组的起始位置上所存储的数据包的序列号为1001,则所述第一缓存数组可存储的数据包的最小序列号为1001,可存储的数据包的最大序列号为1100。
[0034]优选地,在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并判断第一缓存数组中所述位置上是否已经存储有数据。若有,则表明所接收到的数据包为重复包,丢弃所接收到的数据包;否则,将所述数据包存储到所述位置上以完成数据包入队。
[0035]在步骤S103中,在数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小。
[0036]在本发明实施例中,优选根据所接收到的数据包的时间戳来计算网络抖动,并根据第一缓存数组的当前缓存深度和所述网络抖动计算所述第一缓存数据的临时缓存深度。其中,所述当前缓存深度表征第一缓存数组当前的实际大小,而临时缓存深度则表征本次接收的数据包所经历的网络环境对第一缓存大小的影响。将所述临时缓存深度与当前缓存深度进行比对,以获取当前网络环境的连续变化趋势。
[0037]优选地,本发明采用两个计算器来记录当前网络的连续变化趋势,分别记为缓存增大因子和缓存减小因子。在临时缓存深度大于当前缓存深度时,缓存增大因子加1,缓存减小因子归O ;判断缓存增大因子是否等于第一阈值。若是,则判定当前网络环境恶化,延时变大,相应地第一缓存数组的大小也要增大。此时,新建一个数组,其大小为第一缓存数组的大小(即缓存深度)加1,标志位数组加1,并以出队位置为起始位置将原第一缓存数组的数据复制到所新建的数组中,以所新建的数组作为第一缓存数组,并将增大因子归O。在临时缓存深度小于当前缓存深度时,缓存减小因子加1,缓存增大因子归O ;判断缓存减小因子是否等于第二阈值。若是,则判定当前网络环境变好,延时变小,相应地第一缓存数组的大小也要减小。此时,新建一个数组,其大小为第一缓存数组的大小(即缓存深度)减1,标志位数组减1,并以出队位置为起始位置将原第一缓存数组的数据复制到所新建的数组中,以所新建的数组作为第一缓存数组,并将缓存减小因子归O。在缓存增大因子小于第一阈值或者缓存减小因子小于第二阈值时,跳过对缓存大小的调整,直接执行步骤S104。
[0038]在步骤S104中,在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上。
[0039]在本发明实施例中,每次有数据包入队后,均检测第二缓存数组中是否有满足入队要求的数据包。所述入队要求同上所述。在检测到第二缓存数组中有满足入队要求的数据包时,则返回S102执行数据包的入队操作。具体请参见上述步骤S102和S103的叙述,此处不再赘述。
[0040]在步骤S105中,在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作。
[0041]在步骤S106中,根据已出队数据包组建网络抽象层单元NALU。
[0042]在本放实施例中,所述满足出队要求是指所记录的数据包的个数大于或等于(调整后的)第一缓存数组的大小。如第一缓存数组满足出队要求,则对第一缓存数组中序列号最小的数据包执行出队操作。
[0043]其中,所述NALU的中文名称为网络抽象层单元,是H264编码技术为了适应各种网络传输方式而对数据包进行封装的一种方式,是解码器解码的基本单元,所述对数据包执行出队操作包括:在出队位置上有数据包时,将数据包出队以组建NALU ;否则,在出队位置上没有数据包时,根据出队位置上数据包进行恢复处理,以保证组建的NALU的数据包在结构上的完整的,减少NALU组片的复杂度。
[0044]本发明实施例增加了第二缓存数组用于暂存提前到达而不符合入队要求的数据包;在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;在所述数据包入队完成后,计算所述数据包的网络抖动,并根据所网络述抖动调整所述第一缓存数组的大小;在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;根据已出队数据包组建网络抽象层单元NALU;从而实现了数据包的有序排列,并且所述第二缓存数组暂存提前到达而不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还实现了动态调整缓存数组的大小,进一步提升了用户体验;且在组建网络抽象层单元NALU的过程中通过恢复丢失的数据包保证了 NALU在数据结构上的完整性,减少了 NALU组片的复杂度。
[0045]实施例二
[0046]图2是出了本发明实施例二提供的数据包处理方法中数据包入队操作的具体实现流程;为了便于说明,仅示出了与本发明相关的部分。
[0047]如图2所示,所述方法包括:
[0048]在步骤S201中,接收视频序列的第一个数据包。
[0049]在步骤S202中,将所述数据包存储到第一缓存数组的起始位置上,对标志位数组对应位置置I,缓存数组中的数据个数加I。
[0050]在步骤S203中,判断是否接收到新的数据包。
[0051]若是,则执行步骤S204,否则,返回步骤S203。
[0052]在步骤S204,获取所述数据包的序列号,判断所述序列号是否满足入队要求。
[0053]所述入队要求为数据包的序列号大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号。
[0054]在判断结果为是时,执行步骤S205 ;否则,执行步骤S219。
[0055]在步骤S205中,计算所述数据包在第一缓存数组中的位置,并判断第一缓存数组的所述位置上是否存储有数据包。
[0056]在第一缓存数组的所述位置上存储有数据包时,表明所述数据包为重复接收的数据包,执行步骤S206 ;否则,执行步骤S207。
[0057]在步骤S206中,丢弃所述数据包。
[0058]在步骤S207中,将所述数据包存储至第一缓存数组的所述位置上,设置标志位数组的对应位置为1,缓存数组中的数据个数加I。
[0059]在步骤S208中,计算所述数据包的网络抖动和临时缓存深度。
[0060]在步骤S209中,判断所述临时缓存深度是否大于当前缓存深度。
[0061]在判断结果为是时,执行步骤S210 ;否则,执行步骤S213。
[0062]在步骤S210中,将缓存增大因子加1,缓存减小因子归O。
[0063]在步骤S211中,判断缓存增大因子是否等于第一阈值。
[0064]若是,表明当前网络环境在恶化,延时增大,则执行步骤S212 ;否则,执行步骤S216。所述第一阈值为判定是否扩展第一缓存数组的大小的标准。
[0065]在步骤S212中,新建一个数组,其大小为第一缓存数组的大小加1,标志位数组加I,并以出队位置为起始位置将原第一缓存数组的数据复制到所新建的数组中,以所新建的数组作为第一缓存数组,并将缓存增大因子归O。
[0066]跳转至步骤S216。
[0067]在步骤S213中,将缓存减小因子加1,缓存增大因子归O。
[0068]在步骤S214中,判断缓存减小因子是否等于第二阈值。
[0069]若是,表明当前网络环境在变好,延时减小,则执行步骤S215;否则,执行步骤S216。所述第二阈值为判定是否缩减第一缓存数组的大小的标准。
[0070]在步骤S215中,新建一个数组,其大小为第一缓存数组的大小减1,标志位数组减I,并以出队位置为起始位置将原第一缓存数组的数据复制到所新建的数组中,以所新建的数组作为第一缓存数组,并将缓存减小因子归O。
[0071]在步骤S216中,判断第二缓存数组中是否存在满足入队要求的数据包。
[0072]在判断结果为是时,返回步骤S204 ;否则,执行步骤S217。
[0073]在步骤S217中,判断缓存数组中的数据个数是否大于或等于第一缓存数组的大小。
[0074]在判断结果为是时,执行步骤S218 ;否则,返回步骤S203。
[0075]在步骤S218中,对第一缓存数组中序列号最小的数据包执行出队操作。
[0076]在步骤S219中,判断所述数据包的序列号大于第一缓存数组可存储的数据包的最大序列号时。
[0077]若是,则执行步骤S220,将所述数据包按照序列号的先后顺序存储至所述第二缓存数组中。
[0078]否则,执行步骤S221,在所述数据包的序列号小于第一缓存数组可存储的数据包的最小序列号时,丢弃所述数据包。
[0079]本发明实施例实现了数据包的有序排列,且增加了第二缓存数组用于暂存提前到达而不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还实现了根据网络抖动来动态调整缓存数组的大小,进一步提升了用户体验。
[0080]实施例三
[0081]图3示出了本发明实施例三提供的数据包排序去抖方法中数据包出队操作的实现流程,为了便于说明,仅示出了与本发明相关的部分。
[0082]在步骤S301中,在缓存数组中的数据个数大于或等于第一缓存数组的大小时,判断出队位置上是否有数据包。
[0083]其中,所述缓存数组的数据个数为第一缓存数组和第二缓存数组中的数据包的总个数。
[0084]若是,则执行步骤S303,否则,执行步骤S302。
[0085]在步骤S302中,获取出队位置上的数据包类型,根据所述数据包类型恢复所述数据包,对所恢复的数据包执行出队操作,以组建网络抽象层单元NALU。
[0086]跳转至S304。
[0087]步骤S302将在后续图4所述示例进行详细说明,具体请参见后续实施例,此处不再赘述。
[0088]在步骤S303中,将出队位置上的数据包出队以组建NALU,设置标志位数组的对应位置为0,并且计算下一个出队位置,缓存数组中的数据个数减I。
[0089]优选地,本发明实施例在将出队位置上的数据包出队后,保存出队数据包为上一个数据包。
[0090]在步骤S304中,判断是否有组建完成的NALU。
[0091]在判断结果为是时,执行步骤S305 ;否则,执行步骤S309。
[0092]在步骤S305中,获取NALU的丢包标识位,判断所述丢包标志位是否为I。
[0093]其中,所述丢包标志位的值为I时,表明所述NALU是由经过恢复处理的丢失数据包组建而成的,执行步骤S306。否则,所述丢包标志位的值为O时,执行步骤S309,将所述NALU发送至解码器进行解码,跳转至步骤S310。
[0094]在步骤S306中,判断所述NALU的类型是否为SPS。
[0095]在判断结果为是时,执行步骤S307,将所述NALU发送至解码器进行解码,并设置丢包标志位的值为O。跳转至步骤S310。
[0096]否则,执行步骤S308,丢弃该NALU。
[0097]在步骤S310中,判断第一缓存数组中是否还有数据包。
[0098]在判断结果为是时,则返回步骤S301 ;否则,结束出队操作。
[0099]通过上述步骤,通过丢包标识为来识别当前组建完成的NALU是否为完整的,即是否不存在丢失的数据包;并在数据包发生丢包的情况下,丢弃由恢复的丢失数据包组成的且不为序列参数集SPS的NALU,从而避免了将有问题的NALU发送至解码器,解决了现有数据传输方法导致解码器崩溃的问题。
[0100]进一步地,图4示出了本发明实施例三提供的数据包排序去抖方法中数据包出队操作过程中步骤S302的具体实现流程,为了便于说明,仅示出了与本发明相关的部分。
[0101]如图4所示,步骤S302包括:
[0102]在步骤S401中,在出队位置上没有数据包时,计算丢失的数据包的数目,并设置丢包标识位为I。
[0103]在步骤S402中,判断丢失的数据包的数目是否等于第一缓存数组的大小。
[0104]若是,则当前第一缓存数组是空的,则执行步骤S403,将第二缓存数组中的所有数据包入队。否则,执行步骤S404。
[0105]在步骤S404中,获取所述出队位置向前的第一个数据包、向后的第一个有效数据包的类型。
[0106]其中,所述类型包括独立包、分包,分包包括首包、中间包以及尾包三种情况。
[0107]在步骤S405中,判断所述出队位置上的数据包与出队位置向前的第一个数据包、向后的第一个有效数据包是否属于同一个NALU。
[0108]若是,则执行步骤S406,以向前的第一个数据包为基础恢复所述出队位置上的数据包,设置所恢复的数据包为中间包,并对所恢复的数据包执行出队操作。
[0109]否则,分别根据向前的第一个数据包和向后的第一个有效数据包的类型来判断出队位置上的数据包类型。包括:
[0110]在所述向前的第一个数据包和向后第一个有效数据包均为独立包时,可获知出队位置上的数据包为独立包,则执行步骤S407,对所述向后的第一个有效数据包执行出队操作。
[0111]在向前的第一个数据包为独立包、向后的第一个有效数据包为分包时,执行步骤S408,判断向后的第一个有效数据包是否为首包。
[0112]在向后的第一个有效数据包为首包时,可获知出队位置上的数据包为独立包或者出队位置上到向后的第一个有效数据包对应的位置之间的数据包组成完整的NALU,则执行步骤S409,对所述向后的第一个有效数据包执行出队操作。否则,执行步骤S410,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作。通过步骤S410,保证了出队的数据包能够与后续的出队数据包组成完整的NALU0
[0113]在向前的第一个数据包为分包、向后的第一个有效数据包为独立包时,执行步骤S411,判断向前的第一个数据包是否为尾包。
[0114]在向前的第一个数据包为尾包时,可获知出队位置上的数据包为独立包或者出队位置上到向后的第一个有效数据包之前的位置之间的数据包组成完整的NALU,执行步骤S412,对所述向后的第一个数据包执行出队操作;否则,执行步骤S413,以所述向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,设置下一个出队位置为所述向后的第一个有效数据包所在位置。通过步骤S413,保证了出队的数据包能够与后续的出队数据包组成完整的NALU。
[0115]在所述向前的第一个数据包和向后的第一个有效数据包均为分包时,执行步骤S414,判断向前的第一个数据包是否为尾包。
[0116]在向前的第一个数据包为尾包时,执行步骤S415,判断向后的第一个有效数据包是否为首包。若是,可获知出队位置上的数据包为独立包或者出队位置上到向后的第一个有效数据包对应的位置之间的数据包组成完整的NALU,则执行步骤S416,对所述向后的第一个有效数据包执行出队操作;否则,执行步骤S417,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包进行出队操作。
[0117]在向前的第一个数据包不为尾包,即向前的第一个数据包为首包或者中间包时,执行步骤S418,判断向后的第一个数据包是否为首包。若是,则执行步骤S419,以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并设置下一个出队位置为所述向后的第一个有效数据包所在位置;否则,执行步骤S420,以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并恢复向后的第一个有效数据包的前一个位置上的数据包为首包,设置向后的第一个有效数据包的前一个位置为下一个出队位置。
[0118]通过上述步骤,在出队位置上没有数据包时,可知出现了数据包丢失的情况,则根据出队位置向前一个位置的数据包和向后的第一个有效数据包的类型来判断出队位置上的数据包类型,以对出队位置上的丢失数据包进行恢复,然后进行相应的出队操作,使得当前出队的数据包能够与已出队的数据包组成完整的NALU,从而保证了进行NALU组建的数据在结构上是完整的,从而减小了 NALU组片的复杂度;进一步地,由于在进行数据包恢复之前设置了丢包标志位的值为1,由经过恢复处理的数据包组建出来的NALU不能给解码器进行解码,也避免将有问题的NALU传输至解码器造成解码器的崩溃。
[0119]应理解,在本发明实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,而不应对本发明实施例的实施过程构成任何限定。
[0120]实施例四
[0121]图5示出了本发明实施例四提供的数据包排序去抖装置的组成结构,为了便于说明,仅示出了与本发明相关的部分。
[0122]在本发明实施例中,预先设置了一个用于存储满足入队要求的数据包的环形数组,即为第一缓存数组;一个用于存储提前到达而不符合入队要求的数据包的有序集合,即为第二缓存数组;一个与第一缓存数组对应的标志位数组,用于记录第一缓存数组相应位置上是否存储有数据。
[0123]如图5所示,所述装置包括:
[0124]接收模块51,用于接收数据包;
[0125]第一入队模块52,用于在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;
[0126]调整模块53,用于在数据包入队完成后,计算所述数据包的网络抖动,并根据所述抖动调整所述第一缓存数组的大小;
[0127]第二入队模块54,用于在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;
[0128]出队模块55,用于在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;
[0129]组建模块56,用于根据已出队数据包组建网络抽象层单元NALU。
[0130]优选地,所述入队要求为:所述数据包的序列号大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号。
[0131]所述装置还包括:
[0132]预存储模块57,用于在所述数据包的序列号大于第一缓存数组可存储的数据包的最大序列号时,将所述数据包按照序列号的先后顺序存储至所述第二缓存数组中;以及
[0133]丢弃模块58,用于在所述数据包的序列号小于第一缓存数组可存储的数据包的最小序列号时,丢弃所述数据包。
[0134]本发明实施例中,第一入队模块和第二入队模块实现了数据包的有序排列,且增加的第二缓存数组用于暂存提前到达而不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还通过调整模块实现了根据网络抖动来动态调整缓存数组的大小,进一步提升了用户体验。
[0135]优选地,所述出队模块55还包括:
[0136]第一出队单元551,用于在所述出队位置上有数据包时,将所述出队位置上的数据包出队以组建网络抽象层单元NALU,并将第一缓存数组中的数据个数减1,计算下一个出队位置。
[0137]第二出队单元552,在所述出队位置上没有数据包时,计算丢失的数据包数目,并设置丢包标识位为I ;判断丢失的数据包数目与第一缓存数组的大小是否相同;若是,则将第二缓存数组中的所有数据包存储至所述第一缓存数组上;否则,获取出队位置上的数据包类型,根据所述数据包类型恢复所述数据包,对所恢复的数据包执行出队操作,以组建网络抽象层单元NALU。
[0138]优选地,所述组建模56块还包括:
[0139]第一判断单元561,用于判断是否有组建完成的NALU ;
[0140]获取单元562,用于在判断单元的判断结果为是时,获取该NALU的丢包标识位;
[0141]解码单元563,用于在所述丢包标志位的值为O时,将所述NALU传输给解码器进行解码;
[0142]第二判断单元564,用于在所述丢包标识位的值为I时,判断所述NALU的类型是否为序列参数集SPS ;
[0143]所述解码单元563还用于,在所述NALU的类型为序列参数集SPS时,将所述NALU传输给解码器进行解码;
[0144]丢弃单元565,用于在所述NALU的类型不为序列参数集SPS时,丢弃所述NALU。
[0145]本发明实施例通过丢包标识为来识别当前组建完成的NALU是否为完整的,即是否不存在丢失的数据包;并在数据包发生丢包的情况下,丢弃由经过恢复处理的数据包组成的且不为序列参数集SPS的NALU,从而避免了将有问题的NALU发送至解码器,解决了现有数据传输方法导致解码器崩溃的问题。
[0146]进一步地,所述第二出队单元552用于根据出队位置上的前一个数据包、后一个数据包的类型确定出队位置上的数据包类型,具体包括:
[0147]获取所述出队位置向前的第一个数据包、向后的第一个有效数据包的类型,所述类型包括独立包、分包,分包包括首包、中间包以及尾包;
[0148]在所述出队位置上的数据包与出队位置向前的第一个数据包、向后的第一个有效数据包属于同一个NALU时,以向前的第一个数据包为基础恢复所述出队位置上的数据包,设置所恢复的数据包为中间包,并对所恢复的数据包执行出队操作;
[0149]在所述向前的第一个数据包、向后的第一个有效数据包均为独立包时,对所述向后的第一个有效数据包执行出队操作;
[0150]在向前的第一个数据包为独立包、向后的第一个有效数据包为分包时,判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否则,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作;
[0151]在向前的第一个数据包为分包、向后的第一个有效数据包为独立包时,判断向前的第一个数据包为尾包;若是,则对所述向后的第一个数据包执行出队操作;否则,以所述向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,设置下一个出队位置为所述向后的第一个有效数据包所在位置;
[0152]在所述向前的第一个数据包和向后的第一个有效数据包均为分包时,若向前的第一个数据包为尾包,则判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否则,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作;若向前的第一个数据包为首包或者中间包时,则判断向后的第一个有效数据包是否为首包;若是,则以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并设置下一个出队位置为所述向后的第一个有效数据包所在位置;否则,以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并恢复向后的第一个有效数据包的前一个位置上的数据包为首包,设置向后的第一个有效数据包的前一个位置为下一个出队位置。
[0153]通过第二出队单元根据出队位置向前一个位置的数据包和向后的第一个有效数据包的类型来判断出队位置上的数据包类型,以对出队位置上的丢失数据包进行恢复,然后进行相应的出队操作,从而保证了组建NALU的数据在结构上是完整的,减小了 NALU组片的复杂度;进一步地,由于在进行数据包恢复之前设置了丢包标志位的值为1,由经过恢复处理的数据包组建出来的NALU不能给解码器进行解码,也避免将有问题的NALU传输至解码器造成解码器的崩溃。
[0154]需要说明的是,本发明实施例中的装置可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。
[0155]本发明实施例增加第二缓存数组用于暂存提前到达但不符合入队要求的数据包;在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队;在所述数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小;在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上;在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作;根据已出队数据包组建网络抽象层单元NALU ;从而实现了数据包的有序排列,并且所述第二缓存数组暂存提前到达而不符合入队要求的数据包,避免了人为丢包,在丢包量大的情况下能够极大地降低数据包在传输过程中的丢包率;本发明还实现了动态调整缓存数据的大小,进一步提升了用户体验;且在组建网络抽象层单元NALU的过程中通过恢复丢失的数据包保证了 NALU在数据结构上的完整性,减少了组片的复杂度。
[0156]本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能宄竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0157]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0158]在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0159]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0160]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0161]所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0162]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种数据包排序去抖方法,其特征在于,所述方法包括: 接收数据包; 在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队; 在数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小; 在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上; 在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作; 根据已出队数据包组建网络抽象层单元NALU。
2.如权利要求1所述的数据包排序去抖方法,其特征在于,所述入队要求为:所述数据包的序列号大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号; 在所述数据包的序列号大于第一缓存数组可存储的数据包的最大序列号时,所述方法还包括: 将所述数据包按照序列号的先后顺序存储至所述第二缓存数组中; 在所述数据包的序列号小于第一缓存数组可存储的数据包的最小序列号时,所述方法还包括: 丢弃所述数据包。
3.如权利要求1所述的数据包排序去抖方法,其特征在于,所述根据已出队数据包组建网络抽象层单元NALU包括: 判断是否有组建完成的NALU ; 若是,则获取该NALU的丢包标识位; 在所述丢包标志位的值为O时,将所述NALU传输给解码器进行解码; 在所述丢包标识位的值为I时,判断所述NALU的类型是否为序列参数集SPS ;在所述NALU的类型为序列参数集SPS时,将所述NALU传输给解码器进行解码;否则,丢弃所述NALU0
4.如权利要求1至3任一所述的数据包排序去抖方法,其特征在于,所述在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否贝1J,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作包括: 在所述出队位置上有数据包时,将所述出队位置上的数据包出队以组建网络抽象层单元NALU,并将第一缓存数组中的数据个数减1,计算下一个出队位置; 在所述出队位置上没有数据包时,计算丢失的数据包数目,并设置丢包标识位为I ;判断丢失的数据包数目与第一缓存数组的大小是否相同;若是,则将第二缓存数组中的所有数据包存储至所述第一缓存数组上;否则,获取出队位置上的数据包类型,根据所述数据包类型恢复所述数据包,对所恢复的数据包执行出队操作,以组建网络抽象层单元NALU。
5.如权利要求4所述的数据包排序去抖方法,其特征在于,所述获取出队位置上的数据包类型,根据所述数据包类型恢复所述数据包,对所恢复的数据包执行出队操作,以组建网络抽象层单元NALU包括: 获取所述出队位置向前的第一个数据包、向后的第一个有效数据包的类型,所述类型包括独立包、分包,分包包括首包、中间包以及尾包; 在所述出队位置上的数据包与出队位置向前的第一个数据包、向后的第一个有效数据包属于同一个NALU时,以向前的第一个数据包为基础恢复所述出队位置上的数据包,设置所恢复的数据包为中间包,并对所恢复的数据包执行出队操作; 在所述向前的第一个数据包、向后的第一个有效数据包均为独立包时,对所述向后的第一个有效数据包执行出队操作; 在向前的第一个数据包为独立包、向后的第一个有效数据包为分包时,判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否贝1J,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作; 在向前的第一个数据包为分包、向后的第一个有效数据包为独立包时,判断向前的第一个数据包为尾包;若是,则对所述向后的第一个数据包执行出队操作;否则,以所述向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并设置下一个出队位置为所述向后的第一个有效数据包所在位置; 在所述向前的第一个数据包和向后的第一个有效数据包均为分包时,若向前的第一个数据包为尾包,则判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否则,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作;若向前的第一个数据包为首包或者中间包时,则判断向后的第一个有效数据包是否为首包;若是,则以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并设置下一个出队位置为所述向后的第一个有效数据包所在位置;否则,以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并恢复向后的第一个有效数据包的前一个位置上的数据包为首包,设置向后的第一个有效数据包的前一个位置为下一个出队位置。
6.一种数据包排序去抖装置,其特征在于,所述装置包括: 接收模块,用于接收数据包; 第一入队模块,用于在所接收到的数据包满足入队要求时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上以完成数据包入队; 调整模块,用于在数据包入队完成后,计算所述数据包的网络抖动,并根据所述网络抖动调整所述第一缓存数组的大小; 第二入队模块,用于在第一缓存数据的大小调整结束后,若第二缓存数组中存在满足入队要求的数据包时,计算所述数据包在第一缓存数组中的位置,并将所述数据包存储到所述位置上; 出队模块,用于在第一缓存数组满足出队要求时,若出队位置上有数据包时,对出队位置上的数据包执行出队操作;否则,在出队位置上没有数据包时,对出队位置上的数据包进行恢复后执行出队操作; 组建模块,用于根据已出队数据包组建网络抽象层单元NALU。
7.如权利要求6所述的数据包排序去抖装置,其特征在于,所述入队要求为:所述数据包的序列号大于第一缓存数组可存储的数据包的最小序列号且小于或等于第一缓存数组可存储的数据包的最大序列号; 所述装置还包括: 预存储模块,用于在所述数据包的序列号大于第一缓存数组可存储的数据包的最大序列号时,将所述数据包按照序列号的先后顺序存储至所述第二缓存数组中;以及 丢弃模块,用于在所述数据包的序列号小于第一缓存数组可存储的数据包的最小序列号时,丢弃所述数据包。
8.如权利要求6所述的数据包排序去抖装置,其特征在于,所述组建模块还包括: 第一判断单元,用于判断是否有组建完成的NALU ; 获取单元,用于在判断单元的判断结果为是时,获取该NALU的丢包标识位; 解码单元,用于在所述丢包标志位的值为O时,将所述NALU传输给解码器进行解码;第二判断单元,用于在所述丢包标识位的值为I时,判断所述NALU的类型是否为序列参数集SPS ; 所述解码单元还用于,在所述NALU的类型为序列参数集SPS时,将所述NALU传输给解码器进行解码; 丢弃单元,用于在所述NALU的类型不为序列参数集SPS时,丢弃所述NALU。
9.如权利要求6至8任一所述的数据包排序去抖装置,其特征在于,所述出队模块还包括: 第一出队单元,用于在所述出队位置上有数据包时,将所述出队位置上的数据包出队以组建网络抽象层单元NALU,并将第一缓存数组中的数据个数减1,计算下一个出队位置;第二出队单元,在所述出队位置上没有数据包时,计算丢失的数据包数目,并设置丢包标识位为I ;判断丢失的数据包数目与第一缓存数组的大小是否相同;若是,则将第二缓存数组中的所有数据包存储至所述第一缓存数组上;否则,获取出队位置上的数据包类型,根据所述数据包类型恢复所述数据包,对所恢复的数据包执行出队操作,以组建网络抽象层单元NALU。
10.如权利要求9所述的数据包排序去抖装置,其特征在于,所述第二出队单元还用于: 获取所述出队位置向前的第一个数据包、向后的第一个有效数据包的类型,所述类型包括独立包、分包,分包包括首包、中间包以及尾包; 在所述出队位置上的数据包与出队位置向前的第一个数据包、向后的第一个有效数据包属于同一个NALU时,以向前的第一个数据包为基础恢复所述出队位置上的数据包,设置所恢复的数据包为中间包,并对所恢复的数据包执行出队操作; 在所述向前的第一个数据包、向后的第一个有效数据包均为独立包时,对所述向后的第一个有效数据包执行出队操作; 在向前的第一个数据包为独立包、向后的第一个有效数据包为分包时,判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否贝1J,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作; 在向前的第一个数据包为分包、向后的第一个有效数据包为独立包时,判断向前的第一个数据包为尾包;若是,则对所述向后的第一个数据包执行出队操作;否则,以所述向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,设置下一个出队位置为所述向后的第一个有效数据包所在位置; 在所述向前的第一个数据包和向后的第一个有效数据包均为分包时,若向前的第一个数据包为尾包,则判断向后的第一个有效数据包是否为首包;若是,则对所述向后的第一个有效数据包执行出队操作;否则,跳转至向后的第一个有效数据包的前一个位置,并恢复所述位置上的数据包为首包,对所述首包执行出队操作;若向前的第一个数据包为首包或者中间包时,则判断向后的第一个有效数据包是否为首包;若是,则以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并设置下一个出队位置为所述向后的第一个有效数据包所在位置;否则,以向前的第一个数据包为基础恢复所述出队位置上的数据包为尾包,对所恢复的尾包执行出队操作,并恢复向后的第一个有效数据包的前一个位置上的数据包为首包,设置向后的第一个有效数据包的前一个位置为下一个出队位置。
【文档编号】H04L12/885GK104506455SQ201410830305
【公开日】2015年4月8日 申请日期:2014年12月26日 优先权日:2014年12月26日
【发明者】唐泽鹏, 陈勇全, 赵兵, 郑宏连, 廖子强, 符镇一 申请人:深圳市兰丁科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1