具体实施方式
本领域的普通技术人员应当理解,为了示出而非限制来提供以下描述。本领域技术人员应当理解,在本发明的精神和所附权利要求的范围内存在许多变体。可以从当前的描述中省略已知功能和操作的不必要的细节,以免使本发明变得晦涩。
本发明的***和方法提供了一种IP解封装方法,其中,除了正确接收的区段之外,还对部分正确接收的区段进行处理,以尽可能地从区段有效载荷中进行恢复,在DVB-H的情况下,区段有效载荷包括IP数据报和属于附加层前向纠错(MPE-FEC)的奇偶校验数据。
参照图1a,MPE-FEC帧100是具有255列和灵活数目的行的字节表,其中,每行是里德-所罗门代码的码字。行数等于256、512、768或1024,以及在PSI/SI表(节目特定信息/服务信息)中传输的time_slice_fec_identifier_descriptor中发信号通知实际使用的行数,见数据广播DVB规范,包括CA支持的DVB-H附加的修改版本,最终草案,ETSI EN 301192V1.4.1,DVB-H201rl,在此将其内容一并引入作为参考。即,该大小的最大允许值是1024,这使得总MPE-FEC帧的大小几乎是2Mb。MPE-FEC帧中的每个位置容纳一个字节。MPE-FEC帧的左侧101(包括191个最靠左的列)专用于IP数据报103和可能的填充104,并被称为应用数据表。MPE-FEC帧的右侧102(包括64个最靠右的列)专用于FEC代码的奇偶校验字节,并被称为RS数据表。应用数据表中的每个字节位置具有从1至191×No_of_rows的地址。类似地,RS数据表中的每个字节位置具有从1至64×No_of_rows的地址。由于section_length和section_number是已知的,所以RS表中的寻址是冗余的。现在参照图1b,使用所谓的MPE区段151来传输IP数据报,以及使用所谓的MPE-FEC区段152来传输RS数据。
将IP数据报逐数据报地置于应用数据表中,从该表左上角的第一数据报的第一字节开始并沿第一列向下而放置。IP数据报的长度可以逐数据报地任意变化。MPE区段的最大大小是4096字节,从而可以对高达4080字节的IP数据报进行封装(4096字节-12字节区段报头-4字节CRC)。紧接IP数据报结尾,下一IP数据报开始201(见图2)。如果IP数据报没有精确地在列的结尾处结束,则在接下来的列202的顶部继续。当已经将所有IP数据报置于应用表101中时,以0字节对任何未填充字节位置进行填充104-5,使它们完全填满最靠左的191列。在每个MPE-FEC区段(即,携带RS奇偶校验字节的区段)中,以8比特动态地发信号通知完全填充的列105的个数。
以标准DVB方式在MPE区段151中携带IP数据,而不考虑是否使用了MPE-FEC。在单一MPE区段中携带IP数据报。一个传输流(TS)分组有效载荷301可以包含一个或更多个MPE区段151,而且可以将一个MPE区段151分段为一个或更多个TS分组有效载荷301,如图3所示。这使得接收与MPE-FEC无知(ignorant)的接收机完全后向兼容。每一个MPE区段151包括其所包含的IP数据报的起始地址。该起始地址指示IP数据报的第一字节在应用数据表中的位置,并在MPE报头中发信号通知。倘若CRC-32校验151.3表明该区段是正确的,则接收机能够将所接收的IP数据报置于应用表中正确的字节位置处,并针对RS解码器将这些位置标记为‘可靠’。
应用数据表101的最后区段包含指示应用数据表内IP数据报结尾的table_boundary标记。如果应用数据表内的所有先前区段都是正确接收的,则接收机不需要接收任何MPE-FEC区段,而且如果使用了时间分片,则接收机可以进入休眠而不对RS数据进行接收和解码。
如果接收到MPE-FEC区段152,则以MPE-FEC区段152的区段报头中的8个比特来指示语言数据表中填充列的准确数目,且只有执行RS解码时才需要该值。
在具有自有table_id的、单独的且特别定义的区段类型中携带奇偶校验字节。
现在参照图4,利用MPE-FEC帧中填充的应用数据表的所有最靠左的191列,对于每一行,可以根据IP数据的191个字节和可能的填充来计算RS数据表201的64个奇偶校验字节。所使用的代码是面向字节[255,191,65]的里德-所罗门代码,其中
字段生成器多项式p(x)=x8+x4+x3+x2+1
以及
代码生成器多项式g(x)=(x+□
0)(x+□
1)(x+□
2)...(x+□
63),其中,
应用数据表的每行包含一个RS码字。可以丢弃、因而不传输RS数据表的最靠右的一些列,以实现击穿(puncturing)。可以根据MPE-FEC区段报头中的last_section_number字段来确定击穿后的RS列的准确数目,而且该数目可以在帧之间动态地变化。完全填充RS数据表102,MPE-FEC帧100做好被***传输流的准备,并可以被传输。
在接收机处,必须尽可能好地对MPE-FEC帧100进行重构,以利用MPE-FEC解码器(RS代码)来修正可能的传输错误。可以通过从传输流中提取MPE区段151来获取IP数据报。MPE区段报头发信号通知应用数据表中所封入的(enclosed)IP数据报的绝对地址。类似地,通过从传输流中提取MPE-FEC区段152,可以获取RS代码的奇偶校验字节,并将其置于RS数据表102中。MPE-FEC区段报头还包含RS数据表中所封入的奇偶校验列的绝对地址信息。此外,由于每个MPE-FEC区段152仅传输一个奇偶校验列,而且MPE-FEC区段报头包含从中可以推导出列位置的序列号,所以奇偶校验列的地址信息是冗余的。
应用数据表的最后区段包含table_boundary标记,该标记指示应用数据表内IP数据报的结尾。如果已经正确地接收应用数据表内的所有先前区段,则接收机不需要接收任何MPE-FEC区段152,而且如果使用了时间分片,则接收机可以休眠而不对RS数据进行接收和解码。
如果由于接收问题而没有接收到一个或更多个IP数据报,则可以擦除应用表中的相应位置,即,可以通知解码器,这些字位置可能有错。
MPE-FEC代码具有d=65的汉明距离,因而可以对高达t=32个随机错误或e=64个擦除进行修正(根据字节位置的可靠性信息指示这些位置可能是有错的)。通常,倘若2t+e<d,则可以对t个错误和e个擦除进行解码。
在MPE-FEC解码开始之前,必须对MPE-FEC帧进行重构。这意味着必须进行IP解封装,而且必须收集RS奇偶校验信息。IP数据报被封装于MPE区段151中。MPE区段报头给出了与区段长度和IP数据报在应用数据表101中的地址有关的信息。区段长度与IP数据报长度相关,等于IP数据报长度+区段报头长度(=9字节)+CRC长度(=4字节)。对于MPE-FEC区段,MPE-FEC长度计算是类似的,从而区段报头长度具有不同值(=5字节),而且将包含实时参数的额外字段添加至等式(=4字节)。
以下对使MPE-FEC帧的重构更加困难的一些情况进行描述。
现在参照图3,示出了IP解封装的示例。在本例中,MPE区段151分布在N个TS分组301上。区段报头151.1和IP数据报151.2的一部分作为有效载荷301.1.2而出现在TS分组1301.1中。IP数据报的剩余部分和32比特的CRC出现在TS分组2301.2至N 301.N中。传输错误会使MPE-FEC帧100的修正重构变得复杂。对以下情况进行识别:
1.TS分组1301.1是有错误的,而且信道解码器中的RS解码器将针对i=1的TS分组报头301.i.1.2(见图5)中的传输错误指示符(tei)设为1,指示RS解码器不能对TS分组进行修正。在这种情况下,会破坏区段报头,以及没有与区段长度和应用数据表寻址有关的可靠信息可用。TS多路分解器的大多数实施方式将丢弃tei=1的TS分组,因而将不(能够)对区段报头进行处理,这导致缺少地址信息和区段长度信息。一个结果是,因为缺少表地址信息,即使正确地接收了TS分组2至N,也不能将这些分组的有效载荷直接置于MPE-FEC帧中。如上所述的IP解封装器的直接实施方式忽略了TS分组2至N,并等待下一MPE区段报头,因而导致了错误传播。
2.TS分组1是有错误的,但是传输错误指示符被设为0(RS解码器的漏修正)。在TS分组中的某处一定存在错误。如果错误位于PID(分组标识符)字段中,则TS多路分解器将不会选择该分组。也参见4。
3.TS分组1正确,但是一个或更多个其它TS分组是有错误的。在这种情况下,区段长度和应用数据表寻址是可靠的。在正确的TS分组的报头中的连续计数器的帮助下,可以尝试擦除IP数据报中位于有错误的TS分组中的片段。应注意,区段报头可以分布在两个TS分组上。
4.RS解码器检测到N个TS分组中没有一个是有错误的,但是CRC失败。在这种情况下,RS解码器中出现一个(或更多个)漏检测,但是毕竟不可能(很难)发现哪个TS分组有错误。所以,第一TS分组也可能出现错误,从而区段长度和应用数据表寻址变得不可靠。如果完全信任有错误的区段长度,则会遇到下一MPE区段的传播问题(过长的区段长度会导致下一区段的区段报头漏失)。可以通过使用有效载荷单元起始指示符来限制传播错误。
5.由于PID值中的误差,PID滤波器不对TS分组2至N之一进行滤波(选择)。在这种情况下,存在分组删除,并忽略了该区段的真实边界。这导致了下一区段的错误传播。可以利用下一TS分组报头中的连续计数器来检测该删除错误。
6.由于PID值中的错误,不希望的TS分组被看作希望的TS分组(值2至N)。通过观察TS分组报头中的连续计数器,可以检测***错误。***或删除错误将可能伴随有等于1的传输误差指示符。
图6示出了可以把区段嵌入TS分组的有效载荷的各种方式中的一些方式。指针字段301.i.2.1指示新区段的起始,并仅在新区段起始时出现(以TS分组报头中的payload_unit_start_indicator来指示)。
最大IP数据报大小是4080字节,而TS分组可以包含至多184字节的有效载荷。将片段定义为一个IP数据报中包含于一个TS分组内的一部分。
假设将数据报尽可能有效地打包为连续TS分组,可以期望将最大长度IP数据报近似分为
此外,在本发明中,TS分组报头中的TS连续计数器(CC)的使用还减少了错误传播(区段的边界),并在计算循环冗余校验CRC之前检测反常效应。从所接收的TS分组中,将IP片段放入片段存储器。片段存储器是存储IP数据报片段、直至完成IP数据报的接收的存储器。使用TS分组报头中的连续计数器(CC),可以确定(一定程度地确定)片段在片段存储器中的位置(即,片段指针)。还可以检测到单个漏失片段。应注意,连续计数器是4比特计数器,所以它的有效范围是有限的。
片段的长度还会由于填充而改变。在私有区段的情况下,例如参见ISO/IEC 13818-1,Information Technology-Generic coding of movingpictures and associated audio information:Systems,2nd edition2000-12-01,将其内容一并引入作为参考,可以使用两种机制进行填充。如果将自适应字段由于填充,则在传输流报头中发信号。利用自适应字段,在实际有效载荷之前进行填充。另一形式的填充专用于PSI和私有区段(因而还有MPE区段)。在这种情况下,在区段的最后字节之后进行填充,而且新的区段在指针字段值为零的下一TS分组中开始。在解码器处,可以通过使用区段长度来检测这种填充,即,如果已经从TS分组中获取了区段的期望数目的字节,而且有效载荷单元起始指示符没有发信号通知新区段的起始,则剩余字节应当是填充字节(填充字节具有值0xFF)。
假设最后接收的片段属于相同的IP数据报,可以根据区段报头中可用的地址信息,使用区段长度对片段地址进行外插,如果这些片段不属于相同的IP数据报(区段长度给出了与IP数据报需要多少片段有关的思想,这可以用于确定所接收的片段是否属于相同的IP数据报),则可以使用(特定(very))下一区段报头的表地址,以及可以将这些片段刚好置于下一IP数据报的下一起始之前。
在位于第一片段和最后一个漏失片段之间正确接收的片段被称为浮动(floating)片段。原理上,浮动片段缺乏地址信息。如果所有片段(除了第一个和最后一个之外)具有相同的长度,则地址内插可以用于获得浮动片段的地址。否则需要更多高级技术(例如,MPE-FEC帧的部分解码,从而可以估计浮动片段的位置)。
由于IP数据报的片段属于不同的TS分组,所以它们可以具有不同等级的软擦除信息(例如,所修正错误的个数)。仅当没有检测到漏失片段时,CRC计算才是有益的。
在优选实施例中,在184字节的单元(TS分组的有效载荷)内进行擦除。此外,TS连续计数器的使用还减小了错误传输(区段的边界),并在计算CRC之前提供了对反常效应的检测。
在图8中,示出了优选实施例的IP解封装的流程图。在将IP数据报置于MPE帧中之前,将IP数据报的片段放入被称为片段存储器的临时(scratch)存储器,见图7。当由于受破坏的TS分组而引起IP数据报的片段丢失时,片段存储器提供了重构IP数据报的有效方式。
在图8的流程图中,假设MPE区段报头没有分布在两个传输流分组上,而且由用户选择的时间分片服务具有PID值“A”。
在步骤801,读取TS分组报头301.i.1。在步骤802,检查分组标识符是否等于“A”。基本流(例如,时间分片服务)由TS报头中的PID值来表征。在PSI(节目特定信息)表中,作出基本流与PID值之间的映射,从而接收机基于该表可以查看所期望的基本流的PID值。在图8中,值“A”代表所期望的时间分片服务的PID值。如果这不是所期望的服务,则通过执行步骤801来读取下一TS分组报头。如果分组标识符PID等于“A”,则在步骤803,如果传输错误指示符(tei)为开(on),则由于当前分组包含错误,所以通过执行步骤801来读取下一TS分组报头。如果tei指示符为关(off),则在步骤803检查有效载荷单元起始指示符以查看新区段是否开始。
在步骤806,如果没有新的有效载荷开始,则在步骤806,参照影子计数器(SC)来检查连续计数器(CC),而且如果CC=SC,则执行步骤814。如果CC≠SC,则漏失了至少一个分组(pusi=0,意味着在TS分组的有效载荷内没有新的区段报头开始,因而通过获取新的片段来进行当前IP数据报的IP解封装)。
在步骤808,递增不连续计数器(DC:=DC+1),以及利用连续计数器(CC)和影子计数器(SC)之间的差Mod(16)来增加漏失片段计数器(K)和片段指针(FP),以及由于可能漏失(丢失)多于一个的片段(即,TS分组),所以将最后漏失片段(LMF)设置为片段指针(FP)-1的新值。如果这是第一漏失片段,即在步骤810处FMF为空,则在步骤812,将第一漏失片段(FMF)设置为片段指针FP-1,以及将阴影计数器(SC)设置为等于连续计数器(CC)。不考虑这是否是第一漏失片段,当前片段没有错误,并执行步骤814。计数器(K)根据连续计数器(CC)和影子计数器(SC)之间的差,对漏失片段的个数进行计数。不连续计数器(DC)对不连续的个数进行计数。根据DC值,可以推导出浮动片段组的个数(至少一个或更多个连续的浮动片段的组),即,F:=DC-1。
在步骤814,将当前的有效载荷存储于片段存储器(FM)中由片段指针(FP)所指示的位置处,使片段指针递增至片段存储器(FM)中的下一片段(FP:=FP+1),而且使影子计数器(SC)加1(SC:=SC+1)。然后通过执行步骤801来读取下一TS分组报头。
在步骤805,当新区段开始时(pusi≠0),检查TS报头的指针字段以查看新区段是否直接在指针字段之后(指针字段=0)开始,以及如果是,则执行步骤818(这与图6中第二行所示的情况相对应)。否则(指针字段≠0),则在读取新区段的区段报头(步骤818)之前,从TS分组有效载荷中获取当前区段(或IP数据报)的最后片段(步骤807等)。“pusi”代表有效载荷单元起始指示符,而且该标记发信号通知新的有效载荷(区段)在传输分组的有效载荷中的某处开始。指针字段(PF)指向传输分组中新区段开始的位置(见图6)。
在步骤818,读取TS分组有效载荷中的区段报头(由有效载荷的指针字段指示)。在步骤820,由于完成了IP数据报的接收,所以将片段存储器中的内容转移至MPE-FEC帧(MFF)的应用数据表。在接收到所有IP数据报(利用表边界标记来发信号)和所有RS数据列(利用帧边界标记来发信号)之后,MPE-FEC帧的接收完成。然后,可以开始MPE-FEC解码。在完成MPE-FEC解码之后,可以将应用数据表转移至应用引擎(在移动/便携设备中运行实际应用程序的一种主机处理器),将影子计数器(SC)设为连续计数器(CC)加1(SC:=CC+1),将片段指针(FP)重置为0,以及将第一漏失片段(FMF)和最后漏失片段(LFM)均重置为空。然后执行步骤801以读取下一TS分组报头。
在步骤805,如果TS分组有效载荷的指针字段(PF)不为0,则有效载荷处理包含(新)区段报头之外,还包含来自当前区段的剩余部分(见图6的行3),而且在步骤807,连续计数器(CC)应当等于阴影计数器(SC),或者漏失了至少一个分组。如果已经漏失了至少一个分组,则执行步骤809至813把至少一个分组记录为漏失,把片段指针(FP)调整为漏失分组之后的片段,以及设置影子计数器(SC)等于连续计数器(CC)。在任一情况下,在步骤815,将有效载荷存储于片段存储器(FM)中由片段指针(FP)所指示的位置。在步骤816,如果第一漏失片段(FMF)为空,指示片段存储器(FM)的内容正确,则在步骤817执行CRC处理。然后,在任何情况下,执行步骤818以读取TS分组有效载荷中包含的区段报头。影子计数器(SC)用于检测传输流(失真的TS分组)中的不连续。如果区段的结尾和新区段的开始都漏失了,则被写入片段存储器的有效载荷将属于两个或更多个不同的IP数据报。在这种情况下,片段存储器会过小。通过计算期望数目的片段(使用区段长度),可以获得有效载荷是否属于两个或更多个IP数据报的一些指示。这对于将片段置于MPE-FEC帧中的方式(地址内插和外插)同样具有意义。
在图8的流程图中,不考虑分布的区段报头(即,分布在两个TS分组上的区段报头)。因此,必须调整流程图,以允许分布在多个TS分组上的区段报头,以及由于本领域技术人员能够容易地完成该调整,所以不将这个调整包括在图8中。此外,TS分组中可以存在多于一个的区段(出于相同的原因,同样没有包括在图8中)。
CRC处理的结果用于分配擦除。
现在参见图9,示出了将存储于片段存储器700的列706.i中的片段转移至MPE-FEC帧存储器1004的流程图。
漏失片段的个数是K。
浮动片段组的个数是F。
LRF是所接收片段的长度之和。
LSC是区段有效载荷的长度(例如,IP数据报的长度)。该讨论和步骤意在应用于MPE和MPE-FEC区段。将IP数据报仅用作用于解释的示例。
在步骤902,进行测试以确定是否存在漏失片段(K>0?)。如果不存在漏失片段(K=0),则在步骤903,将片段存储器700的所有片段706.i直接置于MPE-FEC帧存储器1004中。由于将片段存储器706.i中的片段连续置于MPE-FEC帧存储器1004中,所以不存在地址模糊(ambiguity)。
在步骤902,如果K>0,则存在漏失片段,但是漏失片段的长度未知。如果没有使用自适应字段填充,则将TS分组的有效载荷完全用于区段数据,即,漏失片段应当具有184字节的长度。在步骤904,测试LRF+K*184<=LSC是否成立,并且在步骤905测试浮动片段的存在性。如果不存在浮动片段组(F=0),则漏失片段是连续的,而且在片段706.i存储于片段存储器705中的区段(例如,IP数据报)中存在间隙。然后,根据区段有效载荷长度与所有所接收片段长度的差来确定该间隙的长度,并在步骤907确定为:
∑LMF:=LSC-LRF
在步骤913,将所有漏失片段的总长设为等于∑LMF。
在步骤910,将擦除信息分配给漏失片段和浮动片段,并擦除漏失片段。然后,使用包含于存储在片段存储器700中的所接收区段报头705中的MPE-FEC帧表地址,将所接收的片段与(连续)漏失片段一起连续地置于MPE-FEC帧1004中。如果存在至少一组浮动片段,即在步骤905F≠0,则存在至少两个漏失片段:在至少一组浮动片段之前的至少一个和之后的至少一个。在步骤906,通过测试是否
LRF+K*184==LSC,
来确定这些漏失片段是否具有184字节的长度(最大分组有效载荷长度)。如果结果为肯定的,则在步骤908,给所有漏失片段的长度703.i分配最大片段长度,即184字节,并执行步骤910,从而通过使用漏失片段长度184、并将片段706.i连续置于MPE-FEC帧1004中、以及将擦除信息分配给漏失片段和浮动片段,将包括浮动片段的所有片段706.i置于MPE-FEC帧1004中。
如果漏失片段的长度并非都是184字节,即步骤906的测试失败,则漏失片段中至少一个具有长度<184(明显地,自适应字段填充应用于相应的TS分组中)。由于无从知晓哪些漏失片段具有小于184的大小,所以不能确定将浮动片段置于MPE-FEC帧1004中的何处。因此,在步骤911,擦除漏失和浮动片段,而且漏失和浮动片段的组合是区段(例如,IP数据报)中的间隙(孔)。在步骤911,可以使用区段报头705中的区段长度705.1和MPE-FEC帧表地址705.2,将剩余的所接收片段(紧接区段报头之后和CRC之前)置于MPE-FEC帧1004中。
在步骤904,如果LRF+K*184>LSC,则没有接收到或没有正确接收到一个或更多个区段报头,而且片段存储器700包含多于一个区段的片段706.i,例如,所述区段为IP数据报。这还可以通过使用连续计数器(CC)和区段长度705.1来检测。转移大小为L的区段(例如,IP数据报)所需的TS分组的个数大约是L/184,这是包含最后片段的TS分组的CC值301.i.1.8与包含第一片段的TS分组的CC值301.i.1.8之间的差(将CC分配为以16为模,所以必须允许截断(wrap-around))。在这种情况下,使用存储在片段存储器700中的区段报头705中存在的MPE-FEC帧表地址705.2,将区段报头705之后直接接收到的片段置于MPE-FEC帧1004中。在步骤912,使用新区段报头中存在的MPE-FEC帧表地址705.2,将恰好在CRC之前接收到的片段和属于另一IP数据报的新区段报头置于MPE-FEC帧中。这是可能的,因为已知的是应当把这些最后的片段和新区段的片段,例如IP数据报,连续地置于MPE-FEC帧中。然而,存在与浮动片段有关的过多不确定性,包括在MPE-FEC帧1004中对浮动片段进行定位,并擦除相应的位置。
现在参照图10,示出了包括根据本发明而修改的解封装器1001的接收机,解封装器1001使用片段存储器700将丢失的部分限制为184字节。应注意,仅需要修改接收机,而且MPE-FEC无知的接收机简单地忽略MPE-FEC区段,从而不强制对MPE-FEC的支持。图11示出了DVB-H专用网络,其中,可以根据本发明来修改DVB-H接收机,以将MPE损失量限制为184字节的部分。
尽管示出并描述了本发明的优选实施例,但是本领域技术人员将会理解,这里所描述的管理帧、设备构造和方法是示例性的,以及可以在不偏离本发明真实范围的情况下作出改变和修改,以及可以将其中的要素替换为等同物。此外,可以作出许多修改来使本发明的教益适应特定情况而不偏离其中心范围。因此,本发明并不限于作为预期实现本发明的最佳模式而公开的特定实施例,而是包括落入所附权利要求范围内的所有实施例。