具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的数据包重传方法的流程图,本实施例可适用于对丢失的数据包进行重传的情况,该方法可以由数据包重传装置来执行,该数据包重传装置可以由软件和/或硬件来实现,该数据包重传装置可以配置在电子计算设备上,具体包括如下步骤:
S110、接收当前周期的传输数据包的传输请求,其中,传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号。
示例性的,当前周期可以是当前要传输数据包的时期。
数据包可以是音视频数据包。
传输请求可以是当前周期要传输数据包的请求。
在本发明实施例中,一个周期表示从上一个数据包(例如音视频数据包)发送开始,到当前数据包(例如音视频数据包)发送为止。即上一个要传输的音视频数据包发送开始,到当前要传输的音视频数据包发送为止。
在本发明实施例中,传输请求中包含至少一个待传输的数据包。相邻两个数据包可以分别设置连续的序列号。例如,当前周期要传输一段音频数据,其中,该音频数据具有A、B、C、D、E、F和G这7个数据包,则将相邻的两个数据包分别设置连续的序列号,即分别将A、B、C、D、E、F和G这7个数据设置连续的序列号,比如分别将A、B、C、D、E、F和G这7个数据包设置1、2、3、4、5、6和7。
S120、判断各数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值。
示例性的,预设入队时间阈值可以是预先设置的各数据包上传至缓存队列的传输时间阈值。
当接收到要传输的各数据包后,判断各数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值。
在本发明实施例中,预设入队时间阈值可以是基于当前周期的上一周期的丢包率所确定的。具体的如何根据上一周期的丢包率来确定当前周期的预设入队时间在后续实施例中再详细介绍。
S130、若传输时间大于等于预设入队时间阈值,则对大于等于预设入队时间阈值的数据包进行重传。
示例性的,当确定有数据包的传输时间大于等于预设入队时间阈值,则说明在预设入队时间阈值内,有数据包未传输进入到缓存队列中,则对大于等于预设入队时间阈值的数据包进行重传。
在本发明实施例中,以数据包有1、2、3、4、5、6和7这7个数据包,预设入队时间阈值为2秒为例,当将1、2、3、4、5、6和7这7个数据包向缓存队列中传输时,若有数据包在预设入队时间阈值内未传输进入缓存队列中,例如,假设1、2和3这3个数据包未传输进入到缓存队列中,则将1、2和3这3个数据包进行重新传输。
继续上述示例,在本发明实施例中,1、2和3这3个数据包在预设入队时间阈值内未传输进入到缓存队列中,可能是由于网络中断等原因导致的,因此,可对1、2和3这3个数据包进行重新传输。
这样避免了由于网络中断或网络不好导致数据包无法传输到缓存队列中的问题,保证了所有数据包的正常传输。
S140、若传输时间小于预设入队时间阈值,则将传输时间小于预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
示例性的,预设滞留时间阈值可以是预先设置的数据包在缓存队列中所滞留的时间的阈值。
在本发明实施例中,预设滞留时间阈值可以是基于当前周期的上一周期的丢包率所确定的。具体的如何根据上一周期的丢包率来确定当前周期的预设滞留时间阈值在后续实施例中再详细介绍。
当确定有数据包的传输时间小于预设入队时间阈值,则说明在预设入队时间阈值内,这些数据包传输进入到了缓存队列中。对于进入到缓存队列中的数据包,可对其进行滞留校验,然后将满足滞留校验的数据包根据数据包的序列号,将其上传至客户端,以供用户可在客户端接收数据包。
对于不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传。
在本发明实施例中,对进入缓存队列中的数据包进行滞留校验,具体的可以是计算在缓存队列中的数据包在缓存队列中的滞留时间,更优选的可以是计算在缓存队列中的数据包中,最小序列号的数据包在缓存队列中的滞留时间。
当缓存队列中的数据包在缓存队列中的滞留时间小于预设滞留时间阈值时,则证明该数据包满足滞留校验,若缓存队列中的数据包在缓存队列中的滞留时间大于等于预设滞留时间阈值,则证明该数据包不满足滞留校验。
在本发明实施例中,将不满足滞留校验的数据包进行清除,即将不满足滞留校验的数据包从缓存队列中清除。同时对不满足滞留校验的数据包进行重传。
需要说明的是,在本发明实施例中,不满足滞留校验的数据包可以是滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
具体的,若在缓存队列中的数据包有4、5、6和7,则计算数据包4的滞留时间,若数据包4的滞留时间大于等于预设滞留时间阈值,则将数据包4,以及大于最小序列号的数据包5、6和7都从缓存队列中清除。
具体的,以数据包有1、2、3、4、5、6和7这7个数据包,预设入队时间阈值为2秒,预设滞留时间阈值为3秒为例,当将1、2、3、4、5、6和7这7个数据包向缓存队列中传输时,假设1、2和3这3个数据包未传输进入到缓存队列中,则1、2和3这3个数据包需要进行重新传输,此时数据包4、5、6和7已进入到缓存队列中。由于1、2、3、4、5、6和7这7个数据包组成一段完整的音视频,因此,优选的是将1、2、3、4、5、6和7这7个数据包一起传输至客户端中,这样客户端的用户可听到完整的音频数据。由于1、2和3这3个数据包需要进行重新传输,则数据包4、5、6和7在缓存队列中需要等待,在将1、2和3这3个数据包进行重新传输时,可计算数据包4、5、6和7在缓存队列中滞留的时间,若数据包4、5、6和7在缓存队列中滞留的时间小于预设滞留时间阈值,则证明1、2和3这3个数据包在3秒内重新传输进入到的缓存队列中,则此时可将数据包1、2、3、4、5、6和7上传至客户端中。
若数据包4、5、6和7在缓存队列中滞留的时间大于等于预设滞留时间阈值,则证明1、2和3这3个数据包在3秒内还未重新传输进入到的缓存队列中,则此时可将在缓存队列中的数据包4、5、6和7从缓存队列中进行清除,同时将数据包1、2、3、4、5、6和7重新进行上传。
在本发明实施例中,当完成对数据包进行传输缓存队列的校验(判断数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值)以及进行滞留校验这两个校验后,判断当前入队列的数据包是否为等待的最小序列号的数据包(即判断是否为序列号为1的数据包),如果是等待的数据包(即是序列号为1的数据包),则表示接收到了正确的数据包,将该正确的数据包以及其后序列号连续的数据包出队列,直到非连续的序列号为止(即将该正确的数据包以及其后序列号连续的数据包上传至客户端)。
需要说明的是,在本发明实施例中,对数据包进行重传的意思并不是说对数据包重新进行传输缓存队列的校验(重新判断数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值)以及重新进行滞留校验。而是直接将需重传的数据包直接传输至客户端,若在传输至客户端的过程中,重新传输的数据包上传至客户端成功,则客户端可接收到重传的数据包,若重新传输的数据包上传至客户端失败,则放弃重传的数据包,即客户端接收到的音频数据可能为部分数据包丢失的音频数据。
在本发明实施例中,对重传的数据包,可以预设一个重传次数,例如2次,即对需重传的数据包重传两次,若两次均失败,则放弃该重传的数据包。具体的,这里的预设重传次数可以根据用户需求自行设定,这里不做限定。
本发明实施例中对待传输的数据包进行上述两个校验,实现了有效的对数据包进行重排列,能够更准确的区分乱序的数据包和真正丢失的数据包,从而实现了在网络较差的情况下,确保将丢失的数据包进行更快、更好的重传的效果,增强用户的观看体验。
本发明实施例的技术方案,通过判断各待传输的数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值,对于传输时间大于等于预设入队时间阈值的数据包进行重传,对于传输时间小于预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包进行清除,并对不满足滞留校验的数据包进行重传,这样有效的对数据包进行重排列,能够更准确的区分乱序的数据包和真正丢失的数据包,从而实现了在网络较差的情况下,确保将丢失的数据包进行更快、更好的重传的效果,增强用户的观看体验。
实施例二
图2为本发明实施例二提供的数据包重传方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。在本发明实施例中,可选的,在所述接收当前周期的传输数据包的传输请求之后,所述方法还包括:设置数据包传输监听事件;对应的,所述传输时间和所述滞留时间分别是基于数据包重传监听事件所监听得到的。
如图2所示,本发明实施例的方法具体包括如下步骤:
S210、接收当前周期的传输数据包的传输请求,其中,传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号。
S220、设置数据包传输监听事件。
示例性的,可以设置数据包的传输监听事件,这样可以在数据包的传输过程中,监听数据包的传输过程数据。
具体的,可以是监听步骤S230中的各数据包上传至缓存队列的传输时间。
在本发明实施例中,在执行S230前,首先要获取到各数据包上传至缓存队列的传输时间,这里的获取各数据包上传至缓存队列的传输时间可以是根据设置的数据包传输监听事件来对数据包的传输时间进行监听,这样即可获取到各数据包上传至缓存队列的传输时间。
同样的,数据包传输监听事件还可以监听步骤S250中的缓存队列中各数据包在缓存队列中的滞留时间。
在本发明实施例中,在步骤S250中对缓存队列中的数据包进行滞留校验时,首先要获取缓存队列中各数据包在缓存队列中的滞留时间。这里的获取缓存队列中各数据包在缓存队列中的滞留时间可以是根据设置的数据包传输监听事件来对缓存队列中各数据包在缓存队列中的滞留时间进行监听,这样即可获取到缓存队列中各数据包在缓存队列中的滞留时间。
通过设置数据包传输监听事件的好处在于,可自动监听到各数据包传输至缓存队列中的传输时间,以及自动监听到缓存队列中的各数据包在缓存队列中的滞留时间,这样就不需专门计算各数据包传输至缓存队列中的传输时间,以及缓存队列中的各数据包在缓存队列中的滞留时间,节省了数据包的传输时间和滞留时间的获取时间,提高了效率。
S230、判断各数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值。
S240、若传输时间大于等于预设入队时间阈值,则对大于等于预设入队时间阈值的数据包进行重传。
S250、若传输时间小于预设入队时间阈值,则将传输时间小于预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
本发明实施例的技术方案,通过设置数据包传输监听事件,可自动监听到各数据包传输至缓存队列中的传输时间,以及自动监听到缓存队列中的各数据包在缓存队列中的滞留时间,这样就不需专门计算各数据包传输至缓存队列中的传输时间,以及缓存队列中的各数据包在缓存队列中的滞留时间,节省了数据包的传输时间和滞留时间的获取时间,提高了效率。
实施例三
图3为本发明实施例三提供的数据包重传方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。在本发明实施例中,可选的,在所述将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传之后,所述方法还包括:基于当前周期待重传的数据包,确定当前周期的丢包率;基于当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值。
如图3所示,本发明实施例的方法具体包括如下步骤:
S310、接收当前周期的传输数据包的传输请求,其中,传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号。
S320、设置数据包传输监听事件。
S330、判断各数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值。
S340、若传输时间大于等于预设入队时间阈值,则对大于等于预设入队时间阈值的数据包进行重传。
S350、若传输时间小于预设入队时间阈值,则将传输时间小于预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
S360、基于当前周期待重传的数据包,确定当前周期的丢包率。
示例性的,当确定了当前周期需重新传输的数据包后,可根据当前周期需重新传输的数据包,确定当前周期的丢包率。
在本发明实施例中,具体的根据当前周期待重传的数据包,确定当前周期的丢包率,可以是根据当前周期待重传的数据包的数量来确定当前周期的丢包率。
S370、基于当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值。
示例性的,当计算得到当前周期的丢包率后,可根据计算出的当前周期的丢包率,来对应调整预设入队时间阈值和/或预设滞留时间阈值。
在本发明实施例中,具体的若当前周期的丢包率很高,则说明基于上一周期设置的预设入队时间阈值和/或预设滞留时间阈值偏小,导致过多的数据包无法在预设入队时间阈值内传输至缓存队列中,和/或,在缓存队列中的数据包在缓存队列中停留的时间超过预设滞留时间阈值。因此需要将预设入队时间阈值和/或预设滞留时间阈值调高,这样就可保证尽量多的数据包可在预设入队时间阈值内传输至缓存队列中,和/或,在缓存队列中的数据包在缓存队列中停留的时不会超过预设滞留时间阈值,这样需重新传输的数据包的数量就会减少,丢包率就会减少,以此可保证数据包(例如可以是音视频数据包)可正常传输至客户端中,以确保客户端接收到尽可能完整的音视频数据包。
当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值,这样设置的好处在于,解决了现有技术中缓存队列的长度固定的问题,本发明实施例中将缓存队列的缓存长度设置为可调,这样可动态调整缓存队列,以便当网络较差导致丢包率较大时,避免缓存队列中堆积大量丢包,导致网络恶化,影响用户体验的问题。
本发明实施例的技术方案,通过基于当前周期待重传的数据包可确定当前周期的丢包率,根据当前周期的丢包率,可对应调整预设入队时间阈值和/或预设滞留时间阈值,这样以确保需重新传输的数据包的数量减少,减少丢包率,以此可保证数据包(例如可以是音视频数据包)可正常传输至客户端中,以确保客户端接收到尽可能完整的音视频数据包。同时解决了现有技术中缓存队列的长度固定的问题,本发明实施例中将缓存队列的缓存长度设置为可调,这样可动态调整缓存队列,以便当网络较差导致丢包率较大时,避免缓存队列中堆积大量丢包,导致网络恶化,影响用户体验的问题。
实施例四
图4为本发明实施例四提供的数据包重传方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。在本发明实施例中,可选的,所述基于当前周期待重传的数据包,确定当前周期的丢包率,包括:基于当前周期待重传的数据包的数量和传输请求中的数据包的数量,确定当前周期的累积数据包的数量;基于当前周期待重传的数据包的数量和当前周期的累积数据包的数量,确定当前周期的丢包率。
如图4所示,本发明实施例的方法具体包括如下步骤:
S410、接收当前周期的传输数据包的传输请求,其中,传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号。
S420、设置数据包传输监听事件。
S430、判断各数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值。
S440、若传输时间大于等于预设入队时间阈值,则对大于等于预设入队时间阈值的数据包进行重传。
S450、若传输时间小于预设入队时间阈值,则将传输时间小于预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
S460、基于当前周期待重传的数据包的数量和传输请求中的数据包的数量,确定当前周期的累积数据包的数量。
示例性的,累积数据包的数量可以是当前周期正常传输至客户端的数据包的数量。
当确定了当前周期需重新传输的数据包后,可首先确定当前周期待重传的数据包的数量,即当前周期丢失的数据包的数量。
根据当前周期待重传的数据包的数量,以及传输请求中待传输的数据包的数量,可确定当前周期的累积数据包的数据。
在本发明实施例中,当前周期待重传的数据包的数量可以是实施例一中将各数据包上传至缓存队列中丢失的数据包的数量,和/或,在缓存队列中的各数据包中不满足滞留校验的数据包的数量。
S470、基于当前周期待重传的数据包的数量和当前周期的累积数据包的数量,确定当前周期的丢包率。
示例性的,当确定了当前周期待重传的数据包的数量和当前周期的累积数据包的数量后,可根据当前周期待重传的数据包的数量和当前周期的累积数据包的数量,确定当前周期的丢包率。
在本发明实施例中,具体的可以是根据如下公式来确定当前周期的丢包率:
丢包率=当前周期的丢包数/当前周期的累计包数;
其中,当前周期的丢包数为当前周期待重传的数据包的数量,当前周期的累计包数为当前周期的累积数据包的数量。
S480、基于当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值。
示例性的,在确定了当前周期的丢包率后,可对应调整预设入队时间阈值和/或预设滞留时间阈值。但是为了防止丢包率更新过于频发,导致缓存队列的长度调整过快,即预设入队时间阈值和/或预设滞留时间阈值调整过快,需要对预设入队时间阈值和/或预设滞留时间阈值的调整设置预设条件,当满足该条件时,可对应调整预设入队时间阈值和/或预设滞留时间阈值,当不满足该条件时,即使确定了当前周期的丢包率,也不调整预设入队时间阈值和/或预设滞留时间阈值。
在本发明实施例中,这里的预设条件可以是如下两种情况:
(1)丢包率阈值控制;
当预设条件为丢包率阈值控制时,可选的,所述基于当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值,包括:基于当前周期的丢包率,以及前一周期的丢包率,计算当前周期的丢包率和前一周期的丢包率的第一差值;若第一差值大于等于第一预设差值阈值,则对应调整预设入队时间阈值和/或预设滞留时间阈值。
示例性的,第一差值可以是当前周期的丢包率和前一周期的丢包率的差值。
第一预设差值阈值可以是预先设置的第一差值的阈值。
在确定了当前周期的丢包率后,可根据当前周期的丢包率,以及当前周期的前一周期的丢包率,计算当前周期的丢包率的前一周期的丢包率的差值,若该差值大于等于第一预设差值阈值,则再对应调整预设入队时间阈值和/或预设滞留时间阈值。
在本发明实施例中,当前周期的丢包率与上一周期的丢包率的差值较大时,说明当前周期相较于上一周期具有较多的数据包丢失,因此,需要将当前周期的预设入队时间阈值和/或预设滞留时间阈值进行调整,以确保下一周期的数据包进行传输时,不会出现大量数据包丢失的情况。
(2)丢包率的时间阈值控制;
当预设条件为丢包率的时间阈值控制时,可选的,所述基于当前周期的丢包率,对应调整预设入队时间阈值和/或预设滞留时间阈值,包括:基于计算当前周期的丢包率的第一时间,以及计算上一次更新预设入队时间阈值和/或预设滞留时间阈值的第二时间,计算第一时间和第二时间的第二差值;若第二差值大于等于第二预设差值阈值,则对应调整预设入队时间阈值和/或预设滞留时间阈值。
示例性的,第二差值可以是计算当前周期的丢包率的时间和上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值。
第二预设差值阈值可以是预先设置的第二差值的阈值。
在确定了当前周期的丢包率后,可根据当前周期的丢包率的计算时间,以及上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间,计算当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值,若该差值大于等于第二预设差值阈值,则再对应调整预设入队时间阈值和/或预设滞留时间阈值。
在本发明实施例中,当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值较大时,说明计算当前周期的丢包率距离上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间,相隔时间较久,因此,在进行后续周期的数据包传输时,可能之前设置的预设入队时间阈值和/或预设滞留时间阈值不太适用于现在的数据包,因此,需要将当前周期的预设入队时间阈值和/或预设滞留时间阈值进行调整,以确保下一周期的数据包进行传输时,不会出现大量数据包丢失的情况。
需要说明的是,在本发明实施例中,上述两种预设条件中,当其中一个预设条件满足时,即当当前周期的丢包率与上一周期的丢包率的差值大于等于第一预设差值阈值,或,当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值大于等于第二预设差值阈值时,则对应调整预设入队时间阈值和/或预设滞留时间阈值。
当上述其中一个预设条件不满足时,则再进行另一预设条件的比对,即若当前周期的丢包率与上一周期的丢包率的差值小于第一预设差值阈值时,则再判断当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值是否大于等于第二预设差值阈值,若当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值大于等于第二预设差值阈值,则对应调整预设入队时间阈值和/或预设滞留时间阈值。
当然,还可以是先判断当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值是否大于等于第二预设差值阈值,若当前周期的丢包率的计算时间与上一次更新预设入队时间阈值和/或预设滞留时间阈值的时间的差值小于第二预设差值阈值,再判断当前周期的丢包率与上一周期的丢包率的差值是否大于等于第一预设差值阈值,若当前周期的丢包率与上一周期的丢包率的差值大于等于第一预设差值阈值,则对应调整预设入队时间阈值和/或预设滞留时间阈值。
这样设置预设条件,当满足预设条件时,再对应调整预设入队时间阈值和/或预设滞留时间阈值,这样设置的好处在于,可防止丢包率更新过于频发,导致缓存队列的长度调整过快,即预设入队时间阈值和/或预设滞留时间阈值调整过快的问题。
本发明实施例的技术方案,通过根据当前周期待重传的数据包的数量,来计算当前周期的累积数据包的数量,根据当前周期待重传的数据包的数量和当前周期的累积数据包的数量,可精确确定当前周期的丢包率,在根据当前周期的丢包率,设置预设条件,当满足预设条件时,再对应调整预设入队时间阈值和/或预设滞留时间阈值,这样设置的好处在于,可防止丢包率更新过于频发,导致缓存队列的长度调整过快,即预设入队时间阈值和/或预设滞留时间阈值调整过快的问题。
实施例五
本发明实施例与上述实施例中各个可选方案可以结合。在本发明实施例中,可选的,将上述各实施例中的数据包为音视频数据包为例进行说明:
参考图5所述的数据包重传方法的执行流程图,本发明实施例中的数据包重传方法可以由两个模块来执行,分别为自适应缓存队列模块和丢包率计算与更新模块,自适应缓存队列主要作用是对音视频数据包做重排序,防止出现序列号乱序的情况,这样能更有效的计算丢包率。丢包率计算与更新模块主要作用是根据自适应缓存队列的数据信息计算当前网络的丢包率,并通过计算的丢包率动态更新缓存队列的队列长度。
下面详细介绍图5中的执行流程图的执行逻辑:
1、丢包率计算与更新模块
(1)丢包率的计算
丢包率在每个反馈周期计算一次,每个周期计算当前周期的丢包率,其中一个周期表示从上一个反馈包Receiver Packet(即上一要传输的音视频数据包)发送开始,到当前反馈包(即当前要传输的音视频数据包)发送为止。
丢包率=当前周期的丢包数/当前周期的累计包数;
其中,当前周期的丢包数表示为single_delay_seconds检验失败和/或total_delay_seconds检验失败而出队列的数据包的数量。当前周期的累计包数表示为当前周期序列号连续的入缓存队列的数据包总数,即当前周期传输至客户端的联系序列号的数据包的数量。
需要说明的是,这里的single_delay_seconds检验指的是上述各实施例中判断各数据包传输至缓存队列的传输时间与预设入队时间阈值的关系。
这里的total_delay_seconds检验指的是上述各实施例中的滞留校验。即上述各实施例中判断在缓存队列中的各数据包在缓存队列中滞留时间。
(2)丢包率更新策略
计算完当前周期的丢包率后,并非立即更新丢包率,即并非立即调整预设入队时间阈值和/或预设滞留时间阈值。丢包率更新可以通过两个策略限制,用于防止丢包率更新过于频发,导致队列长度调整过快。策略一是丢包率阈值控制(即上述实施例四中的第一个预设条件),当当前周期的丢包率与上个周期的丢包率的差值大于等于第一预设差值预设时,可强制更新丢包率,即可强制调整预设入队时间阈值和/或预设滞留时间阈值。策略二是丢包率时间阈值控制(即上述实施例四中的第二个预设条件),即当距离上次更新丢包率的时间超过第二预设差值阈值时,强制更新丢包率。
2、自适应缓存队列模块
(1)动态调整缓存队列的长度
自适应缓存队列的队列长度通过参数single_delay_seconds和total_delay_seconds控制,其中single_delay_seconds表示队列中期望的最小序列号的数据包的最大等待时间(即预设入队时间阈值),当等待的期望最小序列号的数据包的时间(即传输时间)超过该最大等待时间,则会将等待时间大于最大等待时间的数据包强制出队列(即进行重传)。
需要说明的是,这里也可以不限制为最小序列号,即可以是要传输的所有序列号的数据包,这里的将其限制为最小序列号的原因是:因为在传输时传输的是整个音视频数据包,该音视频数据包分为多帧数据包,在对各帧数据包进行传输时,将各帧数据包分别设置了序列号,其中,相邻的两帧数据包设置的序列号连续,在设置序列号时,优选的是根据音视频数据包的时间维度进行设置的,因此,序列号小的数据包为音视频数据包的靠前的部分。在传输该音视频数据包,期望将完整的音视频数据包传输至客户端,因此要确保序列号小的数据包传输成功,因此,这里限制为了最小序列号。但如本领域技术人员所公知的,也可以是不限制为最小序列号。具体的可根据用户需求自行设置,这里不做限定。
total_delay_seconds表示进入缓存队列的最小序列号的数据包在缓存队列中的最大滞留时间(预设滞留时间阈值),若在缓存队列中的数据包在缓存队列中的滞留时间大于等于超过该最大滞留时间,则会将该最小序列号所对应的数据包,以及大于该最小序列号的在缓存队列中的数据包强制出缓存队列中,即清空整个缓存队列。
需要说明的是,这里也可以不限制为最小序列号,即可以是要传输的所有序列号的数据包。具体的理由同上所述的传输数据包值缓存队列中的理由,这里不再详细赘述。
当前周期的single_delay_seconds和total_delay_seconds是根据上一周期的丢包率基于指数递减的算法动态调整的,具体的计算公式如下:
其中,α为初始的等待时间值,即待传输的数据包传输至缓存队列中的传输时间,对应丢包率为0的队列长度;β为上一周期中待传输的数据包传输至缓存队列中的传输时间所产生的丢包率的影响权重系数(该值越大,上一周期中待传输的数据包传输至缓存队列中的传输时间所产生的丢包率对于队列长度的影响越大);x为上一周期的丢包率;αm为缓存队列中现有数据包的加权平均值的权重系数(该值越大,缓存队列中现有数据的影响越大);βm为上一周期中进入缓存队列中的数据包所产生的丢包率的影响权重系数(该值越大,进入缓存队列中的数据包所产生的丢包率对于缓存队列长度的影响越大);t为数据包加入队列的时间;C为常系数值。
对于上述公式,进行如下说明:
single_delay_seconds的计算公式表示缓存队列中期望的最小序列号的数据包的最大等待时间随上一周期的丢包率呈指数递减的变化趋势。
当上一周期的丢包率为0时,的值为0,single_delay_seconds的值为α。当出现丢包(即数据包丢失)后,上一周期的丢包率在接近0时,/>会呈现较大幅度的增长,而当上一周期的丢包率较大时,其增长趋势指数递减,最终会趋于稳定。
这样设计的好处是当出现了丢包时,缓存队列能够快速的做出反应,所以在丢包率较小时,缓存队列的增长趋势会较大。而当丢包率足够大之后,再增长丢包率时,其实缓存队列的长度不需要有太明显的变化,所以当丢包率较大后,队列的增长趋势会逐步放缓。
total_delay_seconds的计算公式由三部分组成,第一部分表示缓存队列中现有数据包的滞留时间的平均值,乘以权重αm表示平均值对于缓存队列总长度的影响。第二部分/>表示丢包率以指数递减趋势对缓存队列总长度的影响,当丢包率较大时,缓存队列总长度会趋于稳定。第三部分C表示total_delay_seconds的初始值。
total_delay_seconds由三个部分组成的原因是:既要兼顾缓存队列中现有数据包的综合信息,又要兼顾当前的丢包率,同时还要设定一个初始的值。所以第一部分就是为了兼顾队列的现有数据包,而第二部分是为了兼顾丢包率,第三部分就是设置初始值。
(2)single_delay_seconds校验
当接收到音视频数据包时,会先做single_delay_seconds校验,计算待传输的数据包中最小序列号的数据包传输至缓存队列中的传输时间(即图5中的now_expect_min_sequence_time)是否超过了single_delay_seconds(即预设入队时间阈值),如果超过该时间,表示等待的最小序列号的数据包出现了丢包,重传该数据包。
(3)total_delay_seconds校验
当完成single_delay_seconds校验后,对于传输时间小于single_delay_seconds的数据包,进行total_delay_seconds校验。计算进入缓存队列的最小序列号的数据包在缓存队列中的滞留时间(即图5中的now_inqueue_min_sequence_time)是否超过了total_delay_seconds(即预设滞留时间阈值),如果超过该时间,表明缓存队列中的数据包已经滞留了太长时间,失去了意义,强制清空队列中的所有数据包,重新开始缓存数据包。
(4)min_sequence出队列
当完成以上两个校验后,判断当前在缓存队列的数据包(即图5中的inqueue_min_Sequence)是否为等待的最小序列号的数据包(即图5中的expect_min_sequence),如果是等待的数据包,表示接收到了正确的数据包,将该数据包以及其后序列号连续的数据包出缓存队列,直到非连续的序列号为止,即将正确的数据包以及其后序列号连续的数据包上传至客户端。
需要说明的是,在图5中expect_min_Sequence++可以理解为当判断了缓存队列中的最小序列号为等待的最小序列号数据包后,将该最小序列号的数据包出缓存队列,然后再判断缓存队列中的当前最小序列号数据包是否等待的最小序列号数据包,若是,则再将该当前的最小序列号的数据包出缓存队列,如此反复,直至到非连续的序列号为止。
具体的例如,在缓存队列中有1、2、3、4、5、6和7这7个数据包,首先判断1号数据包是否为要等待的最小序列号数据包,若是(因为,此时该音视频数据包还未上传至客户端,因此在上传该音视频数据包时,用户期望先收到序列号最小的数据包,因此,此时用户期待的最小序列号为1),则将该1号数据包出缓存队列。然后再判断当前在缓存队列中的2、3、4、5、6和7这7个数据包中,最小序列号(即2号)的数据包是否为等待的最小序列号,若是(因为用户已接收到1号数据包,当前用户期待接收到2号数据包),则将该2号数据包出缓存队列。以此类推,直至到缓存队列中的非连续的序列号为止。
需要说明的是,这里的等待的最小序列号是随着出缓存队列的数据包而变化的。
在本发明实施例中,通过引入single_delay_seconds和total_delay_seconds动态调控自适应缓存队列后,如果是通过收到等待的最小序列号数据包而出缓存队列的数据包,表示没有丢包的数据,不需要重传。而通过single_delay_seconds和total_delay_seconds超时从而强制移除缓存队列的数据包,则认为是丢包的数据,需要重传。
通过引入自适应缓存队列,基于丢包率指数递减的算法动态调整缓存队列的长度,能够有效的对音频数据重排列,能够更准确的区分乱序包和真正丢失的包,从而更好地适应音视频的弱网场景,增强用户的观看体验。
实施例六
图6为本发明实施例六提供的数据包重传装置的结构示意图,如图6所示,该装置包括:传输请求接收模块31、判断模块32、第一重传策略确定模块33和第二重传策略确定模块34。
其中,传输请求接收模块31,用于接收当前周期的传输数据包的传输请求,其中,所述传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号;
判断模块32,用于判断各所述数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值;
第一重传策略确定模块33,用于若所述传输时间大于等于所述预设入队时间阈值,则对所述大于等于所述预设入队时间阈值的数据包进行重传;
第二重传策略确定模块34,用于若所述传输时间小于所述预设入队时间阈值,则将所述传输时间小于所述预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,所述不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
在本发明实施例的技术方案的基础上,该装置还包括:
传输监听事件设置模块,用于设置数据包传输监听事件。
可选的,所述传输时间和所述滞留时间分别是基于所述传输监听事件设置模块监听得到。
可选的,所述预设滞留时间阈值和所述预设入队时间阈值分别基于当前周期的前一周期的丢包率确定。
在本发明实施例的技术方案的基础上,该装置还包括:
丢包率确定模块,用于基于所述当前周期待重传的数据包,确定当前周期的丢包率;
缓存队列调整模块,用于基于所述当前周期的丢包率,对应调整所述预设入队时间阈值和/或所述预设滞留时间阈值。
在本发明实施例的技术方案的基础上,丢包率确定模块包括:
累积数据包的数量确定单元,用于基于所述当前周期待重传的数据包的数量和所述传输请求中的数据包的数量,确定当前周期的累积数据包的数量;
丢包率确定单元,用于基于所述当前周期待重传的数据包的数量和所述当前周期的累积数据包的数量,确定当前周期的丢包率。
在本发明实施例的技术方案的基础上,缓存队列调整模块包括:
第一差值确定单元,用于基于所述当前周期的丢包率,以及前一周期的丢包率,计算所述当前周期的丢包率和前一周期的丢包率的第一差值;
第一缓存队列调整单元,用于若所述第一差值大于等于第一预设差值阈值,则对应调整所述预设入队时间阈值和/或所述预设滞留时间阈值。
在本发明实施例的技术方案的基础上,缓存队列调整模块还包括:
第二差值确定单元,用于基于计算所述当前周期的丢包率的第一时间,以及计算上一次更新所述预设入队时间阈值和/或所述预设滞留时间阈值的第二时间,计算所述第一时间和所述第二时间的第二差值;
第二缓存队列调整单元,用于若所述第二差值大于等于第二预设差值阈值,则对应调整所述预设入队时间阈值和/或所述预设滞留时间阈值。
本发明实施例所提供的数据包重传装置可执行本发明任意实施例所提供的数据包重传方法,具备执行方法相应的功能模块和有益效果。
实施例七
图7为本发明实施例七提供的一种电子设备的结构示意图,如图7所示,该电子设备包括处理器70、存储器71、输入装置72和输出装置73;电子设备中处理器70的数量可以是一个或多个,图7中以一个处理器70为例;电子设备中的处理器70、存储器71、输入装置72和输出装置73可以通过总线或其他方式连接,图7中以通过总线连接为例。
存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据包重传方法对应的程序指令/模块(例如,传输请求接收模块31、判断模块32、第一重传策略确定模块33和第二重传策略确定模块34)。处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的数据包重传方法。
存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置72可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置73可包括显示屏等显示设备。
实施例八
本发明实施例八还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据包重传方法,该方法包括:
接收当前周期的传输数据包的传输请求,其中,所述传输请求中包含至少一个待传输的数据包,且相邻两个数据包分别设置连续的序列号;
判断各所述数据包上传至缓存队列的传输时间是否大于等于预设入队时间阈值;
若所述传输时间大于等于所述预设入队时间阈值,则对所述大于等于所述预设入队时间阈值的数据包进行重传;
若所述传输时间小于所述预设入队时间阈值,则所述传输时间小于所述预设入队时间阈值的数据包进行滞留校验,将满足滞留校验的数据包根据各数据包的序列号将各数据包上传至客户端,并将不满足滞留校验的数据包进行清除,并对不满足滞留校验的数据包进行重传;其中,所述不满足滞留校验的数据包为滞留时间大于等于预设滞留时间阈值的最小序列号数据包,以及大于最小序列号的数据包。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据包重传方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机电子设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述数据包重传装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。