发送录制的材料转让专利

申请号 : CN200580009650.1

文献号 : CN1939030B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗伯托·阿尔瓦雷斯·阿雷瓦洛罗里·斯图尔特·特恩布尔

申请人 : 英国电讯有限公司

摘要 :

本发明涉及发送录制的材料。诸如视频的录制的材料以压缩的形式发送到接收方,该接收方具有缓冲器,用于消除所接收的数据速率与后面的解码器所消耗的数据速率之间的差异。分析整个录制品以确定使得不会发生缓冲器下溢的开始播放点;仅当到达该点时,解码器才开始播放。

权利要求 :

1.一种发送录制品的方法,该方法包括以下步骤:

从服务器(1)开始其发送;

将接收到的数据保存在接收方缓冲器(32)中;以及

当到达确定的接收方缓冲器满的状态时才开始播放所述接收到的数据;

其中所述服务器分析所述录制品以确定将要在播放之前到达的所述接收方缓冲器满;

所述方法的特征在于:

所述服务器保留不发送所述录制品的初始部分,直到已发送了需要到达所确定的缓冲器满的数据的剩余部分为止,然后才发送所述初始部分;并且,所述接收方仅当接收到所述初始部分时才开始播放。

2.根据权利要求1所述的方法,该方法包括预先进行所述分析并对录制品中对应于需要到达所确定的缓冲器满的数据的部分进行标记。

3.根据权利要求1所述的方法,其中所述分析识别位于录制品的开始处的第一部分,该部分符合这样的条件,即其所覆盖的播放时间间隔大于或等于随后的任何长度的部分的定时误差的最大值,各定时误差被定义为各个随后部分的传输时间超过其播放时间间隔的程度。

4.根据权利要求2所述的方法,其中所述分析识别位于录制品的开始处的第一部分,该部分符合这样的条件,即其所覆盖的播放时间间隔大于或等于随后的任何长度的部分的定时误差的最大值,各定时误差被定义为各个随后部分的传输时间超过其播放时间间隔的程度,以及其中,所述分析包括:预先计算与多个传输数据率相对应的定时误差值并将其存储;以及随后根据所述定时误差值估计与实际传输数据率相对应的误差值。

5.根据权利要求3或4所述的方法,其中,所述分析包括对为所述录制品的连续部分估计的定时误差参数进行测试,其中所述定时误差参数是首先针对所述录制品的第一部分或初期部分计算的,并且通过更新针对前一部分所获得的参数,来获得随后部分的定时误差参数。

6.根据前述权利要求中任一项所述的方法,其中,所述录制品是视频录制品。

7.根据前述权利要求中任一项所述的方法,其中,所述录制品是音频录制品。

说明书 :

发送录制的材料

技术领域

[0001] 本发明涉及通过网络发送录制的材料(诸如要实时播放的视频、音频或其他材料)的方法和设备。

背景技术

发明内容

[0002] 根据本发明的一方面,提供了一种发送录制品(recording)的方法,该方法包括以下步骤:
[0003] 开始其发送;
[0004] 将接收到的数据保存在接收方缓冲器中;以及
[0005] 开始播放所述接收到的数据;
[0006] 所述方法的特征在于以下步骤:分析整个所述录制品,确定使得不会发生缓冲器下溢(underflow)的开始播放点;以及仅当到达该点时才开始播放。
[0007] 在另一方面中,本发明提供了一种发送录制品的方法,该方法包括以下步骤:
[0008] 开始其发送;
[0009] 将接收到的数据保存在接收方缓冲器中;以及
[0010] 开始播放所述接收到的数据;
[0011] 所述方法的特征在于以下步骤:
[0012] 分析整个所述录制品,以识别位于其开始处的第一部分,该部分符合这样的条件,即其所覆盖的播放时间间隔大于或等于后面的任何长度的部分的定时误差的最大值,每个定时误差被定义为各个随后部分的传输时间超过其播放时间间隔的程度;以及使所述接收方仅在接收到所述第一部分之后才开始播放。
[0013] 在权利要求书中阐述了本发明的其他方面。

附图说明

[0014] 现在将参照附图通过示例描述本发明的一些实施例,在附图中:
[0015] 图1是实现本发明的传输系统的框图;
[0016] 图2是一时序图;
[0017] 图3是解释图1所示的控制单元的操作的流程图;
[0018] 图4是解释控制单元的操作的另选模式的流程图;以及
[0019] 图5是解释又一版本的流程图;

具体实施方式

[0020] 在图1中,成流器(streamer)1包含(或者可访问)其中存储有文件的存储器11,每个文件是压缩版本的视频序列,其是使用传统压缩算法(诸如在ITU标准H.261或H.263或者ISO MPEG标准之一中定义的算法)进行编码的。自然地,人们可能存储其他视频序列的类似录制品,但是这对于操作原理而言不重要。
[0021] “比特率”在这里指的是由原始编码器产生以及由最终解码器消耗的比特率;通常,该比特率与成流器实际传输的速率(将其称为传输比特率)不同。还应该注意,这些文件是以可变比特率(VBR)产生的,即,针对视频的特定帧产生的比特数取决于图像内容。因此,以上以及后面(等)提到的比特率指的是平均比特率。
[0022] 该服务器具有发送器12,发送器12用来将数据经由网络2输出到终端3。该发送器是传统的,可能以众所周知的协议(诸如TCP/IP)工作。控制单元13用来以传统方式接收来自终端的要求传送特定序列的请求,并从存储器11中读取数据的分组,以在发送器12能够接收它们时将其发送到发送器12。这里假设数据是作为离散的分组被读出的,虽然不排除针对单个帧产生多于一个的分组的可能性,但是通常每个视频帧一个分组。(虽然在原理上单个分组可以包含多于一帧的数据,但是通常在实践中没什么好处)。
[0023] 要注意,这些分组不必与网络2中使用的任何分组结构相关。
[0024] 终端3具有接收器31、缓冲器32和解码器33。
[0025] 某些网络(包括TCP/IP网络)具有这样的特性,即,可用的传输数据率根据网络的负载程度而波动。
[0026] 将针对此点进行一些理论性讨论。
[0027] 如图2所示,经编码的视频序列包括N个分组。每个分组具有包含时间索引ti(i=0...N-1)(依据实际显示时间而设置,例如其可以是视频帧号)的头部并且包含bi位。该分析假设在可以对分组i解码之前必须完整地接收到它(即,必须首先缓冲整个分组)。
[0028] 在简单的情况下,每个分组对应于一个帧,并且时间戳ti单调地增加,即对于所有的i,ti+1>ti。然而,如果一帧可以产生两个或更多个分组(每个具有相同的ti),那么ti+1≥ti。如果帧可以用完拍摄和显示序列(如在MPEG中),那么ti不会单调地增加。此外,在实践中,某些帧会丢失,从而将会没有针对特定值ti的帧。
[0029] 这些时间是相对的。假设接收方接收到分组0并在时刻tref+t0开始对分组0解码。在“现在时刻”tref+tg,接收方接收到分组tg(并且可能还接收到更多的分组)并正开始对分组g解码。
[0030] 分组g到h-1位于缓冲器中。要注意(在该简单情况下),如果h=g+1,那么该缓冲器仅包含分组g。在时刻tref+tj,要求解码器开始对分组j解码。因此,在该时刻tref+tj,解码器必须已接收到上至分组j且包括分组j的所有分组。
[0031] 从现在起到tref+tj的可用时间为(tref+tj)-(tref+tg)=tj-tg (1)[0032] 在该时刻要发送的数据是分组h到j的数据,即
[0033]
[0034] 在传输率R的情况下,这些数据将需要以下传输时长
[0035]
[0036] 仅当该传输时长小于或等于所述可用时间时,即,在当前可用的传输率R满足不等式
[0037]
[0038] 时,这才是可能的。
[0039] 要注意,这是对分组j进行令人满意的接收和解码的条件;而令人满意的所有剩下的序列的传输要求对于所有j=h...N-1满足该条件。
[0040] 由于将变得显而易见的原因,我们将等式(4)重写为:
[0041]
[0042] 要注意, 其中Δti=ti-ti-1。
[0043] 此外,我们定义Δεi=(bi/R)-Δti
[0044] 要注意th-1-tg是缓冲器中最近接收到的分组的时间戳与缓冲器中最早接收到的分组(即我们正开始解码的分组)的时间戳之间的差。
[0045] 那么该条件为
[0046]
[0047] 为了成功传输一直到最后一个分组N-1,对于任何可能的j必须满足该条件,即[0048]
[0049] 等式(7)的左侧表示从传输分组h直到该序列结束可能发生的最大定时误差,而该条件说明,在给定其当前内容的情况下,该误差必须不超过接收方缓冲器适应该误差的能力。为了方便起见,我们将等式(7)的左侧标记为Th,即
[0050]
[0051] 从而可将等式(7)写为
[0052] Th≤th-1-tg (9)
[0053] 考虑在时刻tg=t0的情况,即,当解码器要开始对第一个分组解码时的情况。在通常情况下,在缓冲器中仅有一个分组(h=1)时不会满足以上条件。接收方在开始解码前等待缓冲器的内容达到令人满意的水平。利用以上条件,显见的是,接收方应该至少等到缓冲器包含分组H-1,其中H是满足条件
[0054] Th≤th-1-t0 (10)
[0055] 的h的最小值。
[0056] 在本发明的该实施例中,控制单元13的功能之一是,每次当它向发送器12发送分组时,它评估在等式10中所体现的测试。
[0057] 图3是示出了控制单元的操作的流程图。在步骤101,重置分组计数器。然后(步骤102),从存储器11中读取第一个分组(或者在随后的循环中读取下一分组)并将其发送到发送器12。在步骤103,控制单元计算Tn的值。在此处,计数器n指向最后发送的分组,而等式(10)针对的最后发送的分组为h-1。因此,在步骤103计算的是Tn+1,在步骤104执行是否Tn+1≤tn-t0的测试。
[0058] 如果没有通过该测试,则分组计数器在步骤106递增,并且控制返回到步骤102,在步骤102,只要发送器准备好接收分组,另一分组就被读出并发送。如果通过了测试,那么知道接收方一接收到该分组就开始解码是安全的。因此,在步骤105,控制单元向发送器发送“开始”消息,该消息要被发送到接收方。当接收方接收到该开始消息时,它开始解码。如果存在消息以与这些消息被发送的顺序不同的顺序被接收的任何可能性,那么该开始消息应该包含分组索引n,以使接收方可以在开始解码之前检查是否已实际接收到了分组n。
另选地,发送器可以将Tn+1的值发送到接收方,并且接收方自己进行测试。
[0059] 在发送了“开始”消息之后,分组计数器在步骤107递增,并在步骤108发送另一帧:重复这些步骤直到到达文件的末端为止,是否到达文件的末端是在步骤109识别的,并且处理在步骤110终止。
[0060] 前面的描述假设控制单元在每次当其向发送器发送分组时执行该计算,这样计算强度很大。一另选例旨在较稀疏地执行计算,可能每五个分组一次,这减少了计算量,但是会导致缓冲比所需的更多的帧。
[0061] 另一另选例旨在只要它能够完成计算就立刻完成计算(即,不等待下一分组),然后将开始消息(具有开始分组号)发送到接收方。又一另选例旨在在发送任何分组之前执行计算。一旦确定了h的值,那么就按相反的顺序(分组h-1、分组h-2、...、分组0)发送分组0到h-1。在此情况下,它必须停止以发送明确的“开始”命令。支持UDP传输协议的标准接收方能够对分组重新排序,并且在开始解码前会自动等到分组0到达。事实上,保留分组0直到发送了分组1到h-1(其顺序是不重要的)之后就足够了。
[0062] 然而,这排除了考虑在等待时段期间传输数据率R的变化的可能性,因此仅当不会发生这种化时才令人满意。
[0063] (通过检查等式(3))观察到,速率R的意义在于计算发送分组h到j所花费的时间。因此,由于用于发送分组0到h-1的实际速率不影响结果,所以它不重要。
[0064] 另一吸引人的选项是预先执行尽可能多的计算。如果存在其中R仅可能或仅允许有一个值的系统,那么可以对每个帧预先执行在步骤103处对Tn+1的计算以及步骤104的测试,直到测试通过,并且例如通过将n的对应值记录在文件开始处的单独字段中,或者通过将特殊标志附加到帧n自身,从而将结果记录在文件中。因此,在图3中,步骤103和104将被测试“n的当前值等于存储在文件中的n的值吗?”、或者“当前帧包含开始标志吗?”所代替。另选地,可以将所述单独字段(或标志)转发到接收方,并在接收端执行该识别处理。
[0065] 图4示出了应对传输数据率R变化的情况的处理的流程图。就原理而言,这涉及每个分组的Th并将该值存储在分组的头部中。然而,在实践中,必须对序列的开始处的、人们确信在其时段内会通过测试的足够数量的帧(以每秒25帧的速度可能为250帧)计算这些Th。不幸的是,对Th的计算涉及R的值,而R的值在该预处理时当然是未知的。因此,我们通过针对R的可能值的选集来计算Th,所述选集例如(如果RA是正在讨论的文件的平均比特率)
[0066] R1=0.5RA
[0067] R2=0.7RA
[0068] R3=RA
[0069] R4=1.3RA
[0070] R5=2RA
[0071] 因此,每个分组h具有存储在其中的这五个预先计算的Th的值。如果需要(出于下面要讨论的目的),还可存储出现等式(8)中的最大值的相对时间位置,即,[0072] Δthmax=tjmax-th,其中,tjmax是等式8中的j的值,针对所述j的值获得了Th。
[0073] 在此情况下,在发送了帧n之后,该流程如下继续进行:
[0074] 112:询问发送器12以确定可用的传输率R;
[0075] 103A:-如果R与已针对其对Th进行了预先计算的速率之一相对应,则从存储器中读取该值;
[0076] 或者-如果R不那么对应,则从存储器中读取与速率R1...R5中的、小于R的实际-值的最高一个(R)相对应的Th的值(如果需要的话还读取thmax),并根据其估计Th:
[0077] 104A:应用测试Tn+1+Δ≤tn-t0,其中,Δ是固定的安全裕度;
[0078] 如前继续。
[0079] 可以简单地通过利用与R-相关联的值Th-来进行对Th的估计;这会行得通,但是因为这将过高估计Th,所以有时会导致接收方等待比所需更长的时间。另一选项是在为R1...R5中的位于实际值R的两侧的两个值所存储的Th的值之间进行线性(或其他)内插。然而,我们的优选方法是根据以下等式计算估计值:
[0080]
[0081] 其中R-是速率R1...R5中小于R的实际值的最高一个,Ti-是针对此速度预先计算的Th,Δtimax-是从ti起的、在其获得Ti-的时间(即,Δthmax-的伴随值)。如果该方法返回负值,则我们将其设置为零。
[0082] 要注意,这仅仅是估计,而Th是速率的非线性函数。但是使用该方法,T′i总是比真实值高并且自动提供了安全裕度(从而可以省略上面示出的裕度Δ)。
[0083] 要注意,这些等式对于以下情况有效:编码处理对一个帧产生两个或更多个分组(具有相等的ti)的情况;以及在使用双向预测的MPEG中遇到的情况,在该情况下,帧是按照需要对它们进行解码的顺序发送的,而不是按照ti的升序发送的。
[0084] 现在我们将描述一另选实施例,在该另选实施例中将计算转换为等同的形式,然而该形式不是针对每个分组单独地进行计算,而是利用已经为前一分组进行的计算。
[0085] 回忆等式(8):
[0086]
[0087] 可将其重写为
[0088]
[0089]
[0090]
[0091]
[0092] 假设Th+1≥0,其在文件的开始处为真,则这变为
[0093] Th=Th+1+Δεh (14)
[0094] 或者一般地
[0095] Ta+1=Ta-Δεa
[0096] Ta+2=Ta+1-Δεa+1=Ta-Δεa-Δεa+1
[0097]
[0098] 如果b=h-a,那么
[0099]
[0100] 代入 以及Δti=ti-ti-1
[0101]
[0102] 如果a=0,那么如果a=1,那么
[0103]
[0104] 考虑该测试
[0105] Th≤th-1-t0
[0106] 可将其写成
[0107]
[0108] 如果a=0,这变为
[0109]
[0110] 要注意,t-1是无意义的量(出现在不等式的两侧),从而其可被给予任何值,将t-1定义为与t0相等比较方便,据此我们获得
[0111]
[0112] (或者,如果a=1:则 )
[0113] 因此,可将等式(10)的测试
[0114] Th≤th-1-t0
[0115] 替代写为
[0116]
[0117] 那么第一次测试(h=1)为测试1:
[0118]
[0119] 或者,如果我们定义 则第一次测试为Z1≤0?
[0120] 第二次测试为Z2≤0
[0121] 第x次测试为Zx≤0
[0122] 但是
[0123] 因此,每次测试可以更新Z的前一值,如图5的流程图所示。首先,在步骤201,根据等式(8)计算T0,然后(步骤202)将Z0设置为与T0相等。在步骤203,重置分组计数器。然后(在步骤204),从存储器11中读取第一个分组(或者在随后的循环中读取下一分组)并将其发送到发送器12。在步骤205,控制单元计算Zn+1的值,并在步骤206进行关于是否Zn+1≤0的测试。如果通过了该测试,那么知道接收方一接收到该分组就开始解码是安全的。因此,在步骤207,控制单元向发送器发送“开始”消息,该消息要被发送到接收方。当接收方接收到该开始消息时,它开始解码。分组计数器在步骤208递增,并且控制返回到步骤204,在步骤204,发送器一准备好接收分组,就读出并发送另一分组。
[0124] 可以预先进行计算T0的步骤201并存储计算的值。当然可以将该过程按与先前所述的方式相类似的方式进行调整,以适应R的不同的值。
[0125] 该处理不必从T0开始。可以从T1开始(在该情况下第一次测试为T1≤0?),或者,如果有人总是选择缓冲至少两个(或更多个分组),则他可以从T2开始,等等。
[0126] 虽然针对经编码的视频给出了所述示例,但是可将相同的方法应用于经编码的音频或者实际上要实时播放的任何其他材料。
[0127] 如果希望,则在多速率系统中,可以将这些方法与在我们的国际专利申请WO04/086721中所描述的速率切换方法进行组合使用。