用于数据的鲁棒传输的多步幅包有效载荷映射的制作方法

    专利查询2022-07-08  129



    1.本公开涉及用于数据的鲁棒传输的多步幅包有效载荷映射。


    背景技术:

    2.当利用通过网络应用的数据传输工作时,存在两种主要类型的互联网协议(ip)业务,传输控制协议(tcp)和用户数据报协议(udp)。各个协议具有其自己的预期用途和优势。
    3.例如,tcp是公知的确认模式协议。这意味着,当交换数据时,内置反馈机制检查并确认数据是否被正确接收。如果任何数据缺失或丢失,则进一步的机制重传损坏或缺失的信息。这些机制使tcp特别适合于传送诸如静止图像、数据文件和网页等的信息。虽然这种可靠性使得tcp非常适合于这些用例,但是确实是有代价的。为了保证稳定性,各个客户端接收它们自己的tcp流(称为单播),这意味着如果网络上存在许多客户端,则经常复制数据。这些控制和反馈机制导致更大的协议开销,这意味着网络连接上宝贵的带宽的更大百分比被用于发送该附加控制信息。除了附加带宽开销之外,数据的重传可能导致延迟的增加,使得实时应用受到影响。
    4.另一方面,udp是无确认模式协议,这意味着没有主动机制来重传在交换期间已丢失的数据。因此,在某些场景下,与tcp相比,udp将是发送和接收数据的不良方式(例如,发送电子邮件或下载文件)。然而,其他因素使得udp对于实时通信是优越的。在不确认udp的情况下,占用可用于有用数据的宝贵空间的协议开销较少,从而使传输更快且更有效。


    技术实现要素:

    5.本文公开了用于数据的鲁棒传输的包有效载荷映射的实现。
    6.在第一方面,提供一种用于接收被分区成数据帧序列的数据的系统。所述系统包括:存储器、处理器以及网络接口。所述存储器存储所述处理器能够执行以使所述系统进行以下操作的指令:使用所述网络接口接收包,所述包各自分别包括来自所述数据帧序列的主帧以及一个或多于一个先前帧,其中,相应包的一个或多于一个先前帧与该相应包的主帧在帧序列中分开步幅参数的相应倍数;将包的帧存储在具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器中;从所述缓冲器读取第一帧作为来自所述缓冲器的所述条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已经丢失;以及响应于确定为包丢失,从所述缓冲器读取所述下一帧作为来自所述缓冲器的所述条目之一的先前帧。
    7.在第二方面,提供一种用于传输被分区成数据帧序列的数据的系统。所述系统包括:存储器、处理器以及网络接口。所述存储器存储所述处理器能够执行以使所述系统进行以下操作的指令:使用所述网络接口传输第一包,所述第一包包括来自所述数据帧序列的主帧以及一个或多于一个先前帧,其中,所述第一包的一个或多于一个先前帧与所述第一包的主帧在帧序列中分开步幅参数的相应倍数;以及使用所述网络接口传输第二包,所述第二包包括来自所述数据帧序列的主帧以及一个或多于一个先前帧,其中,所述第二包的
    一个或多于一个先前帧与所述第二包的主帧在帧序列中分开所述步幅参数的相应倍数,以及其中所述第一包的主帧是所述第二包的一个或多于一个先前帧之一。
    8.在第三方面,提供一种用于接收被分区成数据帧序列的数据的方法。该方法包括:使用网络接口接收包,各个包分别包括来自数据帧序列的主帧以及一个或多于一个先前帧,其中相应包的一个或多于一个先前帧与该相应包的主帧在帧序列中分开步幅参数的相应倍数;将包的帧存储在具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器中;从所述缓冲器读取第一帧作为来自所述缓冲器的条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已丢失;以及响应于确定为包丢失,从所述缓冲器读取下一帧作为来自所述缓冲器的条目之一的先前帧。
    9.在第四方面,提供一种用于传输被分区成数据帧序列的数据的方法。所述方法包括:使用网络接口传输第一包,所述第一包包括来自所述数据帧序列的主帧以及一个或多于一个先前帧,其中,所述第一包的一个或多于一个先前帧与所述第一包的主帧在帧序列中分开步幅参数的相应倍数;以及使用所述网络接口传输第二包,所述第二包包括来自所述数据帧序列的主帧以及一个或多于一个先前帧,其中,所述第二包的一个或多于一个先前帧与所述第二包的主帧在帧序列中分开所述步幅参数的相应倍数,以及其中,所述第一包的主帧是所述第二包的一个或多于一个先前帧之一。
    10.在第五方面,提供一种用于接收被分区成数据帧序列的数据的非暂时性计算机可读存储介质。该非暂时性计算机可读存储介质包括可执行指令,该可执行指令在由处理器执行时便于操作的执行,所述操作包括:使用网络接口接收包,各个包分别包括来自数据帧序列的主帧以及一个或多于一个先前帧,其中相应包的一个或多于一个先前帧与该相应包的主帧在帧序列中分开步幅参数的相应倍数;将包的帧存储在具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器中;从所述缓冲器读取第一帧作为来自所述缓冲器的条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已丢失;以及响应于确定为包丢失,从所述缓冲器读取下一帧作为来自所述缓冲器的条目之一的先前帧。
    11.在第六方面,提供一种用于传输被分区成数据帧序列的数据的非暂时性计算机可读存储介质。所述非暂时性计算机可读存储介质包括可执行指令,所述可执行指令在由处理器执行时便于操作的执行,所述操作包括:使用网络接口传输包括来自数据帧序列的主帧以及一个或多于一个先前帧的第一包,其中所述第一包的一个或多于一个先前帧与所述第一包的主帧在帧序列中分开步幅参数的相应倍数;以及使用网络接口传输第二包,所述第二包包括来自数据帧序列的主帧以及一个或多于一个先前帧,其中所述第二包的一个或多于一个先前帧与所述第二包的主帧在帧序列中分开步幅参数的相应倍数,并且其中所述第一包的主帧是所述第二包的一个或多于一个先前帧之一。
    12.在第七方面,提供一种用于接收被分区成数据帧序列的数据的系统。所述系统包括:存储器、处理器以及网络接口。所述存储器存储所述处理器能够执行以使所述系统进行以下操作的指令:使用所述网络接口接收包,所述包各自分别包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中,相应包的两个或多于两个先前帧其中至少之一与该相应包的主帧在帧序列中分开第一步幅参数的相应倍数,并且该相应包的两个或多于两个先前帧其中至少之一与该相应包的主帧在帧序列分开第二步幅参数的相应倍数,所述第
    二步幅参数不同于所述第一步幅参数;将包的帧存储在具有各自保持包的主帧以及两个或多于两个先前帧的条目的缓冲器中;从所述缓冲器读取第一帧作为来自所述缓冲器的所述条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已经丢失;以及响应于确定为包丢失,从所述缓冲器读取所述下一帧作为来自所述缓冲器的所述条目之一的先前帧。
    13.在第八方面,提供一种用于传输被分区成数据帧序列的数据的系统所述系统包括:存储器、处理器以及网络接口。所述存储器存储所述处理器能够执行以使所述系统进行以下操作的指令:使用网络接口传输第一包,所述第一包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中,所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第一步幅参数的相应倍数,并且所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第二步幅参数的相应倍数,所述第二步幅参数不同于所述第一步幅参数;以及使用所述网络接口传输第二包,所述第二包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中,所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第一步幅参数的相应倍数,并且所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第二步幅参数的相应倍数,以及其中,所述第一包的主帧是所述第二包的两个或多于两个先前帧之一。
    14.在第九方面,提供一种用于接收被分区成数据帧序列的数据的方法。所述方法包括:使用网络接口接收包,各个包分别包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中相应包的两个或多于两个先前帧其中至少之一与所述相应包的主帧在帧序列中分开第一步幅参数中的相应倍数,并且所述相应包的两个或多于两个先前帧其中至少之一与所述相应包的主帧在帧序列中分开第二步幅参数的相应倍数,所述第二步幅参数不同于所述第一步幅参数;将包的帧存储在具有各自保持包的主帧以及两个或多于两个先前帧的条目的缓冲器中;从所述缓冲器读取第一帧作为来自所述缓冲器的条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已经丢失;以及响应于确定为包丢失,从所述缓冲器读取下一帧作为来自所述缓冲器的条目之一的先前帧。
    15.在第十方面,提供一种用于传输被分区成数据帧序列的数据的方法。所述方法包括:使用网络接口传输第一包,所述第一包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第一步幅参数的相应倍数,并且所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第二步幅参数的相应倍数,所述第二步幅参数不同于所述第一步幅参数;以及使用所述网络接口传输第二包,所述第二包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第一步幅参数的相应倍数,并且所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第二步幅参数的相应倍数,以及其中所述第一包的主帧是所述第二包的两个或多于两个先前帧之一。
    16.在第十一方面,提供一种用于接收被分区成数据帧序列的数据的非暂时性计算机可读存储介质。所述非暂时性计算机可读存储介质包括可执行指令,所述可执行指令在由
    处理器执行时便于操作的执行,所述操作包括:使用网络接口接收包,各个包分别包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中相应包的两个或多于两个先前帧其中至少之一与所述相应包的主帧在帧序列中分开第一步幅参数的相应倍数,并且所述相应包的两个或多于两个先前帧其中至少之一与所述相应包的主帧在帧序列中分开第二步幅参数的相应倍数,所述第二步幅参数不同于所述第一步幅参数;将包的帧存储在具有各自保持包的主帧以及两个或多于两个先前帧的条目的缓冲器;从所述缓冲器读取第一帧作为来自所述缓冲器的条目之一的主帧;基于所述缓冲器确定为具有作为所述数据帧序列中的下一帧的主帧的包已经丢失;以及响应于确定为包丢失,从所述缓冲器读取下一帧作为来自所述缓冲器的条目之一的先前帧。
    17.在第十二方面,提供一种用于传输被分区成数据帧序列的数据的非暂时性计算机可读存储介质。所述非暂时性计算机可读存储介质包括可执行指令,所述可执行指令在由处理器执行时便于操作的执行,所述操作包括:使用网络接口传输第一包,所述第一包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第一步幅参数的相应倍数,并且所述第一包的两个或多于两个先前帧其中至少之一与所述第一包的主帧在帧序列中分开第二步幅参数的相应倍数,所述第二步幅参数不同于所述第一步幅参数;以及使用所述网络接口传输第二包,所述第二包包括来自所述数据帧序列的主帧以及两个或多于两个先前帧,其中所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第一步幅参数的相应倍数,并且所述第二包的两个或多于两个先前帧其中至少之一与所述第二包的主帧在帧序列中分开所述第二步幅参数的相应倍数,以及其中所述第一包的主帧是所述第二包的两个或多于两个先前帧之一。
    附图说明
    18.当结合附图阅读时,从以下详细描述中最佳地理解本公开。要强调的是,根据惯例,附图的各种特征不是按比例的。相反,为了清楚起见,各种特征的尺寸被任意地扩大或缩小。
    19.图1是使用用于数据的鲁棒传输的包有效载荷映射将成帧数据从服务器传送到一个或多于一个客户端装置的系统示例的框图。
    20.图2是使用用于数据的鲁棒传输的包有效载荷映射的包编码方案的示例的时序图。
    21.图3a和3b是具有各自保持包的主帧以及一个或多于一个先前帧的条目的环形缓冲器的示例的存储器映射图。
    22.图4是图1中所示的系统的计算装置的内部配置的示例的框图。
    23.图5是示出使用用于数据的鲁棒传输的包有效载荷映射来传输被分区成数据帧序列的数据的处理示例的流程图。
    24.图6是示出使用用于数据的鲁棒传输的包有效载荷映射来接收被分区成数据帧序列的数据的处理示例的流程图。
    25.图7是示出从具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器读取数据帧的处理示例的流程图。
    26.图8是被配置为使用用于数据的鲁棒传输的包有效载荷映射来接收被分区成数据帧序列的数据的计算装置中的数据流示例的框图。
    27.图9是示出在移除包有效载荷冗余之后将成帧数据传递通过重组缓冲器的处理示例的流程图。
    28.图10是示出使用用于数据的鲁棒传输的具有多个步幅的包有效载荷映射来传输被分区成数据帧序列的数据的处理示例的流程图。
    29.图11是示出使用用于数据的鲁棒传输的具有多个步幅的包有效载荷映射来接收被分区成数据帧序列的数据的处理示例的流程图。
    具体实施方式
    30.当通过实时数据传输的角度考虑时,udp由于没有开销和/或低延迟约束而成为优选的传输层协议。然而,缺乏重传带来了稳定性和可靠性的问题。通常,可以接受的是,当使用udp时会发生一些丢失(因此出现在音频中的爆裂音或出现在视频中的毛刺)。本文描述的包帧映射方案可以提供恢复这些丢失数据中的一些数据的方法。
    31.包帧映射提供了一种分配冗余数据以允许恢复使用udp时的数据丢失的方式。存在其他方法来实现这种类型的恢复(诸如前向纠错等),但是包帧映射可以使用不同的方式来分配和排序其冗余数据,这可以提供优于现有系统的优点。例如,实现用于传输成帧数据的包帧映射的系统对于包丢失的长突发(这在一些网络环境(诸如拥塞的高业务无线网络等)中可能是常见的)可能更具鲁棒性。
    32.当描述包帧映射方案时,有几个术语要定义。如本文所使用的,“步幅”是数据帧序列中被选择用于包括在给定包中的帧之间的帧数方面的间隔。例如,包帧映射方案的步幅可以对应于客户端装置在丢失映射图(map)大小的数据之后确信接收的顺序包的最小数量(例如,该方案被设计为从其完全恢复的最长包丢失突发)。可以基于接收到的包统计来选择该数量。
    33.如本文中所使用,“段”是指示集束到包中的冗余帧的数量的冗余参数。
    34.如本文使用的,包帧映射图的“长度”是相对于映射中具有零索引的当前帧的最低帧索引或最大绝对索引。例如,在音频流中,长度乘以帧大小是可以恢复多少音频。例如,对于具有64的长度和2.5ms的帧大小的包帧映射图,可以使用该映射恢复160ms音频。
    35.如本文所使用的,包映射图数据结构指示包映射方案的步幅和段,并且可以指定在网络或其他通信通道上编码的包有效载荷的结构。例如,服务器装置可以使用包映射图数据结构来创建和发送数据以解码包有效载荷并实例化用于接收包的缓冲器以利用冗余。例如,{0,-16,-32,-48,-64}是步幅为16和段为4的映射图。包帧映射可以被设计为在高包丢失事件之后恢复数据。还可以应对偶发包丢失;然而,在大的丢失事件中表现突出。例如,在扫描事件期间,ios装置将会丢失45-55个包,然后在再次丢失45-55个包之前接收16个包。在这种场景下,16的步幅和4的段将允许恢复高达64个包长的突发包丢失,从而使系统对ios扫描事件具有鲁棒性。
    36.利用这种样式的包帧映射图的包帧映射对于稳定的重复丢失模式在恢复上是特别好的。例如,当在移动装置上发生无线扫描时,无线卡离开其主通道并且跳到其他通道以进行快速扫描,从而搜索以查看是否存在要切换到的表现更好的通道。结果,可能发生看起
    来如下的模式:50个包丢失、20个包接收、50个包丢失、20个包接收、50个包丢失、20个包接收、等等。对于上下文,这是由于无线卡跳出主通道、扫描以及跳回。因此,丢失、接收、丢失模式。示例包帧映射图在该场景中允许完全恢复。
    37.与具有单个步幅的包帧映射图一样强大,存在对这种基于模式恢复的限制。例如,步幅16指示装置需要在丢失事件之后接收16个包以确保从最大支持包丢失事件完全恢复。在有噪声的无线环境中,以随机的无模式方式针对每对接收包而言丢失包可能是常见的。与无线扫描配对的这种类型的环境将导致单步幅包帧映射失败,除非显著地减少了其步幅。例如,步幅为4且长度为64的单步幅映射图:{0,-4,-8,-12,-16,-20,-24,-28,-32,-36,-40,-44,-48,-52,-56,-60,-64}必须使用16的大段,如图所示,这增加了包中帧的数量,并且因此增加了包帧映射图方案的网络带宽消耗。
    38.为了更好地应对偶然或偶发的包丢失,可以扩展包帧映射图以支持多个步幅。例如,短步幅(例如,1或2)可与较长步幅(例如,8或16)配对以应对具有不同分布的包丢失。包帧映射图中的各个步幅可具有指定采用该步幅的每个包的冗余帧的数量的相应段。
    39.在一些实现中,通过改变步幅,可以使用多步幅包帧映射图,这可以帮助很好地解决两种包丢失场景。例如,包帧映射图{0,-1,-2,-3,-4,-8,-16,-32,-48,-64}具有段为4的步幅1和段为5的步幅8,并且由于映射图开始时的小步幅将能够应对小频繁包丢失事件,同时由于大的长度值也能够恢复较大量的数据。每个包的冗余帧的总数量是跨包帧映射图中的所有步幅的段的总和,在该示例中,每个包为4 5=9个冗余帧。
    40.一种用于实现包帧映射方案的系统可以包括根据包映射图数据结构来封装和发送数据的服务器以及可以正确地解封装和利用冗余数据的客户端。在一些实现中,客户端装置使用两种单独类型的缓冲器:环形缓冲器和重组缓冲器。环形缓冲器的大小可以由步幅和段的大小确定。在本文的示例中,步幅是16并且段是4,因此环形缓冲器的大小可以被调整为存储来自(步幅
    ×
    段) 1个包=65个包的帧。在一些实现中,环形缓冲器的大小可以被调整为存储来自(步幅
    ×
    段)个包=64个包的帧,并且最新包或活动包(其承载作为存储在环形缓冲器中的最旧包的最新帧的帧的副本作为其最旧帧)可以存储在环形缓冲器之外,直到在最旧包已经从环形缓冲器中删除之后为止。例如,如果具有作为与持续时间2.5毫秒的音频信号相对应的音频数据的帧,并且缓冲器的大小被调整为恢复多达64个帧(例如,包映射图数据结构中的最低数量),则由缓冲方案引入的延迟将是2.5毫秒*64=160毫秒。例如,重组缓冲器的大小可以取决于步幅的大小(在这种情况下为16)。环形缓冲器的目的是接收和查明哪些数据已经丢失。然后,可以在重组缓冲器中重建数据,以允许正确地恢复和播放丢失的数据。
    41.图1是用于使用用于数据的鲁棒传输的包有效载荷映射将成帧数据从服务器传送到一个或多于一个客户端装置的系统100的示例的框图。系统100包括具有被配置为经由网络106发送和接收数据的网络接口104的服务器装置102。网络106可以包括例如互联网,以及/或者网络106可以是或包括局域网(lan)、广域网(wan)、虚拟专用网(vpn)或能够在计算装置(例如,客户端和服务器)之间传送数据的电子计算机通信的任何其他公共或专用部件。系统100的网络106或任何其他元件或元件的组合可以包括网络硬件,诸如路由器、交换机、负载平衡器、其他网络装置或其组合等。例如,网络106可以是wifi网络。例如,服务器装置102可以包括经由网络106将音频数据传输到客户端装置的音频服务器。在一些实现中,
    服务器装置102被配置为在体育场或其他场所中经由无线网络(例如,wifi网络)将现场音乐会或音乐表演的音频数据多播到音乐会观众的个人计算装置(例如,智能电话或平板电脑)。例如,服务器装置102可以包括经由网络106将视频数据传输到客户端装置的视频服务器。例如,服务器装置102可以包括经由网络106将文件传输到客户端装置的文件服务器。例如,服务器装置可以包括图4的计算装置400的组件。例如,服务器装置102可以实现图5的处理500。例如,服务器装置102可以实现图10的处理1000。
    42.系统100还包括客户端装置110和客户端装置112。客户端装置110包括被配置为经由网络106发送和接收数据的网络接口120。客户端装置112包括被配置为经由网络106发送和接收数据的网络接口122。客户端装置110包括环形缓冲器130,其可以用于便于使用用于数据的鲁棒传输的包有效载荷映射的成帧数据的接收。环形缓冲器130可以允许在包有效载荷映射中使用冗余来从传输期间的包丢失(包括潜在的长突发包丢失)中恢复。例如,环形缓冲器130可以包括各自保持包的主帧以及一个或多于一个先前帧的条目。在一些实现中,环形缓冲器130可以存储数据帧的多个副本,并且被配置为输出数据帧序列中的各个帧的单个副本。例如,可以基于包有效载荷映射方案的一个或多于一个参数(诸如步幅参数和/或冗余参数)来提供环形缓冲器130。例如,环形缓冲器130可以是图3a和3b的环形缓冲器302。类似地,客户端装置112包括环形缓冲器132,该环形缓冲器132可以用于便于使用用于数据的鲁棒传输的包有效载荷映射的成帧数据的接收。例如,环形缓冲器132可以是图3a和3b的环形缓冲器302。例如,客户端装置110可以包括图4的计算装置400的组件。例如,客户端装置112可以包括图4的计算装置400的组件。例如,客户端装置110和客户端装置112可以实现图6的处理600。例如,客户端装置110和客户端装置112可以实现图11的处理1100。
    43.服务器装置102被配置为传输包括包140的包,包140包括在帧序列中由包有效载荷映射方案的步幅参数所确定的帧数间隔的一个或多于一个冗余数据帧。例如,在步幅参数为5且冗余参数为3的包有效载荷映射方案中,包140可以包括具有帧索引i的主帧、具有帧索引i-5的先前帧、具有帧索引i-10的先前帧和具有帧索引i-15的先前帧。例如,图2的包编码方案200可以用于对由服务器装置102传输的包140和其他包进行编码。在一些实现中,包140由服务器装置102多播到客户端装置110和客户端装置112。在一些实现中,包140由服务器装置102广播到网络106上的所有装置。在一些实现中,包140由服务器装置102单播到客户端装置110。注意,为了简单起见,图1中示出了两个客户端装置110和112,但是服务器装置102可以支持更多的客户端装置。
    44.图2是使用用于数据的鲁棒传输的包有效载荷映射的包编码方案200的示例的时序图。包编码方案200使用步幅参数5,这意味着包括在包中的帧在数据帧序列中彼此间隔5个帧。包编码方案200使用冗余参数3,这意味着包包括根据步幅参数间隔的主(例如,最近)帧和三个先前帧,这三个先前帧可以已经在先前包中作为主帧和/或作为先前帧传输。
    45.所传输的第一包是包零210,其包括具有帧索引0的主帧212、具有帧索引-5的先前帧214(即,在帧0之前的五个帧)、具有帧索引-10的先前帧216以及具有帧索引-15的先前帧218。所传输的第二包是包一220,其包括具有帧索引1的主帧222、具有帧索引-4的先前帧224、具有帧索引-9的先前帧226以及具有帧索引-14的先前帧228。所传输的第三包是包二230,其包括具有帧索引2的主帧232、具有帧索引-3的先前帧234、具有帧索引-8的先前帧236和具有帧索引-13的先前帧238。所传输的第四包是包三240,其包括具有帧索引3的主帧
    242、具有帧索引-2的先前帧244、具有帧索引-7的先前帧246和具有帧索引-12的先前帧248。所传输的第五包是包四250,其包括具有帧索引4的主帧252、具有帧索引-1的先前帧254、具有帧索引-6的先前帧256以及具有帧索引-11的先前帧258。
    46.例如,包编码方案200使得能够基于五个连续包(即,步幅连续包)的接收来恢复多达15个包(即,步幅乘以冗余)的突发包丢失。例如,包编码方案200可以很好地适合于易于发生长突发包丢失的网络环境。
    47.图3a示出具有各自保持包的主帧以及一个或多于一个先前帧的条目310-340的环形缓冲器302的示例存储器映射图300。在该示例中,环形缓冲器302的大小被调整为支持具有步幅参数5和为冗余参数3的包有效载荷映射方案(例如,图2的包编码方案200)。存储器映射图300的外环表示针对各个包存储的主帧。存储器映射图300的三个内环表示针对各个包存储的先前帧。在存储器映射图300中,环形缓冲器302的条目310对应于具有当前存储在环形缓冲器302中的帧的最旧包。环形缓冲器302的条目340对应于具有当前存储在环形缓冲器302中的帧的最新包。条目310是要被评估以从环形缓冲器302读取下一数据帧的下一条目。由于条目310存储具有索引0的帧的有效副本作为其主帧(即,成功接收到相应包),因此可以从环形缓冲器302的条目310读取具有索引0的帧作为主帧。响应于从环形缓冲器302读取条目310的主帧,可以删除条目310(例如,可以释放存储器位置以供重用)。注意,条目340在其最旧(最内)的先前帧时隙中包括具有索引0的帧的副本。通过等待直到接收到对应于条目340的包以读取以该帧作为主帧的条目310,使得在从环形缓冲器302读取时具有索引零的帧的有效副本的机会最大化。因此,环形缓冲器302的大小可以被调整为存储来自等于(步幅
    ×
    冗余) 1的数量的(即,在该示例中为16个)包的帧。对于实时媒体传输(例如,音频或视频),该缓冲方案可能引入与帧持续时间(例如,2.5毫秒或5毫秒)乘以步幅参数乘以冗余参数相对应的算法延迟。
    48.例如,环形缓冲器302可以被实现为循环缓冲器。在一些实现中,环形缓冲器302可以从抖动缓冲器输出的包获取输入,并且环形缓冲器302可以作为先进先出(fifo)缓冲器操作。
    49.图3b示出具有各自保存包的主帧以及一个或多于一个先前帧的条目的环形缓冲器302的存储器映射图350。存储器映射图350示出在比图3a的存储器映射图300中的状态晚的时间处的环形缓冲器302。条目310已被更新以存储已接收的最新包的帧。该最新包包括具有帧索引16的主帧。现在,条目312对应于应该将帧存储在环形缓冲器302中的最旧包。然而,对应于条目312的包已丢失(例如,损坏或以其他方式丢失)。因此,具有索引1的帧序列上的下一帧不可用作条目312中的主帧。代替地,可以在环形缓冲器302中搜索该下一帧的有效副本以供读出。在该示例中,存在条目332和条目310中作为先前帧存储在环形缓冲器中的具有索引1的帧的两个有效副本。然后可以从环形缓冲器302读取具有索引1的帧的这些副本之一作为先前帧。图4是图1中所示的系统的计算装置400的(诸如服务器装置102、客户端装置110和/或客户端装置112等)内部配置的示例的框图。例如,客户端装置和/或服务器装置可以是包括多个计算装置和/或单个计算装置(诸如移动电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机、服务器计算机和/或其他合适的计算装置等)的计算系统。计算装置400可以包括组件和/或单元,诸如处理器402、总线404、存储器406、外围设备414、电源416、网络通信单元418、用户接口420、其他合适的组件和/或其任何组合等。
    50.处理器402可以是中央处理单元(cpu)(诸如微处理器等),并且可以包括具有单个或多个处理核的单个或多个处理器。可替代地,处理器402可以包括现在存在的或以后开发的能够操纵或处理信息的其他类型的装置或多个装置。例如,处理器402可以包括以任何方式互连(包括硬连线和/或联网,包括无线联网)的多个处理器。在一些实现中,处理器402的操作可以分布在可以直接耦接或跨局域网或其他类型的网络耦接的多个物理装置和/或单元上。在一些实现中,处理器402可以包括用于操作数据和/或指令的本地存储的高速缓存或高速缓冲存储器。处理器402的操作可以分布在多个机器上,这些机器可以直接耦接或跨局域网或其他类型的网络耦接。
    51.存储器406可以包括易失性存储器、非易失性存储器和/或其组合。例如,存储器406可以包括易失性存储器(诸如一个或多于一个dram模块(诸如ddr sdram等))以及非易失性存储器(诸如磁盘驱动器、固态驱动器、闪存、相变存储器(pcm)和/或能够持久电子信息存储的任何形式的非易失性存储器(诸如在不存在有源电源的情况下等))。存储器406可以包括现在存在或以后开发的能够存储用于由处理器402处理的数据和/或指令的其他类型的装置或多个装置。处理器402可以经由总线404访问和/或操纵存储器406中的数据。尽管在图4中被示出为单个块,但是存储器406可以被实现为多个单元。例如,计算装置400可以包括易失性存储器(诸如ram等)和持久性存储器(诸如硬盘驱动器或其他存储装置等)。存储器406可以分布在多个机器上,诸如基于网络的存储器或者进行客户端和/或服务器的操作的多个机器中的存储器等。
    52.存储器406可以包括可执行指令408、数据(诸如应用数据410等)、操作系统412或其组合以供处理器402立即访问。可执行指令408可以包括例如一个或多于一个应用程序,其可以全部或部分地从非易失性存储器加载和/或复制到易失性存储器以由处理器402执行。可执行指令408可以被组织成可编程模块和/或算法、功能程序、代码、代码段和/或其组合,以进行本文描述的各种功能。例如,存储器406可以包括可由处理器402执行以使包括计算装置400的系统实现图5的处理500、图6的处理600、图10的处理1000或图11的处理1100的指令。
    53.应用数据410可以例如包括:用户文件;数据库目录和/或词典;诸如web浏览器、web服务器、数据库服务器等的功能程序的配置信息;和/或其组合。操作系统412可以例如是:microsoftmac os或用于诸如智能电话或平板装置等的小装置的操作系统;或用于诸如大型计算机等的大装置的操作系统。存储器406可以包括一个或多于一个装置,并且可以利用一种或多种类型的诸如固态或磁存储装置等的存储装置。
    54.外围设备414可以经由总线404耦接到处理器402。外围设备可以是传感器或检测器、或者包含任何数量的传感器或检测器的装置,其可以监视计算装置400本身和/或计算装置400周围的环境。例如,计算装置400可以包含地理空间位置识别单元,诸如全球定位系统(gps)位置单元等。作为另一示例,计算装置400可以包含用于测量计算装置400的组件(诸如处理器402等)的温度的温度传感器。如可以预期的,其他传感器或检测器可以与计算装置400一起使用。在一些实现中,客户端和/或服务器可以省略外围设备414。在一些实现中,电源416可以是电池,并且计算装置400可以独立于外部配电系统操作。计算装置400的任何组件(诸如外围设备414或电源416等)可以经由总线404与处理器402通信。尽管这里被描绘为单个总线,但是总线404可以由多个总线组成,这些总线可以通过各种桥接器、控制
    器和/或适配器彼此连接。
    55.网络通信单元418也可以经由总线404耦接到处理器402。在一些实现中,网络通信单元418可以包括一个或多于一个收发器。网络通信单元418经由网络接口提供到网络(诸如网络106等)的连接或链路,该网络接口可以是有线网络接口(诸如以太网等)或无线网络接口。例如,计算装置400可以使用一个或多于一个网络协议(诸如以太网、tcp、ip、电力线通信(plc)、wifi、红外、gprs、gsm、cdma或其他合适的协议等)经由网络通信单元418和网络接口与其他装置通信。
    56.用户接口420可以包括:显示器;位置输入装置,诸如鼠标、触摸板、触摸屏等;键盘;和/或任何其他人机接口装置。用户接口420可以经由总线404耦接到处理器402。除了显示器之外或作为显示器的替代,可以提供允许用户编程或以其他方式使用计算装置400的其他接口装置。在一些实现中,用户接口420可以包括显示器,该显示器可以是液晶显示器(lcd)、阴极射线管(crt)、发光二极管(led)显示器(例如,oled显示器)或其他合适的显示器。用户接口420可以包括被配置为将电子音频数据转换为媒介(例如,空气)中的声音的音频驱动器(例如,扬声器)。例如,用户接口420的扬声器可用于播放音频数据(例如,编码音乐或语音信号)。
    57.图5是示出用于使用用于数据的鲁棒传输的包有效载荷映射来传输被分区成数据帧序列的数据的处理500的示例的流程图。处理500包括:传输502指示步幅参数和冗余参数的包映射图数据结构;对于数据帧序列,从序列中选择510下一帧作为用于传输的主帧,并且传输520包,该包包括主帧以及与步幅参数相对应的在所述数据帧序列中的间隔处的一个或多于一个先前帧;当(在操作525处)最后帧已经作为主帧被传输520时,传输530包,该包包括序列的最后帧之后的与下一序列索引相对应的虚主帧以及相对于虚索引的步幅间隔处的一个或多于一个先前帧,直到(在操作535处)帧序列的最后帧已经被传输了等于一加冗余参数的次数为止;以及结束540数据传输。例如,图5的处理500可以由图1的服务器装置102实现。例如,图5的处理500可以由图4的计算装置400实现。
    58.处理500包括传输502包映射图数据结构,该包映射图数据结构用于指示步幅参数并指示在包括来自数据帧序列的帧的包集合的各个包中要传输的冗余先前帧的计数。步幅参数可以指定帧序列中的在多个包的包中所包括的主包与一个或多于一个先前包之间的间隔。在一些实现中,步幅参数大于四。冗余先前帧的计数可称为包有效载荷映射方案的冗余参数。例如,包映射图数据结构可以包括作为相应先前帧的帧索引偏移的整数的列表,其中针对各个先前帧具有一个整数(例如,对于具有步幅5及冗余3的方案为{-5、-10、-15},或者对于具有步幅16及冗余4的方案为{-16、-32、-48、-64})。在一些实现中,包映射图数据结构包括分别表示步幅参数和冗余参数的两个正整数。可以使用网络接口(例如,网络接口104)传输502包映射图数据结构。在一些实现中,在数据帧开始被传输520之前,在单独的包中传输502包映射图数据结构一次。在一些实现中,包映射图数据结构作为用于传输帧序列的包集合中的各个包的头部的一部分来传输502。例如,数据帧序列可以是音频数据的帧序列(例如,编码音乐或语音信号)。例如,数据帧序列可以是视频数据帧序列。
    59.处理500包括选择510下一帧作为用于在下一包中传输的主帧。例如,可以初始化下一帧指针或计数器以指向数据帧序列的开始处的帧,并且可以递增或以其他方式更新帧指针或计数器以选择510用于传输的下一帧作为主帧。
    60.处理500包括传输520包括来自数据帧序列的主帧(例如,当前选择510的帧)以及一个或多于一个先前帧的包。第一包的一个或多于一个先前帧与第一包的主帧在帧序列中分开步幅参数的相应倍数(例如,如针对步幅参数5的包编码方案200所示)。例如,可以使用网络接口(例如,网络接口104)传输520包。在一些实现中,包的一个或多于一个先前帧包括来自数据帧序列的两个或多于两个先前帧。包可以包括其他数据(诸如头部数据(例如,ipv6头部和udp头部)),以促成包跨网络(例如,网络106)的传输。如果(在操作525处)在数据帧序列中存在更多帧要传输,则可以选择510下一帧,并将其作为另一包中的主帧连同相对于新主帧的一个或多于一个相应的先前帧一起传输520。当处理500启动时,在帧序列中没有相应的较早帧要重传的情况下,可以从包中省略一个或多于一个先前帧。在已传输与步幅参数相对应的多个包之后,先前已在较早包(例如,第一包)中作为主帧传输的帧可在较晚包(例如,第二包)中作为先前帧重传。例如,处理500可以包括使用网络接口传输520第二包,该第二包包括来自数据帧序列的主帧以及一个或多于一个先前帧,其中第二包的一个或多于一个先前帧与第二包的主帧在帧序列中分开步幅参数的相应倍数,并且其中第一包的主帧是第二包的一个或多于一个先前帧之一。在一些实现中,处理500包括使用网络接口传输520数据帧序列中的第一包的主帧和第二包的主帧之间的所有帧作为相应包的主帧,包各自包括来自数据帧序列的一个或多个先前帧,该一个或多个先前帧在帧序列中分开步幅参数的倍数。可以经由网络将包传输520到一个或多于一个客户端装置。例如,第一包和第二包可以是广播包。例如,第一包和第二包可以是多播包。在一些实现中,数据帧序列中的帧全部为相同大小。
    61.当(在操作525处)帧序列中的所有帧已经作为相应包的主帧被传输520时,可以传输530一个或多于一个包,该一个或多于一个包包括采用该步幅的序列的最后帧之后的与下一序列索引相对应的虚主帧(或省略主帧)以及相应先前帧,直到(在操作535处)将所有帧作为先前帧已经被传输与步幅参数相对应的次数。当(在操作535处)序列的所有帧已经作为先前帧被传输冗余参数次数时,则数据帧序列的传输结束540。
    62.图6是示出使用用于数据的鲁棒传输的包有效载荷映射来接收被分区成数据帧序列的数据的处理600的示例的流程图。处理600包括:接收610指示步幅参数和冗余参数的包映射图数据结构;接收620包,包各自根据步幅参数分别包括来自数据帧序列的主帧以及一个或多于一个先前帧;将包的帧存储630在具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器中;以及从缓冲器读取640帧以在缓冲器的输出处获得帧的单个副本。例如,图6的处理600可以由图1的客户端装置110实现。例如,图6的处理600可以由图4的计算装置400实现。
    63.处理600包括使用网络接口接收610包映射图数据结构,该包映射图数据结构指示步幅参数并指示在各个包中要传输的冗余先前帧的计数。步幅参数可以指定帧序列中的在多个包的包中所包括的主包与一个或多于一个先前包之间的间隔。在一些实现中,步幅参数大于四。冗余先前帧的计数可以称为包有效载荷映射方案的冗余参数。例如,包映射图数据结构可以包括作为相应先前帧的帧索引偏移的整数的列表,其中针对各个先前帧具有一个整数(例如,对于具有步幅5及冗余3的方案为{-5、-10、-15},或者对于具有步幅16及冗余4的方案为{-16、-32、-48、-64})。在一些实现中,包映射图数据结构包括分别表示步幅参数和冗余参数的两个正整数。例如,可以使用网络接口(例如,网络接口120)来接收610包映射
    图数据结构。在一些实现中,在数据帧开始被接收620之前,在单独的包中接收610包映射图数据结构一次。在一些实现中,包映射图数据结构作为用于传输帧序列的包集合中的各个包的头部的一部分来接收610。例如,数据帧序列可以是音频数据帧序列(例如,编码音乐或语音信号)。例如,数据帧序列可以是视频数据帧序列。
    64.处理600包括接收620包,包各自分别包括来自数据帧序列的主帧以及一个或多于一个先前帧。相应包的一个或多于一个先前帧与该相应包的主帧在帧序列中分开步幅参数的相应倍数(例如,如针对步幅参数5的包编码方案200所示)。例如,可以使用网络接口(例如,网络接口120)来接收620包。在一些实现中,各个相应包的一个或多于一个先前帧包括等于冗余参数的数量的先前帧,并且冗余参数大于1。可以经由网络从一个或多于一个服务器装置(例如,服务器装置102)接收620包。
    65.处理600包括将包的帧存储630在缓冲器(例如,环形缓冲器302)中,该缓冲器具有各自保持包的主帧以及一个或多于一个先前帧的条目。在一些实现中,各个相应包的一个或多于一个先前帧包括等于冗余参数的数量的先前帧,并且其中缓冲器的大小被调整为存储来自等于步幅参数乘以冗余参数加1的数量的包的帧。在一些实现中,所接收620的包可以在来自包的有效载荷的帧存储630在缓冲器中之前通过抖动缓冲器。例如,处理600可以包括:在接收620到包时将包存储在抖动缓冲器中;以及在将包的帧存储630在缓冲器中之前,从抖动缓冲器读取包。在一些实现中,数据帧序列中的帧全部为相同大小。
    66.处理600包括从缓冲器(例如,环形缓冲器302)读取640帧。例如,可以实现图7的处理700以从缓冲器读取640帧。在一些实现中,来自序列的数据帧包括音频数据,并且处理600包括响应于从缓冲器读取帧而播放帧的音频数据。在一些实现中,从缓冲器读取640的数据帧在重组缓冲器(例如,图8的重组缓冲器820)中以数据帧序列重组。例如,可以实现图9的处理900以重组数据帧序列,从而便于播放音频数据。
    67.图7是示出从具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器中读取数据帧的处理700的示例的流程图。处理700包括:基于缓冲器来确定710具有作为数据帧序列中的下一帧的主帧的包是否已丢失;当(在操作715处)包尚未丢失时,从缓冲器读取720帧作为来自缓冲器的条目之一的主帧;当(在操作715处)包已丢失时,在缓冲器中找到740下一帧的冗余副本作为缓冲器中的较新条目的先前帧,并且从缓冲器读取750下一帧作为条目的先前帧;以及当(在操作755处)帧序列中没有更多帧要读取时,结束760数据接收。例如,图7的处理700可以由图1的客户端装置110实现。例如,图7的处理700可以由图4的计算装置400实现。
    68.处理700包括基于缓冲器(例如,环形缓冲器302)确定为710具有作为数据帧序列中的下一帧的主帧的包已经丢失。例如,可以检查缓冲器中的最旧条目以确定710对应于最旧条目的包是否丢失。在一些实现中,条目包括指向来自接收到的包的有效数据的指针,或者如果相应的包丢失则包括空指针。在一些实现中,缓冲器包括条目当前是否存储有效数据帧的指示(例如,标志),其可以在来自所接收包的数据存储在条目中时设置并且在条目被删除730(例如,在读取主帧之后)时重置。在一些实现中,确定为710包已经丢失包括对存储在与关注包相对应的条目中的数据进行数据完整性校验(例如,循环冗余校验(crc))。
    69.处理700包括:当(在操作715处)包尚未丢失时,从缓冲器读取720帧(例如,第一帧)作为来自缓冲器的条目之一的主帧。处理700包括:响应于正在从缓冲器读取720缓冲器
    的条目(例如,第一条目)的主帧,从缓冲器删除730该条目。例如,可以通过释放条目的存储器以供重用(例如,存储新接收的包的帧)来删除730该条目。
    70.处理700包括:当(在操作715处)包已丢失时,找到740缓冲器中的下一帧的冗余副本作为缓冲器中的较新条目的先前帧。例如,可以存在多达存储在缓冲器中的帧的冗余参数副本作为较晚包的先前帧(例如,如环形缓冲器302的内环所示并且如关于图3a-3b所讨论的)。可以检查与在包有效载荷映射方案下承载作为先前帧的帧的包相对应的这些条目中的一个或多于一个条目,以找到740该帧的有效副本。处理700包括:响应于确定为包丢失,从缓冲器读取750下一帧作为来自缓冲器的条目之一的先前帧。尽管在图7中未明确示出,但是处理700可以通过返回错误消息以及/或者基于数据帧序列中的较早和/或较晚数据对丢失数据进行插值来应对没有成功接收到帧的副本并且在缓冲器中没有找到740副本的情况。
    71.当(在操作755处)在数据帧序列中不再有要读取的帧时,可以结束760数据接收。
    72.图8是被配置为使用用于数据的鲁棒传输的包有效载荷映射来接收被分区成数据帧序列的数据的计算装置中的数据流800的示例的框图。包源802输出包,包各自分别包括来自数据帧序列的主帧以及一个或多于一个先前帧。相应包的一个或多于一个先前帧与该相应包的主帧在帧序列中分开步幅参数的相应倍数(例如,如针对步幅参数5的包编码方案200所示)。例如,包源可以是经由网络(例如,网络106)从服务器装置(例如,服务器装置102)接收包的网络通信单元(例如,网络通信单元418)。在一些实现中,包源802包括被配置为以传输的顺序输出包的抖动缓冲器。
    73.数据流800包括具有各自保持包的主帧以及一个或多于一个先前帧的条目的缓冲器(例如,环形缓冲器302)。先前帧可以是在较早的包中作为主帧发送的帧的冗余副本。因此,缓冲器810可以存储数据帧序列中的帧的多个副本(例如,如关于图3a-3b所讨论的)。该冗余可以使数据流800对包源802中的大量突发包丢失具有鲁棒性。
    74.数据流800包括具有各自保持数据帧序列的帧的条目的重组缓冲器820。可以从缓冲器810读取帧的单个副本并将其写入重组缓冲器820以移除用于在有噪声网络上传输的冗余和/或适当地对帧进行排序,从而将帧重组成可用形式的源数据(例如,重组被分区成帧的文件或对音频或视频数据的较大超帧进行排队以在用户接口中播放)。例如,重组缓冲器820可以具有与等于步幅参数的数量的帧相对应的大小。在使用多步幅包帧映射图的一些实现中,重组缓冲器820的大小可以被调整为存储等于所接收包使用的包帧映射图的最大步幅参数的数量的帧。例如,重组缓冲器820可以是先进先出(fifo)缓冲器。例如,重组缓冲器820可以被实现为循环缓冲器。
    75.数据流800包括消耗来自重组缓冲器820的成帧数据的数据宿822。例如,数据宿822可以包括用于播放帧中的音频数据的音频驱动器(例如,包括扬声器)。例如,数据宿822可以是非易失性存储器中的写入有成帧数据的文件。
    76.图9是示出用于在移除包有效载荷冗余之后将成帧数据传递通过重组缓冲器的处理900的示例的流程图。处理900包括:播放910存储在来自重组缓冲器的最旧帧中的音频数据;从重组缓冲器中删除920最旧帧;以及将从缓冲器读取的帧写入930重组缓冲器。例如,图9的处理900可以由图1的客户端装置110实现。例如,图9的处理900可以由图4的计算装置400实现。
    77.处理900包括播放910存储在来自重组缓冲器(例如,重组缓冲器820)的最旧帧中的音频数据。例如,可以使用用户接口420的音频驱动器(例如,扬声器)来播放910音频数据。处理900包括从重组缓冲器中删除920最旧帧。例如,可以通过释放条目的存储器以供重用(例如,通过更新重组缓冲器的指针或计数器)来删除920该条目。
    78.处理900包括将从缓冲器(例如,缓冲器810)读取的帧(例如,包括第一帧和下一帧)写入到重组缓冲器(例如,该重组缓冲器)。重组缓冲器可以包括各自由数据帧序列中的帧组成的条目。在一些实现中,重组缓冲器的大小被调整为存储等于步幅参数的数量的帧。
    79.图10是示出使用用于数据的鲁棒传输的具有多个步幅的包有效载荷映射来传输被分区成数据帧序列的数据的处理1000的示例的流程图。处理1000包括:传输1002包映射图数据结构,该包映射图数据结构指示多个步幅参数和相应冗余参数(例如,步幅和相应的段);对于数据帧序列,选择1010来自序列的下一帧作为用于传输的主帧,并且传输1020包,该包包括主帧以及与多个步幅参数相对应的在数据帧序列中的间隔处的两个或多于两个先前帧;当(在操作1025处)最后帧已作为主帧被传输1020时,传输1030包,该包包括序列的最后帧之后的与下一序列索引相对应的虚主帧以及相对于虚索引的步幅间隔处的一个或多于一个先前帧,直到(在操作1035处)帧序列的最后帧已被传输了等于一加针对多个步幅参数的冗余参数的总和的次数为止;以及结束1040数据传输。例如,图10的处理1000可以由图1的服务器装置102实现。例如,图10的处理1000可以由图4的计算装置400实现。
    80.处理1000包括传输1002包映射图数据结构,该包映射图数据结构指示包括第一步幅参数和第二步幅参数的多个步幅参数,并且指示在包括来自数据帧序列的帧的包集合中的各个包中要传输的针对各个步幅参数的冗余先前帧的计数。各个步幅参数可以指定帧序列中的在多个包的包中所包括的主包与一个或多于一个先前包之间的间隔。在一些实现中,第一步幅参数小于3且第二步幅参数大于4。冗余先前帧的计数可以称为针对包有效载荷映射方案的相应步幅参数的冗余参数。例如,包映射图数据结构可以包括作为相应先前帧的帧索引偏移的整数的列表,其中针对各个先前帧具有一个整数(例如,对于具有相应冗余2的第一步幅1和具有相应冗余3的第二步幅5的方案为{-1、-2、-5、-10、-15},或者对于具有相应冗余3的第一步幅2和具有相应冗余4的第二步幅16的方案为{-2、-4、-6、-16、-32、-48、-64})。在一些实现中,包映射图数据结构包括分别表示步幅参数及其相应冗余参数的针对各个步幅参数的两个正整数。可以使用网络接口(例如,网络接口104)传输1002包映射图数据结构。在一些实现中,在数据帧开始被传输1020之前,包映射图数据结构在单独的包中被传输1002一次。在一些实现中,包映射图数据结构作为用于传输帧序列的包集合中的各个包的头部的一部分被传输1002。例如,数据帧序列可以是音频数据帧序列(例如,编码音乐或语音信号)。例如,数据帧序列可以是视频数据帧序列。
    81.处理1000包括选择1010下一帧作为用于在下一包中传输的主帧。例如,可以初始化下一帧指针或计数器以指向数据帧序列的开始处的帧,并且可以递增或以其他方式更新帧指针或计数器以选择1010下一帧作为主帧以供传输。
    82.处理1000包括传输1020包(例如,第一包),该包包括来自数据帧序列的主帧(例如,当前所选择1010的帧)以及两个或多于两个先前帧。可以基于由包映射图数据结构所指定的多步幅包帧映射图从数据帧序列中选择两个或多于两个先前帧以供包括在包中。在一些实现中,包的两个或多于两个先前帧其中至少之一与该包的主帧在帧序列中分开第一步
    幅参数的相应倍数,并且包的两个或多于两个先前帧其中至少之一与该包的主帧在帧序列中分开与第一步幅参数不同的第二步幅参数的相应倍数。例如,可以使用网络接口(例如,网络接口104)传输1020包。在一些实现中,可以在各个包中使用多于两个步幅。例如,包的两个或多于两个先前帧其中至少之一与包的主帧在帧序列中分开与第一步幅参数和第二步幅参数不同的第三步幅参数的相应倍数。包可以包括其他数据,诸如头部数据(例如,ipv6头部和udp头部),以便于包的跨网络(例如,网络106)的传输。
    83.如果(在操作1025处)数据帧序列中存在要传输的更多帧,则可以选择1010下一个帧并将其作为另一包中的主帧连同相对于新主帧的一个或多于一个相应的先前帧一起传输1020。当处理1000启动时,在帧序列中不存在相应的较早帧要重传的情况下,可以从包中省略先前帧中的一个或多于一个。在已经传输对应于步幅参数的多个包之后,先前在较早包(例如,第一包)中作为主帧传输的帧可以作为较晚包(例如,第二包)中的先前帧来重传。例如,处理1000可以包括使用网络接口传输1020第二包,第二包包括来自数据帧序列的主帧以及两个或多于两个先前帧,其中第二包的两个或多于两个先前帧其中至少之一与第二包的主帧在帧序列中分开第一步幅参数的相应倍数,并且第二包的两个或多于两个先前帧其中至少之一与第二包的主帧在帧序列中分开第二步幅参数的相应倍数,并且其中第一包的主帧是第二包的两个或多于两个先前帧中的一个。在一些实现中,处理1000包括使用网络接口将数据帧序列中的第一包的主帧与第二包的主帧之间的所有帧作为相应包的主帧传输1020,包各自包括来自数据帧序列的在帧序列中分开第一步幅参数和第二步幅参数的倍数的两个或多于两个先前帧。包可以经由网络传输1020到一个或多于一个客户端装置。例如,第一包和第二包可以是广播包。例如,第一包和第二包可以是多播包。在一些实现中,数据帧序列中的帧全部为相同大小。
    84.当(在操作1025处)帧序列的所有帧已经作为相应包的主帧被传输1020时,可以传输1030一个或多于一个包,该一个或多于一个包包括采用该步幅的序列的最后帧之后的与下一序列索引相对应的虚主帧(或省略主帧)以及相应先前帧,直到(在操作1035处)所有帧作为先前帧已经被传输了与包映射图数据结构的总冗余参数(例如,相应步幅的段)相对应的次数为止。当(在操作1035处)序列的所有帧已经在包帧映射图的每个冗余时隙中传输时,则数据帧序列的传输结束1040。
    85.图11是示出使用用于数据的鲁棒传输的具有多个步幅的包有效载荷映射来接收被分区成数据帧序列的数据的处理1100的示例的流程图。处理1100包括:接收1110包映射图数据结构,该包映射图数据结构指示多个步幅参数和相应的冗余参数(例如,步幅和相应的段);接收1120包,包各自分别包括来自数据帧序列的主帧以及与多个步幅参数相对应的在数据帧序列中的间隔处的两个或多于两个先前帧;将包的帧存储1130在缓冲器中,该缓冲器具有各自保持包的主帧以及两个或多于两个先前帧的条目;以及从缓冲器读取1140帧,以在缓冲器的输出处获得帧的单个副本。例如,图11的处理1100可以由图1的客户端装置110实现。例如,图11的处理1100可以由图4的计算装置400实现。
    86.处理1100包括接收1110包映射图数据结构,该包映射图数据结构指示包括第一步幅参数和第二步幅参数的多个步幅参数,并且指示在包括来自数据帧序列的帧的包集合的各个包中要传输的针对各个步幅参数的冗余先前帧的计数。各个步幅参数可以指定帧序列中的在多个包的包中所包括的主包与一个或多于一个先前包之间的间隔。在一些实现中,
    第一步幅参数小于3,并且第二步幅参数大于4。冗余先前帧的计数可以被称为包有效载荷映射方案的针对相应步幅参数的冗余参数(例如,段)。例如,包映射图数据结构可以包括作为相应的先前帧的帧索引偏移的整数列表,其中针对各个先前帧具有一个整数(例如,对于具有相应冗余2的第一步幅1和具有相应冗余3的第二步幅5的方案为{-1,-2,-5,-10,-15},或者对于具有相应冗余3的第一步幅2和具有相应冗余4的第二步幅16的方案为{-2,-4,-6,-16,-32,-48,-64})。在一些实现中,包映射图数据结构包括分别表示步幅参数及其相应冗余参数的针对各个步幅参数的两个正整数。例如,可以使用网络接口(例如,网络接口120)来接收1110包映射图数据结构。在一些实现中,在开始接收1120数据帧之前,在单独的包中接收1110包映射图数据结构一次。在一些实现中,包映射图数据结构作为用于传输帧序列的包集合中的各个包的头部的一部分来接收1110。例如,数据帧序列可以是音频数据帧序列(例如,编码音乐或语音信号)。例如,数据帧序列可以是视频数据帧序列。
    87.处理1100包括接收1120包,包各自分别包括来自数据帧序列的主帧以及两个或多于两个先前帧。可以基于包映射图数据结构所指定的多步幅包帧映射图,从数据帧序列中选择两个或多于两个先前帧以供包括在包中。在一些实现中,相应包的两个或多于两个先前帧其中至少之一与相应包的主帧在帧序列中分开第一步幅参数的相应倍数,并且相应包的两个或多于两个先前帧其中至少之一与相应包的主帧在帧序列中分开与第一步幅参数不同的第二步幅参数的相应倍数。例如,可以使用网络接口(例如,网络接口120)来接收1120包。在一些实现中,各个相应包的两个或多于两个先前帧包括等于针对相应步幅参数的冗余参数的总和的数量的先前帧,并且针对第二步幅参数的冗余参数大于1。可以经由网络从一个或多于一个服务器装置(例如,服务器装置102)接收1120包。
    88.处理1100包括将包的帧存储1130在缓冲器(例如,环形缓冲器302)中,该缓冲器具有各自保持包的主帧以及两个或多于两个先前帧的条目。在一些实现中,各个相应包的两个或多于两个先前帧包括等于针对相应步幅参数的冗余参数的总和的数量的先前帧,所述步幅参数包括第一步幅参数和第二步幅参数。例如,缓冲器的大小可以被调整为存储来自等于最大步幅参数乘以针对最大步幅参数的相应冗余参数加1的数量的包的帧。在一些实现中,在将来自包的有效载荷的帧存储1130在缓冲器中之前,可以使所接收1120的包传递通过抖动缓冲器。例如,处理1100可以包括:在接收1120到包时将包存储在抖动缓冲器中;以及在将包的帧存储1130在缓冲器中之前,从抖动缓冲器读取包。在一些实现中,数据帧序列中的帧全部为相同大小。
    89.处理1100包括从缓冲器(例如,环形缓冲器302)读取1140帧。例如,可以实现图7的处理700以从缓冲器读取1140帧。在一些实现中,来自序列的数据帧包括音频数据,并且处理1100包括:响应于从缓冲器读取帧,播放帧的音频数据。在一些实现中,从缓冲器读取1140的数据帧在重组缓冲器(例如,图8的重组缓冲器820)中以数据帧序列重组。例如,可以实现图9的处理900来重组数据帧序列以便于播放音频数据。
    90.虽然已经结合某些实施例描述了本公开,但是应当理解,本公开不限于所公开的实现,而是相反,旨在覆盖包括在所附权利要求书的范围内的各种修改和等同布置,该范围应被赋予最广泛的解释,以涵盖法律允许的所有这些修改和等同结构。
    转载请注明原文地址:https://tc.8miu.com/read-2910.html

    最新回复(0)