一种调整抖动缓存大小的方法及装置转让专利

申请号 : CN201310698751.0

文献号 : CN103685070B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘丽胡建强成家雄张帆马跃宋思超

申请人 : 广州华多网络科技有限公司

摘要 :

本发明公开了一种调整抖动缓存大小的方法及装置,属于互联网通信领域。所述方法包括:获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值;根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;根据所述第一抖动值,计算下一时间单元内所述网络的第二抖动值;根据所述第二抖动值,调整抖动缓存的大小。所述装置包括:第一获取模块、第一计算模块、第二获取模块、第二计算模块和调整模块。本发明避免出现播放卡的问题,使接收端可以流畅地播放语音数据包。

权利要求 :

1.一种调整抖动缓存大小的方法,其特征在于,所述方法包括:获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;

根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值;

根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;

根据所述第一抖动值,计算下一时间单元内所述网络的第二抖动值;

获取当抖动缓存存满时播放所述抖动缓存中的语音数据包的播放时间;

如果所述第二抖动值大于所述播放时间,则根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包;

如果所述第二抖动值小于所述播放时间,则根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小;

其中,所述根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包,包括:计算所述第二抖动值与所述播放时间之间的第二差值;

根据所述第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;

根据所述第一个数和预设的语音数据包大小,确定所述抖动缓存的增加量;

将所述抖动缓存的大小增加所述确定的增加量;

从所述抖动缓存中获取无效语音数据包,并在所述获取的无效语音数据包之后插入所述第一个数个预设的无效语音数据包。

2.如权利要求1所述的方法,其特征在于,所述根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值,包括:根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的传输时间;

获取在所述语音数据包之前且与所述语音数据包相邻的语音数据包的传输时间;

计算所述语音数据包的传输时间与所述相邻的语音数据包的传输时间之间的第一差值,将所述第一差值确定为所述语音数据包的抖动值。

3.如权利要求1所述的方法,其特征在于,所述根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值,包括:从所述语音数据包的抖动值中,选择最大的抖动值;

将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。

4.如权利要求1所述的方法,其特征在于,所述根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小,包括:计算所述播放时间与所述第二抖动值之间的第三差值;

根据所述第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;

从所述抖动缓存中获取无效语音数据包,如果所述获取的无效语音数据包的个数大于或等于所述第二个数,则从所述抖动缓存中删除所述第二个数个无效语音数据包;

根据所述第二个数和预设的语音数据包大小,确定所述抖动缓存的减小量;

将所述抖动缓存的大小减小所述确定的减小量。

5.一种调整抖动缓存大小的装置,其特征在于,所述装置包括:第一获取模块,用于获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;

第一计算模块,用于根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值;

第二获取模块,用于根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;

第二计算模块,用于根据所述第一抖动值,计算下一时间单元内所述网络的第二抖动值;

调整模块,包括:

第二获取单元,用于获取当抖动缓存存满时播放所述抖动缓存中的语音数据包的播放时间;

增加单元,用于如果所述第二抖动值大于所述播放时间,则根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包;

减小单元,用于如果所述第二抖动值小于所述播放时间,则根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小;

其中,所述增加单元,具体用于:

计算所述第二抖动值与所述播放时间之间的第二差值;

根据所述第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;

根据所述第一个数和预设的语音数据包大小,确定所述抖动缓存的增加量;

将所述抖动缓存的大小增加所述确定的增加量;

从所述抖动缓存中获取无效语音数据包,并在所述获取的无效语音数据包之后插入所述第一个数个预设的无效语音数据包。

6.如权利要求5所述的装置,其特征在于,所述第一计算模块包括:计算单元,用于根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的传输时间;

第一获取单元,用于获取在所述语音数据包之前且与所述语音数据包相邻的语音数据包的传输时间;

第一确定单元,用于计算所述语音数据包的传输时间与所述相邻的语音数据包的传输时间之间的第一差值,将所述第一差值确定为所述语音数据包的抖动值。

7.如权利要求5所述的装置,其特征在于,所述第二获取模块包括:选择单元,用于从所述语音数据包的抖动值中,选择最大的抖动值;

第二确定单元,用于将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。

8.如权利要求5所述的装置,其特征在于,所述减小单元,具体用于:

计算所述播放时间与所述第二抖动值之间的第三差值;

根据所述第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;

从所述抖动缓存中获取无效语音数据包,如果所述获取的无效语音数据包的个数大于或等于所述第二个数,则从所述抖动缓存中删除所述第二个数个无效语音数据包;

根据所述第二个数和预设的语音数据包大小,确定所述抖动缓存的减小量;

将所述抖动缓存的大小减小所述确定的减小量。

说明书 :

一种调整抖动缓存大小的方法及装置

技术领域

[0001] 本发明涉及互联网通信领域,特别涉及一种调整抖动缓存大小的方法及装置。

背景技术

[0002] 随着互联网通信技术的日益发展,基于互联网的语音传输技术越来越受到人们的关注。由于互联网本身存在抖动,该抖动会造成互联网中传输的语音数据包存在一定的延时,进而不能保证接收端及时地播放该语音数据包,从而导致播放语音数据包时出现播放卡的问题,而抖动缓存可以尽量避免产生播放卡的问题。接收端可以设置一个抖动缓存,将接收的语音数据包存储在该抖动缓存中,当抖动缓存中的存储空间满时,接收端连续地播放该抖动缓存中的语音数据包,减小互联网的抖动对播放语音数据包的影响。
[0003] 其中,当抖动缓存的存储空间较小时,接收端接收的有些语音数据包不能立即存储到该抖动缓存中,导致语音数据包的丢失;当抖动缓存的存储空间较大时,会增加最早存储在该抖动缓存中的语音数据包的播放延时,所以需要对抖动缓存的大小进行调整。目前,提供了一种调整抖动缓存大小的方法,具体为:设置抖动缓存的初始大小,接收端接收发送端通过互联网发送的语音数据包,将接收的语音数据包存储在自身包括的抖动缓存中;当该抖动缓存的存储空间满时,接收端连续地播放该抖动缓存中存储的语音数据包。在播放语音数据包的过程中如果出现播放卡的问题,则确定该抖动缓存的存储空间较小,立即增加抖动缓存的大小;记录播放语音数据包的时间,如果记录的时间大于或等于预设阈值且在记录的时间内未出现播放卡的问题,则确定该抖动缓存的存储空间较大,逐步减小该抖动缓存的大小。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] 由于现有技术是在当前时间出现播放卡的问题之后调整抖动缓存的大小,以期望避免再次出现播放卡的问题,所以现有技术无法避免当前时间出现播放卡的问题。

发明内容

[0006] 为了解决现有技术的问题,本发明实施例提供了一种调整抖动缓存大小的方法及装置。所述技术方案如下:
[0007] 一方面,提供了一种调整抖动缓存大小的方法,所述方法包括:
[0008] 获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;
[0009] 根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值;
[0010] 根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;
[0011] 根据所述第一抖动值,计算下一时间单元内所述网络的第二抖动值;
[0012] 根据所述第二抖动值,调整抖动缓存的大小。
[0013] 其中,所述根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值,包括:
[0014] 根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的传输时间;
[0015] 获取在所述语音数据包之前且与所述语音数据包相邻的语音数据包的传输时间;
[0016] 计算所述语音数据包的传输时间与所述相邻的语音数据包的传输时间之间的第一差值,将所述第一差值确定为所述语音数据包的抖动值。
[0017] 其中,所述根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值,包括:
[0018] 从所述语音数据包的抖动值中,选择最大的抖动值;
[0019] 将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。
[0020] 其中,所述根据所述第二抖动值,调整抖动缓存的大小,包括:
[0021] 获取当抖动缓存存满时播放所述抖动缓存中的语音数据包的播放时间;
[0022] 如果所述第二抖动值大于所述播放时间,则根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包;
[0023] 如果所述第二抖动值小于所述播放时间,则根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小。
[0024] 进一步地,所述根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包,包括:
[0025] 计算所述第二抖动值与所述播放时间之间的第二差值;
[0026] 根据所述第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;
[0027] 根据所述第一个数和预设的语音数据包大小,确定所述抖动缓存的增加量;
[0028] 将所述抖动缓存的大小增加所述确定的增加量;
[0029] 从所述抖动缓存中获取无效语音数据包,并在所述获取的无效语音数据包之后插入所述第一个数个预设的无效语音数据包。
[0030] 进一步地,所述根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小,包括:
[0031] 计算所述播放时间与所述第二抖动值之间的第三差值;
[0032] 根据所述第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;
[0033] 从所述抖动缓存中获取无效语音数据包,如果所述获取的无效语音数据包的个数大于或等于所述第二个数,则从所述抖动缓存中删除所述第二个数个无效语音数据包;
[0034] 根据所述第二个数和预设的语音数据包大小,确定所述抖动缓存的减小量;
[0035] 将所述抖动缓存的大小减小所述确定的减小量。
[0036] 另一方面,提供了一种调整抖动缓存大小的装置,所述装置包括:
[0037] 第一获取模块,用于获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;
[0038] 第一计算模块,用于根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的抖动值;
[0039] 第二获取模块,用于根据所述语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;
[0040] 第二计算模块,用于根据所述第一抖动值,计算下一时间单元内所述网络的第二抖动值;
[0041] 调整模块,用于根据所述第二抖动值,调整抖动缓存的大小。
[0042] 其中,所述第一计算模块包括:
[0043] 计算单元,用于根据获取的语音数据包的发送时间和接收时间,计算所述语音数据包的传输时间;
[0044] 第一获取单元,用于获取在所述语音数据包之前且与所述语音数据包相邻的语音数据包的传输时间;
[0045] 第一确定单元,用于计算所述语音数据包的传输时间与所述相邻的语音数据包的传输时间之间的第一差值,将所述第一差值确定为所述语音数据包的抖动值。
[0046] 其中,所述第二获取模块包括:
[0047] 选择单元,用于从所述语音数据包的抖动值中,选择最大的抖动值;
[0048] 第二确定单元,用于将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。
[0049] 其中,所述调整模块包括:
[0050] 第二获取单元,用于获取当抖动缓存存满时播放所述抖动缓存中的语音数据包的播放时间;
[0051] 增加单元,用于如果所述第二抖动值大于所述播放时间,则根据所述第二抖动值和所述播放时间,增加所述抖动缓存的大小,并在所述抖动缓存中插入无效语音数据包;
[0052] 减小单元,用于如果所述第二抖动值小于所述播放时间,则根据所述第二抖动值和所述播放时间,删除所述抖动缓存中的无效语音数据包,并减小所述抖动缓存的大小。
[0053] 进一步地,所述增加单元,具体用于:
[0054] 计算所述第二抖动值与所述播放时间之间的第二差值;
[0055] 根据所述第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;
[0056] 根据所述第一个数和预设的语音数据包大小,确定所述抖动缓存的增加量;
[0057] 将所述抖动缓存的大小增加所述确定的增加量;
[0058] 从所述抖动缓存中获取无效语音数据包,并在所述获取的无效语音数据包之后插入所述第一个数个预设的无效语音数据包。
[0059] 进一步地,所述减小单元,具体用于:
[0060] 计算所述播放时间与所述第二抖动值之间的第三差值;
[0061] 根据所述第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;
[0062] 从所述抖动缓存中获取无效语音数据包,如果所述获取的无效语音数据包的个数大于或等于所述第二个数,则从所述抖动缓存中删除所述第二个数个无效语音数据包;
[0063] 根据所述第二个数和预设的语音数据包大小,确定所述抖动缓存的减小量;
[0064] 将所述抖动缓存的大小减小所述确定的减小量。
[0065] 在本发明实施例中,根据当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包的抖动值,计算当前时间单元内网络的第一抖动值,提高了当前时间单元内网络的第一抖动值的准确度。根据当前时间单元内网络的第一抖动值预测下一时间单元内网络的第二抖动值,进而根据下一时间单元内网络的第二抖动值,调整抖动缓存的大小,如此从接收端开始接收语音数据包开始,在每个时间单元内都会根据预测的下一时间单元内网络的第二抖动值提前调整抖动缓存的大小,从而避免出现播放卡的问题,使接收端可以流畅地播放语音数据包。

附图说明

[0066] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0067] 图1是本发明实施例一提供的一种调整抖动缓存大小的方法流程图;
[0068] 图2是本发明实施例二提供的一种调整抖动缓存大小的方法流程图;
[0069] 图3是本发明实施例三提供的一种调整抖动缓存大小的装置结构示意图。

具体实施方式

[0070] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0071] 实施例一
[0072] 本发明实施例提供了一种调整抖动缓存大小的方法,参见图1,该方法包括:
[0073] 步骤101:获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;
[0074] 步骤102:根据获取的语音数据包的发送时间和接收时间,计算获取的语音数据包的抖动值;
[0075] 步骤103:根据获取的语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;
[0076] 步骤104:根据第一抖动值,计算下一时间单元内该网络的第二抖动值;
[0077] 步骤105:根据第二抖动值,调整抖动缓存的大小。
[0078] 其中,根据获取的语音数据包的发送时间和接收时间,计算获取的语音数据包的抖动值,包括:
[0079] 根据获取的语音数据包的发送时间和接收时间,计算该语音数据包的传输时间;
[0080] 获取在该语音数据包之前且与该语音数据包相邻的语音数据包的传输时间;
[0081] 计算该语音数据包的传输时间与相邻的语音数据包的传输时间之间的第一差值,将第一差值确定为该语音数据包的抖动值。
[0082] 其中,根据获取的语音数据包的抖动值,获取当前时间单元内网络的第一抖动值,包括:
[0083] 从获取的语音数据包的抖动值中,选择最大的抖动值;
[0084] 将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。
[0085] 其中,根据所述第二抖动值,调整抖动缓存的大小,包括:
[0086] 获取当抖动缓存存满时播放该抖动缓存中的语音数据包的播放时间;
[0087] 如果第二抖动值大于该播放时间,则根据第二抖动值和该播放时间,增加该抖动缓存的大小,并在该抖动缓存中插入无效语音数据包;
[0088] 如果第二抖动值小于该播放时间,则根据第二抖动值和该播放时间,删除该抖动缓存中的无效语音数据包,并减小该抖动缓存的大小。
[0089] 进一步地,根据第二抖动值和该播放时间,增加抖动缓存的大小,并在抖动缓存中插入无效语音数据包,包括:
[0090] 计算第二抖动值与该播放时间之间的第二差值;
[0091] 根据第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;
[0092] 根据第一个数和预设的语音数据包大小,确定该抖动缓存的增加量;
[0093] 将该抖动缓存的大小增加确定的增加量;
[0094] 从该抖动缓存中获取无效语音数据包,并在获取的无效语音数据包之后插入第一个数个预设的无效语音数据包。
[0095] 进一步地,根据第二抖动值和该播放时间,删除抖动缓存中的无效语音数据包,并减小该抖动缓存的大小,包括:
[0096] 计算播放时间与第二抖动值之间的第三差值;
[0097] 根据第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;
[0098] 从该抖动缓存中获取无效语音数据包,如果获取的无效语音数据包的个数大于或等于第二个数,则从该抖动缓存中删除第二个数个无效语音数据包;
[0099] 根据第二个数和预设的语音数据包大小,确定该抖动缓存的减小量;
[0100] 将该抖动缓存的大小减小确定的减小量。
[0101] 在本发明实施例中,根据当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包的抖动值,计算当前时间单元内网络的第一抖动值,提高了当前时间单元内网络的第一抖动值的准确度。根据当前时间单元内网络的第一抖动值预测下一时间单元内网络的第二抖动值,进而根据下一时间单元内网络的第二抖动值,调整抖动缓存的大小,如此从接收端开始接收语音数据包开始,在每个时间单元内都会根据预测的下一时间单元内网络的第二抖动值提前调整抖动缓存的大小,从而避免出现播放卡的问题,使接收端可以流畅地播放语音数据包。
[0102] 实施例二
[0103] 本发明实施例提供了一种调整抖动缓存大小的方法,参见图2,该方法包括:
[0104] 步骤201:接收端获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;
[0105] 其中,由于接收端每次接收语音数据包时都会记录接收该语音数据包的接收时间,所以当接收端获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包时,接收端只需根据当前时间单元和预设个数个时间单元确定一个时间范围,获取在该时间范围内接收的语音数据包,将该时间范围内接收的语音数据包确定为在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包。
[0106] 由于网络状态的改变是逐渐变化的,所以通过在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内的的语音数据包,预测下一时间单元内网络的状况,可以提前预防播放卡的问题。
[0107] 其中,一个时间单元可以为1s,也可以为0.1s,本发明对时间单元的大小不做具体限定。
[0108] 步骤202:接收端根据获取的语音数据包的发送时间和接收时间,计算该语音数据包的抖动值;
[0109] 具体地,本步骤可以通过如下(1)-(3)的步骤来实现,包括:
[0110] (1)、接收端根据获取的语音数据包的发送时间和接收时间,计算该语音数据包的传输时间;
[0111] 具体地,接收端获取该语音数据包的发送时间和接收时间,将该语音数据包的接收时间减去该语音数据包的发送时间,得到该语音数据包的传输时间。
[0112] 由于发送端发送语音数据时在该语音数据包中携带一个时间戳,该时间戳即为该语音数据包的发送时间。当接收端接收到该语音数据包时,获取该语音数据包中携带的时间戳,将该时间戳确定为该语音数据包的发送时间;接收端同时获取接收该语音数据包的时间,将获取的时间确定为该语音数据包的接收时间。
[0113] (2)、接收端获取在该语音数据包之前且与该语音数据包相邻的语音数据包的传输时间;
[0114] 其中,对于在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包中的第一个语音数据包,计算第一个语音数据包的抖动值之前,需要获取该第一语音数据包之前且与第一个语音数据包相邻的语音数据包的传输时间。
[0115] (3)、接收端计算该语音数据包的传输时间与相邻的语音数据包的传输时间之间的第一差值,将第一差值确定为该语音数据包的抖动值。
[0116] 其中,如果获取的语音数据包为多个,每个语音数据包的抖动值都可以按照上述(1)-(3)的步骤计算每个语音数据包的抖动值。
[0117] 由于发送端和接收端的时间可能存在不同步的问题,所以根据语音数据包的发送时间和接收时间计算出的传输时间可能不是很准确。又由于发送端发送数据包的时间间隔是相同的,所以根据该语音数据包的传输时间和相邻的语音数据包的传输时间,计算该语音数据包的抖动值是准确的,所以本发明实施例根据语音数据包的抖动值,获取当前时间单元内网络的第一抖动值的准确性较高,进而提高了下一时间单元内网络的第二抖动值的准确性。
[0118] 例如,获取到5个语音数据包,第一个语音数据包的传输时间为10ms,第二个语音数据包的传输时间为20ms,第三个语音数据包的传输时间为25ms,第四个语音数据包的传输时间为28ms,第五个语音数据包的传输时间为20ms。当计算第一个语音数据包的抖动值时,接收端需要获取第一个语音数据包之前且与第一个语音数据包相邻的语音数据包的传输时间为9ms,则第一个语音数据包的抖动值为第一个语音数据包的传输时间10ms与第一个语音数据包之前且与第一个语音数据包相邻的语音数据包的传输时间9ms之间的差值1ms;第二个语音数据包的抖动值为第二个语音数据包的传输时间20ms与第一个语音数据包的传输时间10ms之间的差值10ms;第三个语音数据包的抖动值为第三个语音数据包的传输时间25ms与第二个语音数据包的传输时间20ms之间的差值5ms;第四个语音数据包的抖动值为第四个语音数据包的传输时间28ms与第三个语音数据包的传输时间25ms之间的差值3ms;第五个语音数据包的抖动值为第五个语音数据包的传输时间20ms与第四个语音数据包的传输时间28ms之间的差值8ms。
[0119] 步骤203:根据获取的语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;
[0120] 具体地,从获取的语音数据包的抖动值中,选择最大的抖动值;将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。
[0121] 例如,从获取的5个语音数据包的抖动值1ms、10ms、5ms、3ms和8ms中选择最大的抖动值为10ms,将选择的最大的抖动值10ms确定为当前时间单元内网络的第一抖动值。
[0122] 步骤204:根据第一抖动值,计算下一时间单元内该网络的第二抖动值;
[0123] 具体地,根据第一抖动值,按照如下公式(1)计算下一时间单元内该网络的第二抖动值;
[0124] v(i+1)=a*v(i)   (1)
[0125] 其中,在上述公式(1)中,v(i+1)为下一时间单元内该网络的第二抖动值,a为权值因子且0
[0126] 优选地,在本发明实施例中权值因子大于或等于1且小于或等于2,如此,下一时间单元内该网络的抖动值均会大于或等于当前时间单元内该网络的抖动值,进而使下一时间单元内抖动缓存的大小会大于或等于当前时间单元内抖动缓存的大小,降低了语音数据包的丢包率。
[0127] 其中,下一时间单元可以为当前时间单元之后且与当前时间单元相邻的时间单元,当然,下一时间单元还可以为当前时间单元之后且与当前时间单元间隔一个时间单元或两个时间单元的时间单元。优选地,下一时间单元为当前时间单元之后且与当前时间单元相邻的时间单元。
[0128] 例如,权值因子为1.5,所以下一时间单元内该网络的第二抖动值为10ms*1.5=15ms。
[0129] 步骤205:获取当抖动缓存存满时播放该抖动缓存中的语音数据包的播放时间;
[0130] 其中,一般情况下每个语音数据包的播放时间都相等,所以获取当抖动缓存存满时播放该抖动缓存中的语音数据包的播放时间的具体操作可以为:获取当抖动缓存存满时该抖动缓存中存储的语音数据包的个数,将该语音数据包的个数与语音数据包的播放时间相乘,得到当抖动缓存存满时播放该抖动缓存中的语音数据包的播放时间。
[0131] 例如,每个语音数据包的播放时间为20ms,该抖动缓存存满时该抖动缓存中的语音数据包的个数为5,则当该抖动缓存存满时播放该抖动缓存中的语音数据包的播放时间为20ms*5=100ms。
[0132] 步骤206:如果第二抖动值大于该播放时间,则根据第二抖动值和该播放时间,增加抖动缓存的大小,并在抖动缓存中插入无效语音数据包;
[0133] 具体地,本步骤可以通过如下(1)-(5)的步骤来实现,包括:
[0134] (1)、计算第二抖动值与该播放时间之间的第二差值;
[0135] (2)、根据第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;
[0136] 具体地,将第二差值除以预设的语音数据包播放时间,得到第一数值,如果第一数值为整数,则将第一数值确定为需要插入的无效语音数据包的第一个数,如果第一数值不为整数,则将第一数值向上取整,得到第二数值,将第二数值确定为需要插入的无效语音数据包的第一个数。
[0137] 其中,在发送端发送给接收端的语音数据包中不仅包括存在语音信息的语音数据包,还包括静音的语音数据包,即没有语音信息的数据包。由于静音的语音数据包中没有语音信息,在适当的位置插入静音的语音数据包或者删除静音的语音数据包不会影响存在语音信息的语音数据包的语音播放的质量,所以在本发明实施例中将静音的语音数据包称为无效语音数据包。
[0138] 例如,第二差值为100ms-15ms=85ms,将第二差值85ms除以预设的语音数据包播放时间20ms,得到4.25,将4.25向上取整得到5,则确定需要插入的无效语音数据包的第一个数为5。
[0139] (3)、根据第一个数和预设的语音数据包大小,确定抖动缓存的增加量;
[0140] 具体地,将第一个数与预设的语音数据包大小相乘,得到抖动缓存的增加量。
[0141] 由于每个语音数据包的播放时间相等,所以每个语音数据包的大小也相等。
[0142] (4)、将该抖动缓存的大小增加确定的增加量;
[0143] (5)、从该抖动缓存中获取无效语音数据包,并在获取的无效语音数据包之后插入第一个数个预设的无效语音数据包。
[0144] 具体地,从当前抖动缓存包括第一个语音数据包开始检测;获取检测的语音数据包的信息量,如果检测的语音数据包的信息量大于或等于预设阈值,则检测下一个语音数据包;如果检测的语音数据包的信息量小于预设阈值,则确定检测的语音数据包为无效语音数据包,并在检测的语音数据包之后插入第一个数个预设的无效语音数据包。
[0145] 优选地,如果检测的语音数据包的信息量小于预设阈值,则统计该抖动缓存中的无效语音数据包的个数,并检测下一个语音数据包,如果下一个语音数据包的信息量大于或等于预设阈值,则在下一个语音数据包之前插入第一个数个预设的无效语音数据包,如果下一个语音数据包的信息量小于预设阈值,则增加统计的无效语音数据包的个数,如果增加后无效语音数据包的个数大于或等于预设个数,则确定该抖动缓存中存在连续的多个无效语音数据包,在该连续多个无效语音数据包中间插入第一个数个预设的无效语音数据包,如此,在多个连续的无效语音数据包中间插入第一个数个预设的无效语音数据包,从而不影响播放语音的语音质量。
[0146] 步骤207:如果第二抖动值小于该播放时间,则根据第二抖动值和该播放时间,删除该抖动缓存中的无效语音数据包,并减小该抖动缓存的大小。
[0147] 具体地,本步骤可以通过如下(1)-(5)的步骤来实现,包括:
[0148] (1)、计算该播放时间与第二抖动值之间的第三差值;
[0149] (2)、根据第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;
[0150] 具体地,将第三差值除以预设的语音数据包播放时间,得到第三数值,如果第三数值为整数,则将第三数值确定为需要减少的无效语音数据包的第二个数,如果第三数值不为整数,则将第三数值向上取整,得到第四数值,将第四数值确定为需要减少的无效语音数据包的第二个数。
[0151] (3)、从该抖动缓存中获取无效语音数据包,如果获取的无效语音数据包的个数大于或等于第二个数,则从该抖动缓存中删除第二个数个无效语音数据包;
[0152] 具体地,从当前抖动缓存包括第一个语音数据包开始检测;获取检测的语音数据包的信息量,如果检测的语音数据包的信息量大于或等于预设阈值,则检测下一个语音数据包;如果检测的语音数据包的信息量小于预设阈值,则确定检测的语音数据包为无效语音数据包,增加无效语音数据包的个数,当检测完该抖动缓存包括的语音数据包时,判断无效语音数据包的个数是否大于或等于第二个数,如果是,则从该抖动缓存中删除第二个数个无效语音数据包。
[0153] 其中,从该抖动缓存中删除第二个数个无效语音数据包时,优先删除连续的无效语音数据包,如此,不会影响到播放语音数据包时的语音质量。
[0154] 其中,如果获取的无效语音数据包的个数小于第二个数,则直接将获取的无效语音数据包均删除,以减小对最早存储在该抖动缓存中的无效语音数据包的播放延时。
[0155] (4)、根据第二个数和预设的语音数据包大小,确定该抖动缓存的减小量;
[0156] 具体地,将第二个数与预设的语音数据包大小相乘,得到该抖动缓存的减小量。
[0157] (5)、将该抖动缓存的大小减小确定的减小量。
[0158] 在本发明实施例中,根据当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包的抖动值,计算当前时间单元内网络的第一抖动值,提高了当前时间单元内网络的第一抖动值的准确度。根据当前时间单元内网络的第一抖动值预测下一时间单元内网络的第二抖动值,进而根据下一时间单元内网络的第二抖动值,调整抖动缓存的大小,如此从接收端开始接收语音数据包开始,在每个时间单元内都会根据预测的下一时间单元内网络的第二抖动值提前调整抖动缓存的大小,从而避免出现播放卡的问题,使接收端可以流畅地播放语音数据包。
[0159] 实施例三
[0160] 参见图3,本发明实施例提供了一种调整抖动缓存大小的装置,该装置包括:
[0161] 第一获取模块301,用于获取在当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包;
[0162] 第一计算模块302,用于根据获取的语音数据包的发送时间和接收时间,计算获取的语音数据包的抖动值;
[0163] 第二获取模块303,用于根据获取的语音数据包的抖动值,获取当前时间单元内网络的第一抖动值;
[0164] 第二计算模块304,用于根据第一抖动值,计算下一时间单元内该网络的第二抖动值;
[0165] 调整模块305,用于根据第二抖动值,调整抖动缓存的大小。
[0166] 其中,第一计算模块302包括:
[0167] 计算单元,用于根据获取的语音数据包的发送时间和接收时间,计算该语音数据包的传输时间;
[0168] 第一获取单元,用于获取在该语音数据包之前且与该语音数据包相邻的语音数据包的传输时间;
[0169] 第一确定单元,用于计算该语音数据包的传输时间与相邻的语音数据包的传输时间之间的第一差值,将第一差值确定为该语音数据包的抖动值。
[0170] 其中,第二获取模块303包括:
[0171] 选择单元,用于从获取的语音数据包的抖动值中,选择最大的抖动值;
[0172] 第二确定单元,用于将选择的最大的抖动值确定为当前时间单元内网络的第一抖动值。
[0173] 其中,调整模块305包括:
[0174] 第二获取单元,用于获取当抖动缓存存满时播放所述抖动缓存中的语音数据包的播放时间;
[0175] 增加单元,用于如果第二抖动值大于该播放时间,则根据第二抖动值和该播放时间,增加该抖动缓存的大小,并在该抖动缓存中插入无效语音数据包;
[0176] 减小单元,用于如果第二抖动值小于该播放时间,则根据第二抖动值和该播放时间,删除该抖动缓存中的无效语音数据包,并减小该抖动缓存的大小。
[0177] 进一步地,增加单元,具体用于:
[0178] 计算第二抖动值与该播放时间之间的第二差值;
[0179] 根据第二差值和预设的语音数据包播放时间,计算需要插入的无效语音数据包的第一个数;
[0180] 根据第一个数和预设的语音数据包大小,确定该抖动缓存的增加量;
[0181] 将该抖动缓存的大小增加确定的增加量;
[0182] 从该抖动缓存中获取无效语音数据包,并在获取的无效语音数据包之后插入第一个数个预设的无效语音数据包。
[0183] 进一步地,减小单元,具体用于:
[0184] 计算播放时间与第二抖动值之间的第三差值;
[0185] 根据第三差值和预设的语音数据包播放时间,计算需要减少的无效语音数据包的第二个数;
[0186] 从该抖动缓存中获取无效语音数据包,如果获取的无效语音数据包的个数大于或等于第二个数,则从该抖动缓存中删除第二个数个无效语音数据包;
[0187] 根据第二个数和预设的语音数据包大小,确定该抖动缓存的减小量;
[0188] 将该抖动缓存的大小减小确定的减小量。
[0189] 在本发明实施例中,根据当前时间单元之前且离当前时间单元最近的连续预设个数个时间单元内接收的语音数据包的抖动值,计算当前时间单元内网络的第一抖动值,提高了当前时间单元内网络的第一抖动值的准确度。根据当前时间单元内网络的第一抖动值预测下一时间单元内网络的第二抖动值,进而根据下一时间单元内网络的第二抖动值,调整抖动缓存的大小,如此从接收端开始接收语音数据包开始,在每个时间单元内都会根据预测的下一时间单元内网络的第二抖动值提前调整抖动缓存的大小,从而避免出现播放卡的问题,使接收端可以流畅地播放语音数据包。
[0190] 需要说明的是:上述实施例提供的调整抖动缓存大小的装置在调整抖动缓存大小时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的调整抖动缓存大小的装置于调整抖动缓存大小的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0191] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0192] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0193] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。