处理用于针对流式网络协议的时间戳不准确
文献发布时间:2023-06-19 11:55:48
背景技术
实时通信服务用于经由诸如互联网之类的计算机网络传送音频、视频和其他类型的流式数据。实时通信服务依赖于可靠、及时的网络分组传递,以便提供积极的用户体验。例如,如果用于音频呼叫的实时音频通信服务遇到网络问题(例如,丢失或延迟的网络分组),则通信质量会受到影响。
定时信息对于实时通信服务也很重要。例如,需要定时信息来管理网络分组接收和回放的各个方面。没有准确的定时信息,流式媒体的可靠和准确的回放会受到影响(例如,延迟问题、回放同步问题等)。
因此,在与处理用于流式网络协议的时间戳不准确有关的技术方面,存在大量的改进机会。
发明内容
提供本发明内容来以简化形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
描述了用于确定流式数据的校正后的时间戳的技术,该流式数据是使用具有可变帧大小的帧进行编码的。流式数据被编码成帧并在网络分组中传输,其中网络分组或帧与以固定步长递增的时间戳相关联。当在丢失的网络分组之后接收到网络分组时,可以至少部分地基于接收到的时间戳值和接收到的网络分组的属性以及缓冲特性来针对接收到的网络分组计算校正后的时间戳范围。
例如,计算设备可以执行用于确定针对流式数据的校正后的时间戳范围的操作,其中使用具有可变帧大小的帧来对流式数据进行编码。该操作可以包括:接收网络分组,所述网络分组包括接收到的时间戳值和流式数据的帧,其中,接收到的时间戳值具有固定的时间戳增量。该操作可以进一步包括确定包括流式数据的先前帧的先前网络分组已经丢失。所述操作还可包括:计算关于接收到的网络分组的可能的缓冲区大小范围,其中,所述可能的缓冲区大小范围针对用于对流式数据进行编码的编码缓冲区。该操作可以进一步包括至少部分地基于接收到的时间戳值和可能的缓冲区大小范围来计算针对接收到的网络分组的校正后的时间戳范围。该操作可以进一步包括基于校正后的时间戳范围来调整抖动缓冲区。
如本文所描述的,可以根据需要将各种其他特征和优点结合到技术中。
附图说明
图1是描绘了用于使用可变大小的帧来确定针对流式数据的校正后的时间戳范围的示例环境的图。
图2是描绘了用于使用可变大小的帧来确定针对流式音频的校正后的时间戳范围的示例环境的图。
图3是描绘了流式数据以及真实时间戳和固定时间戳的示例帧的图。
图4是描绘了使用过去和将来的帧来计算校正后的时间戳范围的图。
图5是用于确定针对流式数据的校正后的时间戳范围的示例方法的流程图。
图6是用于确定针对流式音频的校正后的时间戳范围的示例方法的流程图。
图7是其中可以实现一些所描述的实施例的示例计算系统的图。
图8是可以与所描述的技术结合使用的示例移动设备。
图9是可以与所描述的技术结合使用的示例云支持环境。
具体实施方式
概述
如本文描述的,可以将各种技术和解决方案应用于确定针对流式数据的校正后的时间戳(例如,校正后的时间戳范围和/或特定的校正后的时间戳值),所述流式数据是使用具有可变帧大小的帧进行编码的。本文描述的流式数据可以是任何类型的流式数据,例如流式音频数据、流式视频数据或流式媒体数据(例如,包括音频、视频、图形等)。使用网络协议,将流式数据编码为帧,并以网络分组的形式从发送计算设备发送到接收计算设备。流式数据的帧与以固定步长递增的时间戳相关联。例如,流式数据的每个帧都可以将时间戳值递增固定的步长(也称为固定的时间戳增量),例如20毫秒(ms)。但是,由于流式数据是使用具有可变帧大小的帧进行编码的,因此给定帧中的流式数据量可能与固定的时间戳增量不同。例如,流式数据的第一帧可以具有16ms的数据(例如16ms的音频样本),而流式数据的第二帧可以具有28ms的数据(例如28ms的音频样本)。但是,如果固定时间戳增量为20ms,则报告的时间戳值(例如,网络分组报头中报告的时间戳值)将以20ms为增量(例如,第一帧为20ms,而第二帧为40ms)。
帧中流式数据的实际量与固定增量时间戳值之间的差异可能会在流式媒体回放期间引起问题。例如,这对于具有相当准确的时间戳信息来管理延迟(例如,通过控制抖动缓冲区)的接收设备(例如,对于接收设备的解码器或回放组件)来说,对于错误隐藏以及对于其他原因是重要的。因为在本文所述技术中使用的流式数据的帧具有可变的帧大小,所以如果丢失了网络分组,则接收设备将不知道丢失了多少流式数据。尽管接收设备可能知道网络分组已丢失(例如,经由随后接收到的网络分组的网络分组报头中的序列值),但接收设备将不会确切知道丢失的网络分组中有多少流式数据。这是因为由接收设备接收到的时间戳值具有固定的时间戳增量,并且不能准确反映正确的时间戳值,该正确的时间戳值取决于丢失的分组中流式数据的实际量。
在丢失网络分组并且其中流式数据使用固定时间戳增量的情况下,可以应用中本文所述的技术来确定校正后的时间戳范围(更准确地反映真实时间戳的时间戳范围)。可以基于如何针对流式数据执行缓冲的特性来计算校正后的时间戳范围。缓冲特性可以包括由发送设备针对给定帧编码的流式数据的量,以及在缓冲区中剩余的要被在下一帧中编码的流式数据有多少。例如,可以接收网络分组,其中该网络分组包括接收到的时间戳值(使用固定的时间戳增量)和流式数据的帧。然后可以确定先前的网络分组已经丢失(例如,基于接收到的网络分组的序列号)。响应于确定先前的网络分组已经丢失,可以关于接收到的网络分组来计算可能的缓冲区大小范围。然后,可以至少部分地基于接收到的时间戳值和可能的缓冲区大小范围,针对接收到的网络分组来计算校正后的时间戳范围。校正后的时间戳范围(例如,范围本身和/或从该范围中选择的特定校正后的时间戳值)可用于控制流式数据的流式传输、解码和/或回放方面(例如,管理延迟、分组丢失隐藏,等等。)。
在一些实施方式中,根据实时传输协议(RTP)对流式数据进行编码并将其从发送设备发送至接收设备。RTP是用于使用互联网协议(IP)网络流式传输音频和/或视频数据的网络协议。RTP在其网络分组报头中包含时间戳字段,该时间戳字段指示RTP分组中携带的流式数据的开始的时间戳。使用RTP时,本文的技术使用固定的时间戳增量,其在某些实施方式中为20ms。因此,在这样的实施方式中,对于分组中的每个帧,RTP时间戳值将被递增固定的时间戳增量。例如,如果每个分组包含流式数据的一个帧,并且固定的时间戳增量为20ms,则第一RTP分组将具有的RTP时间戳值为0ms(流式数据的开始),第二RTP分组将具有的RTP时间戳值为20ms,第三RTP分组将具有的RTP时间戳值为40ms,依此类推。作为另一个示例,如果固定的时间戳增量为20ms,则具有音频数据的三个帧的RTP网络分组将使时间戳值递增60ms。
在其他解决方案中,在网络分组中发送可变时间戳(例如,反映分组中的流式数据的量的实际时间戳值)。但是,这样的解决方案具有许多问题。例如,网络流式协议可以指定使用固定的时间戳增量,并且更改其操作可能需要自定义编码并干扰互操作性。另外,使用实际时间戳值可能引起隐私问题(例如,它可以使其他人获得对流式数据的内容或活动(例如音频内容)的洞察)。此外,在网络分组或帧中包括实际时间戳可能会使用附加位,并且因此会增加带宽。
本文所述的技术还提供了(例如,实时网络通信服务的)可靠性和效率方面的好处。例如,在网络分组或帧中不包括实际时间戳可以节省位和网络带宽,这也可以减少延迟。另外,在网络分组或帧中不包括实际时间戳提高了通信的安全性(例如,减少了隐私问题)。最后,在丢失了时序连续性的分组丢失(例如可能是可能的事件)的情况下,可以使用本文所述技术有效地计算出校正后的时间戳范围(以及校正后的时间戳值)。
缓冲
在本文描述的技术中,流式数据被缓冲用于编码(例如,在被音频和/或视频编解码器编码之前被缓冲)。由于使用可变帧大小(并且因此每帧可变量的流式数据)对流式数据进行编码,因此缓冲区中通常可能会剩下数据。例如,典型的流式传输环境每单位时间产生固定量的数据(例如,根据所使用的采样率,每秒固定数量的音频样本),该固定量的数据被缓冲以进行编码。在一些实施方式中,以20ms的增量捕获和缓冲音频数据,其中,每20ms将20ms的音频样本放置到缓冲区中。例如,如果音频编解码器正在利用20ms的数据对来自缓冲区的帧中的14ms音频样本进行编码,则6ms的音频样本将保留在缓冲区中。
取决于所使用的编码技术(例如,特定的编解码器),在对当前帧进行编码之后,缓冲区中可能会保留最大量的数据。例如,如果编解码器支持在6ms子帧中编码流式数据并且每个周期捕获20ms数据,则在对18ms的第一帧进行编码后,缓冲区将始终保留2ms的数据。对于下一个周期,会将20ms的数据添加到缓冲区中,从而导致22ms的数据被编码。编解码器将对18ms的第二帧进行编码,在缓冲区中保留4ms。对于下一个时间周期,会将另外20ms的数据添加到缓冲区中,从而导致要对24ms的数据进行编码。然后,编解码器将对具有24ms的第三帧进行编码,在缓冲区中保留0ms。因此,对于这个相对简单的示例,缓冲区中保留的数据的最小量将为0ms(在对帧进行编码后),并且缓冲区中保留的数据的最大量将为4ms(在对帧进行编码后),并且最大缓冲区大小范围将为[0,4]ms。当编解码器可以对数据的不同大小的子帧(例如,采样多达6ms的任何量的音频)进行编码时,还可以确定保留在缓冲区中的数据的最小量和最大量(称为最大缓冲区大小范围)。
在一些实施方式中,根据音频编解码器来缓冲音频数据,该音频编解码器使用可变帧大小并且根据两种模式支持语音编码:浊音(voiced)模式(用于具有良好定义的周期性的语音)和清音(unvoiced)模式(用于无周期性的声音)。对于浊音模式,帧包含整数个基音周期(也称为基音滞后(pitch lag)),最大基音周期为18.8ms。对于清音帧,缓冲样本的数量固定为4ms的倍数。保留在缓冲区中的样本将在下一帧中进行编码。另外,该模式可以在帧与帧之间改变。由于存在缓冲,因此一帧开始较早,但是在先前的帧中缓冲了许多样本。结果,真实时间戳与固定时间戳增量(例如20ms)相差以下范围内的值:
-18.8ms至0ms,如果先前的分组以浊音结尾
-4ms至0ms,如果先前的分组以清音结尾
顺序时间戳范围跟踪
在本文所描述的技术中,在对当前帧进行编码之后可以保留在缓冲区中的流式数据的最大量可以用于确定校正后的时间戳范围。本部分中描述的等式和操作基于示例音频编解码器,该示例音频编解码器使用可变大小的帧并以浊音模式对音频数据进行编码(以基音周期增量或子帧编码样本,其中,最大基音周期为18.8ms)并且以清音模式对音频数据进行编码(以4ms的增量或子帧编码样本),并且使用RTP。但是,这些等式和操作通常适用于其他音频编解码器(并且通常适用于流式数据的编码)。例如,其他类型的流式数据的编码可以不使用不同类型的流式数据,或者可以使用多于两种类型的流式数据。另外,对于不同的编解码器或编码技术,固定的时间戳增量可能会有所不同。对于不同的编解码器或编码技术,最小和/或最大缓冲区大小也可能不同。
如前所述,对于清音帧,由编码器缓冲的最大量小于对于清音帧,由编码器缓冲的最大量。帧持续时间还告诉我们有关缓冲的量的一些信息。例如,如果接收到35ms的帧,那么我们知道在该帧的末尾处最多可以缓冲3.8ms,因为否则需要针对前一帧缓冲18.8ms以上的时间。可以组合此逻辑来跟踪跨帧的缓冲区大小的不确定性,从而与单帧分析相比,减少了针对真实时间戳的不确定性的余量。
下面的等式在帧上运行,这些帧是编码器和解码器中的处理单位。每帧具有的标称长度为20ms。每个网络分组包含一个或多个帧,并具有与该分组中第一帧的第一样本有关的一个RTP时间戳值。作为RTP报头的一部分发送的RTP时间戳以20毫秒的倍数递增,并指向可用音频数据结束前20毫秒的倍数的样本。对于帧n,通过以下关系,正确的(真实)时间戳与此固定增量RTP时间戳、帧持续时间和编码器缓冲区大小(在处理帧n之后)相关。
真实时间戳(n)
=舍入时间戳(n)+20-帧持续时间(n)-缓冲区大小(n)(ms)
(等式1)
图3说明了等式1的帧、缓冲区和时间戳是如何相关的。图3在300处描绘了两个帧,即帧n-1和帧n。在对帧n-1进行编码之后,一些数据保留在缓冲区中,被描述为缓冲区n-1。帧n-1的正确(真实)时间戳310反映了帧n-1中包括的流式数据的实际量(例如,12ms的数据)。固定增量时间戳反映了在网络分组报头(例如,RTP报头)中用信号通知的时间戳值,在某些实施方式中,该时间戳值是20ms的倍数。如在300处所描绘的,在下一帧即帧n中对缓冲区n-1进行编码。在对帧n进行编码之后,在缓冲区中存在由缓冲区n指示的流式数据(其可以是与缓冲区n-1中剩余的流式数据不同量的流式数据)。不确定性330反映了缓冲区n-1的大小,在一些实施方式中,如果前一帧(帧n-2,未示出)是浊音的,则缓冲区n-1的大小为0ms至18.8ms,或者如果前一帧是清音的,则缓冲区n-1的大小为0ms至4ms。
根据以下关系,帧n的缓冲区大小取决于帧n-1的缓冲区大小。
缓冲区大小(n)=缓冲区大小(n-1)+20-帧持续时间(n)(ms)
(等式2)
使用以下知识,最大缓冲区大小对于清音帧是4ms,对于浊音帧是18.8ms,时间戳的不确定性范围可以如下递归表示。首先,如果丢失帧n-1,则最大可能的缓冲区大小范围将初始化为:
缓冲区大小范围(n-1)=[0,18.8](ms)
然后,对于随后的帧,如下确定从前一帧传播的范围(也称为传播的缓冲区大小范围)与根据当前语音类型的范围的交集。如果帧(n)是清音的,则使用以下等式。
缓冲区大小范围(n)
=缓冲区大小范围(n-1)+20-帧持续时间(n)∩[0,4](ms)
(等式3)
如果帧(n)是浊音的,则使用以下等式。
缓冲区大小范围(n)
=缓冲区大小范围(n-1)+20-帧持续时间(n)∩[0,18.8](ms)
(等式4)
通常,等式3和4中所示的技术用于计算可能的缓冲区大小范围。例如,计算可能的缓冲区大小范围可包括至少部分地基于丢失帧的缓冲区大小范围和接收到的帧的持续时间来计算传播的缓冲区大小范围(对应于等式3和4的“缓冲区大小范围(n-1)+20-帧持续时间(n)”部分),并计算传播的缓冲区大小范围和针对接收到的帧的最大缓冲区大小范围的交集(对应于等式3和4中的[0,4]或[0,18.8],并且取决于流式数据是否具有不同类型的数据,该不同类型的数据具有不同的最大缓冲区大小范围)。
接下来,使用以下等式确定校正后的RTP时间戳范围。
真实时间戳范围(n)
=时间戳(n)+20-帧持续时间(n)-缓冲区大小范围(n)(ms)
(等式5)
通常,等式5中所示的技术用于计算针对使用的当前流式协议的校正后的时间戳范围。例如,计算校正后的时间戳范围可以包括通过固定时间戳增量(对应于等式5中的20)、接收到的帧的持续时间(对应于等式5中的帧持续时间(n))和可能的缓冲区大小范围(对应于等式5中的缓冲区大小范围(n))来调整接收到的时间戳值(对应于等式5中的时间戳(n))。
如以上等式所示,随着接收到的每个新帧,校正后的时间戳范围变得更窄(或保持不变)。直到存在丢失的网络分组并重置范围为止,都会发生这种情况。
等式3、4和5也可以应用于将来的帧可用的情况。在图4中示出了这种情况。该方法是首先计算到最后一帧结束时的缓冲区大小范围,并且然后通过获取该帧的RTP时间戳,加上从该帧开始的所有帧的标称(固定时间戳增量)长度,减去这些帧的实际长度,并且然后减去最终缓冲区大小范围,来将其转换回较早帧处的RTP时间戳范围。图4示出了针对帧n-1420、帧n 422和帧n+1 424的三个帧的这些操作。然而,该方法可以应用于任何数量的过去和/或将来的帧。
以下示例示出了当丢失了先前的网络分组和流式数据的相应的先前帧时的校正后的时间戳范围的计算。在第一示例中,假设分组n-1已经丢失,并且以持续时间18ms的单个清音帧接收到分组n。然后,将根据等式3计算缓冲区大小范围,如下所示。
缓冲区大小范围(n)=[0,18.8]+20-18∩[0,4]
=[2,20.8]∩[0,4]
=[2,4](ms)
接下来,将根据等式5计算校正后的RTP时间戳范围,如下所示。
真实时间戳范围(n)=时间戳(n)+20-帧持续时间(n)-缓冲区大小范围(n)(ms)
=时间戳(n)+20-18-[2,4]
=时间戳(n)+[-2,0](ms)
因此,根据上述计算,针对当前帧n的校正后的时间戳范围(即,真实时间戳范围)将是-2ms到0ms的范围内的接收到的时间戳(例如,RTP报头中报告的RTP时间戳,其是固定的增量时间戳)。例如,如果接收到的时间戳值为400ms,则校正后的时间戳范围将为398ms至400ms。
在第二示例中,假设丢失了分组n-1,并且以35ms的持续时间的单个浊音帧接收到分组n。然后,将根据等式4计算缓冲区大小范围,如下所示。
缓冲区大小范围(n)=[0,18.8]+20-35∩[0,18.8]
=[-15,3.8]∩[0,18.8]
=[0,3.8](ms)
接下来,将根据等式5计算校正后的RTP时间戳范围,如下所示。
真实时间戳范围(n)=时间戳(n)+20-帧持续时间(n)-缓冲区大小范围(n)(ms)
=时间戳(n)+20-35-[0,3.8]
=时间戳(n)+[-15,-11.2](ms)
因此,根据上述计算,针对当前帧n的校正后的时间戳范围(即,真实时间戳范围)将是-15ms至-11.2ms的范围内的接收到的时间戳(例如,RTP报头中报告的RTP时间戳,其是固定的增量时间戳)。例如,如果接收到的时间戳值为400ms,则校正后的时间戳范围将为385ms至388.8ms。
多帧分组
在本文描述的技术中,所描述的用于计算校正后的时间戳范围的技术可以应用于包含多个帧的网络分组。对于多帧分组,可以针对分组中的所有帧迭代等式3和4,这将在该分组的末尾提供缓冲区大小范围。然后,可以使用等式5的稍稍改写版本,将分组末尾处的缓冲区大小范围追溯到分组开始处的RTP时间戳范围。
真实时间戳范围
=时间戳+20*分组中的帧数-分组持续时间-缓冲区大小范围(ms)
(等式6)
对于具有前向纠错(FEC)数据的分组,如果FEC数据描述紧接在主数据之前的数据,则可以使用FEC数据来缩小缓冲区大小范围。
播出延迟报告
在一些实施方式中,解码器将播出延迟报告给控制器(例如,在接收设备处管理流式数据的回放的控制器)。如果RTP时间戳正确,则此延迟将等于当前分组的RTP时间戳减去播出时间戳。但是,由于本文所描述的技术使用可变大小的帧和固定的时间戳增量,因此接收到的分组的RTP时间戳存在一定范围的不确定性。因此,可以选择RTP时间戳范围内的一些值。在一些实施方式中,报告了最保守的延迟,这是在不确定性范围内(例如,在校正后的时间戳范围内)的最低可能延迟值。在其他实施方式中,在不确定性范围内选择另一个值。
由于RTP时间戳中的不确定性,所报告的延迟中将存在一些波动。但是,此报告的延迟无论如何都会自然地波动,因为它对传入分组相对于针对生成输出样本的请求的时间顺序是敏感的。早一毫秒的分数或晚一毫秒的分数到达的分组可以将报告的延迟更改20ms。可以期望控制器处理这种波动。
乱序分组
在一些实施方式中,接收设备的组件(例如,解码器、控制器或某个其他组件)计算针对到达的每个新分组的新的校正后的时间戳范围。结果,乱序的分组将导致范围内的重置:如果分组n在分组n-1之前到达,则出现在计算针对分组n的范围时,似乎丢失分组n-1的情况。
在一些实施方式中,在接收到分组n-1之后,将基于直到分组n-2的历史来恢复校正后的时间戳范围计算,并使用分组n-1和n来更新范围。然而,在一些实施方式中,乱序分组非常罕见,因此可以忽略这种情况,并且仅重置范围即可,而对感知质量的影响很小。
分组丢失隐藏
在一些实施方式中,播出时间戳指向要播出的下一个样本。该时间戳以生成的样本数递增。当分组在一分组丢失后到达时,将其校正后的RTP时间戳范围与播出时间戳进行比较。如果播出时间戳早于校正后的RTP时间戳范围的中间,则会生成一定数量的隐藏子帧(例如,音频样本的部分帧)(但需要很多),以使其尽可能接近接收到的分组的校正后的RTP时间戳范围的中间。之后,回放被切换到解码的子帧。
如果在隐藏之后播出时间戳已经接近或超出了第一接收到的分组的校正后的RTP时间戳范围的中间,则停止生成隐藏的子帧,并切换到已解码的子帧。在这种情况下,报告的播出延迟将降为零或负值。负延迟被视为特殊情况。首先,以低的动作成本将延迟报告给控制器,并且期望控制器来请求将延迟增加到多达负延迟的大小。然后,解码器通过简单地将播出时间戳降低所请求的延迟增加来增加延迟。如果在此延迟增加之后延迟仍然为负,则解码器将丢弃子帧,直到播出时间戳与要播出的第一子帧的校正后的RTP时间戳范围的下端匹配为止。
隐藏有两种类型:外推(当没有将来的帧可用时)和内插(在过去的帧和将来的帧之间)。当内插时,隐藏需要确定要插入多少个子帧。如果过去的帧和将来的帧是清音的,则已知每个丢失的20ms帧都包含4个子帧。此外,对于清音的信号,校正后的RTP时间戳范围很窄(最多4ms),因此可以在旧的和新的RTP时间戳范围内的某个点之间取差值。为了在浊音帧之间进行内插,需要找到基音滞后的序列(每个基音滞后定义子帧长度),以使(1)内插的基音滞后平稳发展,并且(2)它们填充估计的RTP时间戳间隔。在一些实施方式中,合理的一点是使用70%的校正后的RTP时间戳范围作为针对浊音帧和清音帧的真实RTP时间戳的估计。
在某些情况下,使用双面外推法代替内插法。如果浊音模式从过去的帧更改为将来的帧,或者在过去的帧和将来的帧之间在基音滞后中有较大的跳跃,则会发生这种情况。在这种情况下,从过去开始执行外推,并且还从将来向后进行外推。在两者之间的某个时间点,两个外推相遇。该点不一定位于过去的帧和将来的帧之间的中间,而是可以以信号相关的方式进行选择。
用于确定校正后的时间戳范围的环境
图1是描绘了用于使用可变大小的帧来确定针对流式数据的校正后的时间戳范围的示例环境100的图。示例环境100描绘了发送设备110。发送设备110可以是对流式数据(例如,流式音频和/或视频)进行编码和发送的任何类型的计算设备(例如,服务器计算机、虚拟机、台式计算机、膝上型计算机、平板电脑、电话或另一种类型的计算设备)。
如112处所示,从缓冲区获得可变量的流式数据。例如,缓冲区可以在生成流式数据时捕获流式数据(例如,音频和/或视频数据)(例如,经由麦克风或视频捕获设备)。在一个示例中,一定量的流式数据周期性地被放置到缓冲区中(例如,每20ms,从麦克风捕获的价值20ms的音频样本被放置到缓冲区中)。然后如112所示,从缓冲区中,选择可变量的流式数据以进行编码和传输。例如,如果缓冲区中有20ms的数据,则最多可以获得20ms的数据(例如,4ms、12.4ms、20ms或其他一些量)。可以基于多种标准来确定从缓冲区获得的可变量的流式数据。例如,如果流式数据是音频,则该量可以基于音频数据的类型而变化(例如,如果音频数据是周期性的,例如浊音数据,则可以基于基音周期的数量来确定音频数据的量)。
如在114处描绘的,将可变量的流式数据编码在具有对应的可变帧大小的帧中。例如,如果从缓冲区获得了12ms的音频数据,则将12ms的音频数据编码在具有12ms的帧大小(例如,具有价值12ms的音频样本)的帧中。
如在116处描绘的,将可变大小帧在网络分组中发送到接收设备120。该网络分组与具有固定时间戳增量的时间戳值相关联。例如,该帧可以在具有时间戳报头值的网络分组中传输,该时间戳报头值具有自前一帧以来20ms的固定增量。可以经由诸如RTP的流式网络协议或另一流式协议将网络分组发送到接收设备120。
发送设备110经由网络130(例如,互联网和/或另一种类型的公共或私有数据网络)将网络分组发送到接收设备120。接收设备120可以是接收和解码流式数据(例如流式音频和/或视频)的任何类型的计算设备(例如,服务器计算机、虚拟机、台式计算机、膝上型计算机、平板电脑、电话或另一种类型的计算设备)。
如在122处描绘的,经由网络130从发送设备110接收网络分组。接收到的网络分组包括接收到的时间戳值和可变大小帧。接收到的时间戳值是与网络分组或帧关联的固定增量时间戳值。例如,如果网络协议是RTP,则接收到的时间戳值就是RTP报头时间戳值(20ms的倍数或其他固定增量)。
如在124处描绘的,确定先前的网络分组已经丢失(先前的网络分组是紧接在接收到的网络分组之前的网络分组)。可以基于分组序列号(例如,已经接收到具有给定序列号的当前网络分组并确定尚未接收到具有先前序列号的先前网络分组)来确定先前的网络分组已经丢失。可以确定是否在给定的时间周期内没有接收到丢失的网络分组。
如在126处描绘的,针对接收到的网络分组计算校正后的时间戳范围。例如,可以至少部分地基于接收到的时间戳值和可能的缓冲区大小范围来计算校正后的时间戳范围。在一些实施方式中,使用类似于等式3、4和5的技术来计算校正后的时间戳范围。可以使用校正后的时间戳范围(例如,由接收设备120的组件,例如解码器、控制器、回放组件等)来控制流式数据的解码和/或回放(例如,以控制抖动缓冲区属性来管理延迟)。
图2是描绘用于确定针对使用可变大小的帧的流式音频的校正后的时间戳范围的示例环境200的图。在一些实施方式中,示例性环境200可以用于确定除流式音频之外或代替流式音频,针对流式视频和/或其他类型的流式媒体的校正后的时间戳范围。示例环境200描绘了发送设备210。发送设备210可以是任何类型的计算设备(例如,服务器计算机、虚拟机、台式计算机、膝上型计算机、平板电脑、电话或另一种类型的计算设备),其对流式数据(例如,流式音频和/或视频)编码并进行发送。
发送设备210的音频捕获组件240(例如,麦克风)捕获音频并将其周期性地保存在缓冲区245中。例如,可以从音频捕获组件240获得20ms的音频样本,并且每20ms将其保存在缓冲区245中。在一些实施方式中,发送设备210可以包括视频捕获设备和对应的视频缓冲区。
如在212处描绘的,从缓冲区245获得可变量的流式音频。用于编码和传输。例如,如果缓冲区中有20毫秒的数据,则最多可以获得20毫秒的数据(例如4毫秒、12.4毫秒、20毫秒或其他一些量)。从缓冲区获得的可变量的流式音频可以基于各种标准来确定。例如,该量可以基于音频数据的类型而变化(例如,如果音频数据是周期性的,诸如浊音数据,则可以基于基音周期的数量来确定音频数据的量)。
如在214处所描绘的,将可变量的流式音频编码在具有对应的可变帧大小的帧中。例如,如果从缓冲区获得了12ms的音频数据,则将12ms的音频数据编码在具有12ms的帧大小(例如,具有价值12ms的音频样本)的帧中。
如在216处描绘的,可变大小帧在网络分组中被发送到接收设备220。该网络分组与具有固定时间戳增量的时间戳值相关联。例如,该帧可以在具有时间戳报头值的网络分组中传输,该时间戳报头值具有自前一帧以来的20ms的固定增量。可以经由诸如RTP的流式网络协议或另一流式协议将网络分组发送到接收设备220。
发送设备210经由网络130(例如,互联网和/或另一种类型的公共或私有数据网络)将网络分组发送到接收设备220。接收设备220可以是接收和解码流式数据(例如,流式音频和/或视频)的任何类型的计算设备(例如,服务器计算机、虚拟机、台式计算机、膝上型计算机、平板电脑、电话或另一种类型的计算设备)。
如在222处描绘的,经由网络130从发送设备210接收网络分组。接收到的网络分组包括接收到的时间戳值和可变大小帧。接收到的时间戳值是与网络分组或帧关联的固定增量时间戳值。例如,如果网络协议是RTP,则接收到的时间戳值是RTP报头时间戳值(20ms的倍数或其他固定增量)。
如在224处描绘的,确定先前的网络分组已经丢失(先前的网络分组是紧接在接收到的网络分组之前的网络分组)。可以基于分组序列号(例如,已经接收到具有给定序列号的当前网络分组并确定尚未接收到具有先前序列号的先前网络分组)来确定先前的网络分组已经丢失。可以确定是否在给定的时间周期内没有接收到丢失的网络分组。
如在226处描绘的,针对接收到的网络分组计算校正后的时间戳范围。例如,可以至少部分地基于接收到的时间戳值和可能的缓冲区大小范围来计算校正后的时间戳范围。在一些实施方式中,使用类似于等式3、4和5的技术来计算校正后的时间戳范围。可以使用校正后的时间戳范围(例如,由接收设备220的组件,例如解码器、控制器、回放组件等)来控制流式音频的解码和/或回放(例如,以控制抖动缓冲区属性来管理延迟)。
在一些实施方式中,示例环境100和200是在线实时通信环境,其中音频和/或视频信息在发送设备110或210处捕获,并发送到接收设备120或220以进行呈现(例如,作为实时音频和/或视频通话、会议、聚会等的一部分)。例如,在线通信环境可以包括互联网协议语音(VoIP)服务。作为通信的一部分,接收设备120或220还可以将音频和/或视频发送回发送设备110或210以进行呈现(例如,作为双向音频和/或视频呼叫的一部分)。另外,许多其他计算设备可以参与通信(例如,在会议环境中)。
用于确定校正后的时间戳范围的方法
在本文的任何示例中,可以提供用于确定针对流式数据的校正后的时间戳范围的方法。
图5是用于确定针对流式数据的校正后的时间戳范围的示例方法500的流程图。可以例如通过诸如RTP之类的流式网络协议来发送流式数据。例如,示例方法500可以由诸如接收设备120或接收设备220之类的计算设备执行。
在510处,接收包括接收到的时间戳值和流式数据的帧的网络分组。接收到的时间戳值具有固定的时间戳增量(例如,20ms的增量或某个其他固定值)。
在520处,确定先前的网络分组已经丢失。例如,用于接收先前的网络分组的时间周期已经到期。
在530处,关于接收到的网络分组来计算可能的缓冲区大小范围。可能的缓冲区大小范围是针对用于对流式数据进行编码的编码缓冲区的。在一些实施方式中,通过至少部分地基于针对丢失帧的缓冲区大小范围和接收到的帧的持续时间来计算传播的缓冲区大小范围,并且然后计算传播的缓冲区大小范围和针对接收到的帧的最大缓冲区大小范围的交集,从而计算可能的缓冲区大小范围。在一些实施方式中,基于流式数据的类型来选择最大缓冲区大小范围。例如,流式数据的不同类型可以具有不同的最大缓冲区大小范围(例如,对于音频,针对浊音音频的第一最大缓冲区大小范围和针对清音音频的第二最大缓冲区大小范围)。
在540处,至少部分地基于接收到的时间戳值和可能的缓冲区大小范围,针对接收到的网络分组来计算校正后的时间戳范围。在一些实施方式中,计算校正后的时间戳范围包括:基于接收到的帧的持续时间来调整可能的缓冲区大小范围;以及基于调整后的可能的缓冲区大小范围来计算校正后的时间戳范围。然后可以从校正后的时间戳范围中选择特定的校正后的时间戳值(例如,该范围中的最小值,该范围中的最大值或它们之间的某个值)。校正后的时间戳范围和/或值可用于例如调整抖动缓冲区。
图6是用于确定针对流式音频的校正后的时间戳范围的示例方法600的流程图。可以例如通过诸如RTP之类的流式网络协议来发送流式音频。例如,示例方法600可以由诸如接收设备120或接收设备220之类的计算设备执行。
在610处,接收网络分组,该网络分组包括接收到的时间戳值和流式音频的帧。接收到的时间戳值具有固定的时间戳增量(例如,20ms的增量或某个其他固定值)。
在620处,确定先前的网络分组已经丢失。例如,用于接收先前的网络分组的时间周期已经到期。
在630处,关于接收到的网络分组来计算可能的缓冲区大小范围。可能的缓冲区大小范围是针对用于对流式音频进行编码的编码缓冲区的。在一些实施方式中,通过至少部分地基于针对丢失帧的缓冲区大小范围和接收到的帧的持续时间来计算传播的缓冲区大小范围,并且然后计算传播的缓冲区大小范围和针对接收到的帧的最大缓冲区大小范围的交集,从而计算可能的缓冲区大小范围。在一些实施方式中,基于流式音频的类型来选择最大缓冲区大小范围。例如,流式音频的不同类型可以具有不同的最大缓冲区大小范围(例如,用于浊音音频的第一最大缓冲区大小范围和用于清音音频的第二最大缓冲区大小范围)。
在640处,至少部分地基于接收到的时间戳值和可能的缓冲区大小范围,针对接收到的网络分组计算校正后的时间戳范围。在一些实施方式中,计算校正后的时间戳范围包括:基于接收到的帧的持续时间来调整可能的缓冲区大小范围;以及基于调整后的可能的缓冲区大小范围来计算校正后的时间戳范围。然后可以从校正后的时间戳范围中选择特定的校正后的时间戳值(例如,该范围中的最小值,该范围中的最大值或它们之间的某个值)。校正后的时间戳范围和/或值可用于例如调整抖动缓冲区。
计算系统
图7描绘了其中可以实现所描述的技术的合适的计算系统700的一般示例。由于可以在各种通用或专用计算系统中实现该技术,因此计算系统700无意建议关于使用范围或功能的任何限制。
参考图7,计算系统700包括一个或多个处理单元710、715和存储器720、725。在图7中,该基本配置730包括在虚线内。处理单元710、715执行计算机可执行指令。处理单元可以是通用中央处理单元(CPU)、专用集成电路(ASIC)中的处理器或任何其他类型的处理器。处理单元还可以包括多个处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理功率。例如,图7示出了中央处理单元710以及图形处理单元或协处理单元715。有形存储器720、725可以是可由处理单元访问的易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如ROM、EEPROM、闪存等),或两者的某种组合。存储器720、725以适合于由处理单元执行的计算机可执行指令的形式存储实现本文描述的一种或多种技术的软件780。
计算系统可以具有附加特征。例如,计算系统700包括存储装置740、一个或多个输入设备750、一个或多个输出设备760以及一个或多个通信连接770。互连机制(未示出),诸如总线、控制器或网络,将计算系统700的组件互联。通常,操作系统软件(未示出)为在计算系统700中执行的其他软件提供操作环境,并协调计算系统700的组件的活动。
有形存储装置740可以是可移动的或不可移动的,并且包括磁盘、磁带或盒带、CD-ROM、DVD或可用于存储信息并且可在计算系统700内访问的任何其他介质。存储装置740存储用于软件780的指令,该软件780实现本文中描述的一种或多种技术。
(一个或多个)输入设备750可以触摸输入设备,诸如,键盘、鼠标、笔或轨迹球之类、语音输入设备、扫描设备或向计算系统700提供输入的另一设备。对于视频编码,输入设备750可以是相机、视频卡、TV调谐器卡或接受模拟或数字形式的视频输入的类似设备,也可以是将视频样本读入到计算设备700的CD-ROM或CD-RW。输出设备760可以是显示器、打印机、扬声器、CD刻录机或提供来自计算系统700的输出的其他设备。
通信连接770使得能够通过通信介质与另一计算实体进行通信。通信介质传送信息,所述信息诸如计算机可执行指令、音频或视频输入或输出或调制数据信号中的其他数据。调制的数据信号是一种信号,其将信息编码在该信号中的方式来设置或更改特性中的一个或多个。作为示例而非限制,通信介质可以使用电、光、RF或其他载体。
可以在诸如程序模块中包含的计算机可执行指令之类的计算机可执行指令的一般上下文中描述该技术,该计算机可执行指令在目标真实或虚拟处理器上的计算系统中执行。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。在各个实施例中,程序模块的功能可以根据需要在各种程序模块之间进行组合或拆分。用于程序模块的计算机可执行指令可以在本地或分布式计算系统内执行。
术语“系统”和“设备”可互换使用。除非上下文另外明确指出,否则两个术语均不暗示对计算系统或计算设备的类型的任何限制。通常,计算系统或计算设备可以是本地的或分布式的,并且可以包括专用硬件和/或通用硬件与实现本文所述功能的软件的任意组合。
为了便于说明,在具体实施方式中使用诸如“确定”和“使用”之类的术语来描述计算系统中的计算机操作。这些术语是针对由计算机执行的操作的高级抽象,并且不应与由人类执行的动作混淆。与这些术语相对应的实际计算机操作取决于实施方式而不同。
移动设备
图8是描绘了示例移动设备800的系统图,该示例移动设备800包括以802总体示出的各种可选硬件和软件组件。尽管为便于说明未示出所有连接,但是移动设备中的任何组件802均可与任何其他组件进行通信。移动设备可以是多种计算设备中的任何一种(例如,手机、智能手机、手持计算机、个人数字助理(PDA)等),并且可以允许与一个或多个移动通信网络804(例如,蜂窝网络、卫星网络或其他网络)进行无线双向通信。
所示的移动设备800可以包括用于执行诸如信号编码、数据处理、输入/输出处理、功率控制和/或其他功能之类的任务的控制器或处理器810(例如,信号处理器、微处理器、ASIC或其他控制和处理逻辑电路)。操作系统812可以控制组件802的分配和使用并支持一个或多个应用程序814。应用程序可以包括常见的移动计算应用(例如,电子邮件应用、日历、联系人管理器、Web浏览器、消息传递应用)或任何其他计算应用。用于访问应用商店的功能813也可以用于获取和更新应用程序814。
所示的移动设备800可以包括存储器820。存储器820可以包括不可移动存储器822和/或可移动存储器824。不可移动存储器822可以包括RAM、ROM、闪存、硬盘或其他众所周知的存储器存储技术。可移动存储器824可以包括在GSM通信系统中众所周知的闪存或订户身份模块(SIM)卡,或者包括诸如“智能卡”之类的其他众所周知的存储器存储技术。存储器820可以用于存储用于运行操作系统812和应用814的数据和/或代码。示例数据可以包括网页、文本、图像、声音文件、视频数据或要经由一个或多个有线或无线网络发送给一个或多个网络服务器或其他设备和/或从一个或多个网络服务器或其他设备接收到的其他数据集。存储器820可以用于存储订户标识符,例如国际移动订户身份(IMSI),以及设备标识符,例如国际移动设备标识符(IMEI)。这样的标识符可以被发送到网络服务器以识别用户和设备。
移动设备800可以支持一个或多个输入设备830,例如触摸屏832、麦克风834、照相机836、物理键盘838和/或轨迹球840,以及一个或多个输出设备850,例如扬声器852和显示器854。其他可能的输出设备(未示出)可以包括压电或其他触觉输出设备。某些设备可以服务于多于一个的输入/输出功能。例如,触摸屏832和显示器854可以组合在单个输入/输出设备中。
输入设备830可以包括自然用户界面(NUI)。NUI是使用户能够以“自然”方式与设备进行交互的任何接口技术,而不受诸如鼠标、键盘、远程控制等输入设备施加的人为约束。NUI方法的示例包括那些依赖于语音识别、触摸和手写笔识别、屏幕上以及与屏幕相邻的手势识别、空中手势、头部和眼睛跟踪、话音和语音、视觉、触摸、手势和机器智能的方法。NUI的其他示例包括使用加速度计/陀螺仪进行运动手势检测、面部识别、3D显示、头部、眼睛和凝视跟踪、沉浸式增强现实和虚拟现实系统,所有这些都提供了更自然的界面,以及用于使用电场感应电极(EEG和相关方法)感应大脑活动的技术。因此,在一个特定示例中,操作系统812或应用814可以包括语音识别软件,作为语音用户界面的一部分,该语音用户界面允许用户经由语音命令来操作设备800。此外,设备800可以包括输入设备和软件,该输入设备和软件允许经由用户的空间手势的用户交互,诸如检测和解释手势以向游戏应用提供输入。
无线调制解调器860可以耦合到天线(未示出),并且可以支持处理器810和外部设备之间的双向通信,如本领域中众所周知的。调制解调器860被一般性地示出,并且可以包括用于与移动通信网络804和/或其他基于无线电的调制解调器(例如,蓝牙864或Wi-Fi862)进行通信的蜂窝调制解调器。无线调制解调器860通常被配置用于与一个或多个蜂窝网络通信,所述蜂窝网络例如用于单个蜂窝网络内、蜂窝网络之间或者移动设备与公共交换电话网络(PSTN)之间的数据和语音通信的GSM网络。
移动设备可以进一步包括至少一个输入/输出端口880、电源882、诸如全球定位系统(GPS)接收器之类的卫星导航系统接收器884、加速度计886和/或物理连接器890,其可以是USB端口、IEEE 1394(火线)端口和/或RS-232端口。由于可以删除任何组件并可以添加其他组件,因此不需要或全包含所示出的组件802。
云支持环境
图9示出了其中可以实现所描述的实施例、方法和技术的合适的云支持环境900的一般示例。在示例环境900中,云910提供各种类型的服务(例如,计算服务)。例如,云910可以包括计算设备的集合,这些计算设备可以位于中心或分布式的,其向经由互联网(例如因特网)连接的各种类型的用户和设备提供基于云的服务。实施环境900可以以不同的方式用于完成计算任务。例如,一些任务(例如,处理用户输入并呈现用户界面)可以在本地计算设备(例如,连接的设备930、940、950)上执行,而其他任务(例如,存储要在后续处理中使用的数据)可以在云910中执行。
在示例环境900中,云910为具有各种屏幕能力的所连接的设备930、940、950提供服务。连接的设备930表示具有计算机屏幕935(例如,中型屏幕)的设备。例如,连接的设备930可以是个人计算机,例如台式计算机、膝上型计算机、笔记本计算机、上网本等。连接的设备940表示具有移动设备屏幕945(例如,小尺寸屏幕)的设备。例如,连接的设备940可以是移动电话、智能电话、个人数字助理、平板计算机等。连接的设备950代表具有大屏幕955的设备。例如,连接的设备950可以是电视屏幕(例如,智能电视)或连接到电视的另一设备(例如,机顶盒或游戏机)或类似设备。所连接的设备930、940、950中的一个或多个可以包括触摸屏功能。触摸屏可以接受不同方式的输入。例如,当物体(例如指尖或触控笔)扭曲或中断在表面上运行的电流时,电容式触摸屏会检测到触摸输入。作为另一个示例,当来自光学传感器的光束被中断时,触摸屏可以使用光学传感器来检测触摸输入。对于某些触摸屏检测到的输入,不需要与屏幕表面进行物理接触。没有屏幕能力的设备也可以在示例环境900中使用。例如,云910可以针对一台或多台没有显示器的计算机(例如,服务器计算机)提供服务。
服务可以由云910通过服务提供商920或通过在线服务的其他提供商(未示出)提供。例如,可以针对特定连接的设备(例如,连接的设备930、940、950)的屏幕尺寸、显示能力和/或触摸屏能力来定制云服务。
在示例环境900中,云910至少部分地使用服务提供商920向各种连接的设备930、940、950提供本文所述的技术和解决方案。例如,服务提供商920可以针对各种基于云的服务提供集中式解决方案。服务提供商920可以管理针对用户和/或设备(例如,针对所连接的设备930、940、950和/或它们各自的用户)的服务订阅。
示例实施方式
尽管为了方便呈现,以特定的、序列顺序描述了一些所公开的方法的操作,但是应当理解,这种描述方式包括重新布置,除非以下阐述的特定语言要求特定的顺序。例如,在某些情况下,顺序描述的操作可以重新被布置或同时执行。此外,为了简单起见,附图可能未示出可以将所公开的方法与其他方法结合使用的各种方式。
任何公开的方法可以被实现为存储在一个或多个计算机可读存储介质上并在计算设备(即,任何可用的计算设备,包括智能电话或包含计算硬件的其他移动设备)上执行的计算机可执行指令或计算机程序产品)。计算机可读存储介质是可以在计算环境中访问的有形介质(一个或多个光盘介质,例如DVD或CD、易失性存储器(例如DRAM或SRAM),或非易失性存储器(例如闪存或硬盘驱动器))。通过示例的方式并参考图7,计算机可读存储介质包括存储器720和725以及存储装置740。通过示例的方式并参考图8,计算机可读存储介质包括存储器和存储装置820、822和824。术语计算机可读存储介质不包括信号和载波。另外,术语计算机可读存储介质不包括通信连接,例如770、860、862和864。
用于实现所公开的技术的任何计算机可执行指令以及在实现所公开的实施例期间创建和使用的任何数据都可以存储在一个或多个计算机可读存储介质上。计算机可执行指令可以是例如专用软件应用或经由web浏览器或或其他软件应用访问或下载的软件应用(例如远程计算应用)的一部分。此类软件可以使用一台或多台网络计算机在例如单个本地计算机(例如,任何合适的商用计算机)上执行或在网络环境(例如,经由因特网、广域网、局域网、客户端-服务器网络(例如云计算网络)或其他此类网络)中执行。
为了清楚起见,仅描述了基于软件的实施方式的某些选定方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以通过用C++、Java、Perl或任何其他合适的编程语言编写的软件来实现。同样,公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。
此外,任何基于软件的实施例(例如,包括用于使计算机执行任何公开的方法的计算机可执行指令)都可以通过适当的通信手段上载、下载或远程访问。此类合适的通信手段包括,例如,因特网、万维网、内联网、软件应用、电缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信或其他此类通信手段。
所公开的方法、装置和系统不应以任何方式进行限制。而是,本公开针对单独且以彼此的各种组合和子组合的各种公开实施例的所有新颖和非显而易见的特征和方面。所公开的方法、装置和系统不限于任何特定方面或特征或其组合,本公开的实施例也不要求存在任何一个或多个特定优点或要解决的问题。
来自任何示例的技术都可以与其他示例的任何一个或多个中描述的技术结合使用。鉴于可以应用所公开技术的原理的许多可能的实施例,应当认识到,所示出的实施例是所公开技术的示例,并且不应被视为对所公开技术的范围的限制。
- 处理用于针对流式网络协议的时间戳不准确
- 用于对时间戳进行水印处理的方法和设备、用于对时间戳进行解码的方法和设备、相应的应用程序和计算机程序产品