CN103152126A - 基于前向纠错保护编码的数据封装方法和装置 - Google Patents
基于前向纠错保护编码的数据封装方法和装置 Download PDFInfo
- Publication number
- CN103152126A CN103152126A CN2012102435070A CN201210243507A CN103152126A CN 103152126 A CN103152126 A CN 103152126A CN 2012102435070 A CN2012102435070 A CN 2012102435070A CN 201210243507 A CN201210243507 A CN 201210243507A CN 103152126 A CN103152126 A CN 103152126A
- Authority
- CN
- China
- Prior art keywords
- operand
- packaged
- fec
- protected
- bpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
本发明涉及一种基于前向纠错保护编码的数据封装方法和装置。该方法主要包括:获取待保护操作对象中的所有待保护数据包中包括的BPU数目和待封装操作对象中的所有待封装数据包中最多额外容纳的FEC BPU数目;根据所述所有待保护数据包中包括的BPU数目和所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;根据所述FEC的校验符号数目和各个待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中的所有待保护数据包的FEC校验数据;选取所述FEC校验符号数目对应的FEC BPU分布;利用所述FEC BPU分布对所述FEC校验数据和待封装操作对象中的所有待封装数据包进行封装。本发明实施例可以最大化利用封装后的数据包中的空闲空间,能在不增加码流数据包速率的情况下,有效提升码流的容错性能。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于FEC(Forward ErrorCorrection,前向纠错保护)的数据封装方法。
背景技术
近年来,随着网络接入技术的发展,基于网络的视频应用,如视频点播、视频会议、视频监控等,正面临着飞速的发展。在包交换网络中,由于链路拥塞、信道错误等原因,数据包错误或丢失是不可避免的,因此基于包交换网络的视频传输面临着很大的挑战。
原始视频数据包中包含了一些冗余信息,该冗余信息包括存在于帧内的空间冗余、存在于帧间的时间冗余以及由人眼视觉***造成的视觉冗余。视频编码技术可以有效地去除视频数据包中的冗余信息,进而压缩原始视频。压缩后的视频占用较小的存储空间和传输带宽,但是视频编码引入了数据间的相关性,使得部分视频数据可能发生丢失或错误。
分片编码是面向传输的视频编码的一个重要组成部分。定义一帧视频中的一部分宏块的集合为片,片的分割必须按照光栅扫描顺序进行,即在一帧中,同一片中宏块必须依照从上到下、从左到右的顺序且不可中断。对视频序列的一帧进行编码时,可以按照一定的标准将视频帧中的宏块划分到不同的片中。同一帧的各个片在编码时互相之间不进行参考。视频码流传输时,如果由于信道错误等原因造成一帧中的部分片数据丢失,则该帧中的其它片的解码不受影响。因此,分片编码可以有效的提高码流的抗丢失性能。
分片编码时,可以采用固定宏块或者固定比特的方法。采用固定宏块的方法时,单个片中包含固定数目的宏块数目,但是编码后的长度不固定;采用固定比特的方法时,单个片中包含小于固定长度的比特数,但是片中包含的宏块数目不固定。
编码端使用分片编码时,若定义该帧内的所有片大小均小于网络最大传输单元且每一个片的编码数据均被封装在独立的应用层数据包中,则在其中部分片对应的应用层数据包错误或丢失的情况下,其它正确接收的片编码数据仍然可以被正确使用,从而提高解码端视频质量。
在传统的基于包交换的网络中,数据包丢失是不可避免的问题。FEC(ForwardError Correction,前向纠错保护)是一种有效的对抗数据包丢失的信道编码,其具有无需储存、无需反馈的特点,在单向信道或时延要求较高的应用场景下具有良好的性能。
FEC的主要思想是利用纠错编码,对待保护数据进行运算生成额外的校验数据,同时将生成的校验数据与原始视频数据一起进行传输。在接收端,若原始视频数据中的部分内容丢失,则可依据采用的编码技术,在一定范围内恢复丢失或错误的数据。对于应用层前向纠错编码方法,校验数据通过跨数据包对原始数据进行运算生成。数据包丢失位置可以通过判断头标等方法确定,即可以确定丢失符号的位置。对原始数据进行前向纠错保护的时候,如果对数据中的不同部分采用强度不同的前向纠错编码,则称之为UEP(Unequal Error Protection,不等差错保护)。
一个普遍使用的前向纠错编码是RS码。假定待保护数据采用RS(n,k,t)编码,其中,k表示原始数据符号数目,t为生成的校验数据符号数目,n为总的符号数目且n=k+t。在符号丢失位置已知的情况下,添加的校验数据最多可以恢复t个符号。
产生的前向纠错编码数据需要和原始数据一起被封装在应用层数据包中才能通过应用层协议,如实时传输协议RTP,进行传输。定义待保护的数据为NAL(NetworkAbstraction Layer,网络抽象层)数据包,封装后的数据为应用层数据包。当视频编码采用分片编码时,不同片编码后的各个NAL包数据相互独立且长度无法完全一致,对待保护数据进行FEC编码时,编码顺序和两种数据的封装顺序会影响FEC的保护能力以及封装后码流的特性。
现有技术中的一种基于FEC的数据封装方法为:顺序编码封装方法,即FEC编码顺序与最终的数据封装顺序一致。该方法的主要处理过程如下:对待保护数据进行长度规整。可以采用的方法有:1、对待保护数据进行补齐,即对较短的数据包以空白数据填充,使各个数据包长度一致,如图1所示;2、对待保护数据进行剪切,即将较长的数据包中的部分数据剪切到较短的数据包中,使得各个数据包长度一致,如图2所示,斜线区域为待保护数据,网格线区域为生成的FEC校验数据,竖线区域是为了进行长度规整而添加的空白数据,空白区域为进行长度规整而移除的数据,横线区域为进行长度归整移入的数据。
其次,使用特定的前向纠错保护编码算法,如RS码,跨数据包生成校验数据,如图1、2所示中的校验数据包。再次,将规整化后的待保护数据和生成的校验数据分别封装到应用层数据包中,生成完整的码流。如图1、2中所示,封装后的码流包含P1、P2、P3、P4、P5共5个完整的应用层数据包和P6、P7两个封装了校验数据的应用层数据包。
上述现有技术中的基于FEC的数据封装方法的缺点为:当视频编码采用分片编码时,各个片的长度无法完全相等。此时,对待保护数据进行前向纠错编码时,需要对原始数据进行规整。其中,使用补齐的方法无法最大化利用封装后的数据包中的可使用空间;使用剪切的方法会打乱待保护数据的原始顺序,在丢失数据总量超过前向纠错编码保护能力的时候,无法利用已经正确接收的数据。同时,码流中未保护的数据包中的空闲空间也没有充分利用。
比如,在图1、图2所示的情况中,待保护数据占用5个应用层数据包,产生的校验数据占用2个应用层数据包。当使用RS码生成校验数据时,如果丢失的应用层数据包数目小于等于2,则可完全恢复出原始数据。如果丢失的应用层数据包数目大于2,则无法恢复原始数据。若对待保护数据的规整采用补齐的方法,则正确接收到的应用层数据包可以被使用;若对待保护数据的规整采用剪切的方法,则接收到的数据完全不可用。
发明内容
本发明实施例提供了一种基于FEC的数据封装方法,以实现有效地提升码流的容错性能。
为实现上述的发明目的,本发明采用下述的技术方案:
一种基于前向纠错保护编码的数据封装方法,包括:
获取待保护操作对象中所有待保护数据包中包括的基本操作单元BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目;
根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;
根据所述FEC的校验符号数目和待保护操作对象中所有待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中所有待保护数据包的FEC校验数据;
根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布;
利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装。
一种基于前向纠错保护编码的数据封装装置,包括:
基本操作单元BPU数目获取模块,用于获取待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目;
FEC校验符号数获取模块,用于根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;
FEC校验数据生成模块,用于根据所述FEC的校验符号数目和待保护操作对象中所有待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中所有待保护数据包的FEC校验数据;
数据包封装模块,用于根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布;
利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装。
本发明实施例采用数据包内部封装的方法,通过有效的利用码流封装后大小与数据链路层最大传输单元之间的冗余空间,封装前向纠错编码数据,可以最大化利用封装后的数据包中的空闲空间,能在不增加码流数据包速率的情况下,有效提升码流的容错性能。
附图说明
图1为现有技术中的一种顺序编码封装方法中的对待保护数据包进行补齐规整的示意图;
图2为现有技术中的一种顺序编码封装方法中对待保护数据进行剪切规整的示意图;
图3为本发明实施例一提供的一种基于FEC的数据封装方法的处理过程示意图;
图4为本发明实施例一提供的一种基于FEC的数据封装方法的具体处理流程图;
图5为本发明实施例二提供的一种操作对象预处理和FEC BPU数据封装示意图;
图6为本发明实施例三提供的一种应用本发明实施例的方法进行单层视频码流封装的示意图;
图7为本发明实施例四提供的一种应用本发明实施例的方法进行多层视频码流封装的示意图;
图8为本发明实施例提供的一种基于FEC的数据封装装置的具体结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,以对本发明实施例进行清楚、完整地描述。
实施例一
该实施例提供的一种基于FEC的数据封装方法的处理过程示意图如图3所示,包括:码流解析、操作对象预处理、FEC生成、FEC数据封装等。其中,码流解析和FEC生成为已有技术。上述方法的具体处理流程如图4所示,包括如下的处理步骤:
步骤4-1、定义操作对象,该操作对象可能是数据码流中的一个画面组GOP(Groupof Picture,画面组)或者一帧。对于多层码流,不同的操作对象可能位于不同层的数据码流。上述数据码流可以为视频数据码流。
包含有待保护数据包的操作对象称之为待保护操作对象,其中,待保护数据包可能是部分或者全部的待保护操作对象包含的数据包;
用于容纳生成的FEC校验数据的操作对象称之为待封装操作对象,其中,待封装数据包可能是部分或者全部的待封装操作对象包含的数据包;
待保护操作对象和待封装操作对象可能是同一个操作对象,也可能是处于前后不同位置关系等的不同的操作对象;
本实施例中待封装操作对象总是待保护操作对象的前一个操作对象,并对第一个操作对象作额外保护,所述额外保护包括:不作保护、其它FEC保护、可靠通信、其它信道传输等。假设待保护操作对象为I,待封装操作对象为(I-1)。但本发明应用范围不局限于此。
首先需要对上述操作对象进行预处理,该预处理主要包括:对上述操作对象进行解析,提取操作对象的数据码流中包括的各个数据包。
定义BPU(基本操作单元,Basic Processing Unit),该BPU是一段固定长度的数据块,一个BPU的长度为B。
步骤4-2、判断读取的操作对象是不是第一个操作对象,如果不是,则进行步骤4-3,否则,存储该操作对象并结束处理过程。
步骤4-3、获取操作对象I中的各个待保护数据包,该待保护数据包表示操作对象I中的部分或全部帧对应的数据包,具体可以视不同帧的重要性来设定,如只保护关键帧对应的数据包等。将上述操作对象I中所有待保护数据包组成集合G,G中的元素数目|G|=n。
获取操作对象(I-1)中的各个待封装数据包,该待封装数据包表示操作对象(I-1)中的部分或者全部数据包,具体可以依据应用场景来设定,如设为码流中的非关键帧数据包或所有数据包,其中,待封装数据包必须满足其中可额外容纳的BPU数目大于等于1。将上述操作对象(I-1)中所有待封装的数据包组成集合U,U中的元素数目为|U|=p。
获取当前操作对象I中的各个待保护数据包中包括的BPU数目和操作对象(I-1)中所述各个待封装数据包中可以容纳的额外FEC BPU数目。假定当前操作对象I中共包含n个待保护数据包,各个待保护数据包长度为L0,…,Li,…Ln-1,当前操作对象中的第i个待保护数据包中包括的BPU数目Di的计算方法为:
将所述当前操作对象I中的各个待保护数据包中包括的BPU数目Di组成集合D,D中的元素数目为n,D中的所有元素之和为F。
当前操作对象(I-1)中共包含p个待封装数据包,第i个待封装数据包中可以容纳的额外FEC BPU数目Ei的计算方法为:
所述L为网络最大可允许数据包长度,一个可能的计算方法是:L=MTU(MaximumTransmission Unit,最大传输单元)-可能的头信息长度-用户自定义信息长度。表示向下取整操作,所述为向上取整操作。
操作对象(I-1)可容纳的额外FEC BPU数目为该操作对象(I-1)中的各个待封装数据包可容纳的额外FEC BPU数目总和:
将待封装操作对象(I-1)中的各个待封装数据包中可以额外容纳的FEC BPU组成集合E,E中的元素数目为p,E中所有元素之和为S;
步骤4-4、将上述集合G中各个待保护数据包对应的Di(容纳的BPU数目)组成集合D。
将所有任意选取的D的一个非空子集中的元素的和值的并集作为集合M;
上述集合M的一个具体获取方法为:
从D中任意选取一个、两个直到n个数值,分别计算每次所选取的所有数值的和值,将所有计算得到的和值组成集合M,且其中总元素数目为w,元素分别为M0,M1,…,Mw-1,并且元素是从小到大排列的,即满足M0<M1<…<Mw-1。
步骤4-5、依据选用的FEC,选定一个合适的参数K作为FEC的校验符号数。参数K的选取方法如下:在校验符号数目为K的情况下,若FEC编码可以最多纠正f(K)个符号错误,从集合M中选取一个小于等于f(S)的最大的Mj,选取一个最小的K,使其满足K≤S且f(K)≥Mj。其中,f(K)为选用的FEC编码在校验符号数目为K时的最大纠错能力,f(S)为选用的FEC编码在校验符号数目为S时的最大纠错能力。若无法选出Mj,则令K=0。
则操作对象I对应的FEC强度为源符号数F、校验符号数为K。
当选用RS码作为FEC编码时,f(K)=K,若S小于M0,则选定参数K=0;否则,从集合M中选取一个小于等于S的最大的Mj,令K=Mj,将所述参数K作为FEC的校验符号数。
步骤4-6、判断校验符号数K是否等于0,如果是,执行步骤4-9;否则,执行步骤4-7。
步骤4-7、依据上述确定的操作对象I对应的FEC强度,即总数为F的待保护数据BPU及确定的FEC BPU数目(校验符号数)K,利用确定的前向纠错编码,跨BPU生成FEC校验数据,该FEC校验数据中包括K个FEC BPU。
一个典型的前向纠错编码方法是RS(Reed-Solomon,里德-所罗门)码。RS码是一种多进制BCH码,其具有运算简单、纠错能力强等优点。在位置已知的情况下,RS码可以纠正与校验符号数目相等的符号丢失。
步骤4-8、选取所述FEC校验符号数对应的FEC BPU分布,利用所述FEC BPU分布对所述FEC校验数据和操作对象(I-1)中的各个待封装数据包进行封装。
选取适当的FEC BPU分布T对生成的FEC校验数据和存储的操作对象(I-1)进行封装。具体处理过程如下:
条件2、分布T满足在其中一个元素丢失的情况下,剩余元素的和可以纠正错误符号数目大于等于Mi的组合最多,所述Mi为集合M中小于Mj的任意一个元素。
在实际应用中,上述条件1为必要条件,上述条件2为可选条件,可以选取只满足上述条件1的FEC BPU分布T。
一个特例是,当K=S时,有且仅有唯一分布。按照选定的分布T对生成的FEC校验数据和操作对象(I-1)的待封装的数据包集合G进行封装。流程结束。
将所述分布T中的各个元素和操作对象(I-1)中的各个待封装的数据包对应起来,并将分布T中的各个元素的数值作为对应的操作对象(I-1)中的待封装的数据包中需要添加的FEC BPU数目。将所述操作对象I的FEC校验数据中包括的K个FEC BPU按照上述得到的需要添加的FEC BPU数目,分别添加到操作对象(I-1)中的各个待封装的数据包中,完成操作对象(I-1)的数据封装过程。
在实际应用中,还可以对码流中所有较低层对应的操作对象均作为待保护操作对象,对码流中所有较低层和较高层对应的操作对象的并集作为对应的较低层操作对象对应的待保护操作对象的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
步骤4-9、对操作对象(I-1)直接进行数据封装,流程结束。
实施例二
该实施例提供的一种操作对象预处理和FEC BPU数据封装示意图如图5所示,
图5中左侧为储存的待封装操作对象(I-1),右侧为待保护的操作对象I,其中,待保护数据为前4个NAL包,以边框加粗表示。定义待封装数据包为所有帧对应的数据包,操作对象(I-1)中各个待封装数据包可以容纳的额外FEC BPU数目分别为5、2、2、4,S值为13,其它未满足待封装数据包定义的数据包未列出。操作对象I中待保护的数据包包含的BPU数目分别为7、7、7、3,集合D为{7、7、7、3}。从D依次选取1、2、3或4个数字并求和,得到集合M,M中元素依次为3、7、10、14等。
当选用RS码作为FEC编码时,当存在K个校验符号的情况下,可以纠正K个符号错误,即f(K)=K。此时,f(13)=13,选取小于等于13的最大的M2=10,选取最小的K使其满足K≤S=13且f(K)=K≥Mj=10,则选取K等于10,j=2。
以RS码为例,f(K)=K,FEC强度为RS(34,24,10)。选取的FEC BPU分布T为(3,2,2,3),值为8,该分布T(3,2,2,3)在任意一个元素丢失后,剩余的元素之和都大于集合M中小于M2=10的任意一个元素。对比分布T1(5,2,2,1),值为7。该分布T1(5,2,2,1)在元素5丢失后,剩余的元素之和不能大于集合M中的元素M1=7。
实施例三
该实施例提供的一种应用本发明实施例的方法进行单层视频码流封装的示意图如图6所示,其中,阴影区域为待保护关键帧对应的NAL包,空白区域为非保护其它帧对应的NAL包。定义待封装操作对象中待封装数据包为全部帧对应的数据包。在该实施例中,对码流处理过程中,定义操作对象为一个GOP数据,定义待保护操作对象中的待保护数据包为每个GOP数据中的关键帧对应的NAL包,选用RS码作为前向纠错编码算法。在实施过程中,第n个GOP数据中关键帧对应的FEC校验数据会连同第(n-1)个GOP数据一起封装传输。在接收端,当第n个GOP数据被接收时,该第n个GOP数据对应的校验数据已经在前一个GOP数据接收时被同时保存。若第n个GOP数据中的关键帧出现错误,则尝试用储存的FEC校验数据进行恢复。若不能恢复,则将第n个GOP关键帧中正确接收的数据包送入视频解码器。
实施例四
该实施例提供的一种应用本发明实施例的方法进行多层视频码流封装的示意图如图7所示,其中,阴影区域为待保护基本层BL对应的NAL包,空白区域为非保护增强层对应的NAL包。
该实施例对码流处理过程中,定义操作对象为多层码流的一个GOP数据,定义待保护操作对象中待保护数据包为每个操作对象中的BL(Base Layer,基本层)对应的NAL包,定义待封装操作对象中待封装数据包为每个操作对象中所有帧对应的数据包,选用RS码作为前向纠错编码算法。在实施过程中,第n个GOP数据的基本层对应的FEC校验数据会连同第(n-1)个GOP数据一起封装传输。在接收端,当第n个GOP数据被接收时,对应的校验数据已经在前一个GOP数据接收时被储存。若第n个GOP数据中的基本层出现错误,则尝试用储存的FEC校验数据进行恢复。若不能恢复,则将第n个GOP数据中的基本层中正确接收的数据包送入视频解码器。
实施例五
该实施例提供了一种基于FEC的数据封装装置,其具体结构如图8所示,包括如下的模块:
BPU数目获取模块81,用于获取待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目;
FEC校验符号数获取模块82,用于根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;
FEC校验数据生成模块83,用于根据所述FEC的校验符号数目和待保护操作对象中所有待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中所有待保护数据包的FEC校验数据;
数据包封装模块84,用于根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布;
利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装。
具体的,所述的BPU数目获取模块81,具体用于计算当前待保护操作对象中的第i个待保护数据包中包括的BPU数目Di,
待封装操作对象中的第i个待封装数据包中最多额外容纳的BPU数目Ei的计算方法为:
具体的,所述的FEC校验符号数获取模块82,具体用于将所述待保护操作对象中所有待保护数据包中包括的BPU数目组成集合D,D中的元素数目为n,D中的所有元素之和为F;
将所有D的非空子集中的元素的和值的并集作为集合M;
M中元素数目为w,M中各个元素分别为M0,M1,...,Mw-1,并且各个元素是从小到大排列的,即满足M0<M1<...<Mw-1;
将待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目组成集合E,E中的元素数目为p,E中所有元素之和为S;
依据选用的FEC编码的特性,选取合适的校验符号数目K。选用的FEC编码在校验符号数目为K的情况下最多纠正f(K)个错误,则从集合M中选取一个小于等于f(S)的最大的Mj,选取最小的参数K,使其满足K≤S且f(K)≥Mj,将所述参数K作为FEC的校验符号数,其中,f(K)为选用的FEC编码在校验符号数目为K时的最大纠错能力,f(S)为选用的FEC编码在校验符号数目为S时的最大纠错能力,若无法选出Mj,则令K=0;
具体,所述的FEC校验符号数获取模块82,具体用于当选用RS码作为FEC编码时,在校验符号数目为K时,最多纠正f(K)=K个错误,若S小于M0,则选定参数K=0;否则,从集合M中选取一个小于等于S的最大的Mj,令K=Mj,将所述参数K作为FEC的校验符号数。
具体的,所述的数据包封装模块84,具体用于选取所述FEC的校验符号数目K对应的FEC BPU分布T,所述T满足条件:
进一步地,所述的数据包封装模块84,具体用于选取所述FEC的校验符号数目K对应的FEC BPU分布T,所述T还满足条件2:
条件2、分布T满足在其中一个元素丢失的情况下,剩余元素可以纠正的错误符号数目大于等于Mi的组合最多,所述Mi为所述集合M中小于Mj的任意一个元素;
具体的,所述的数据包封装模块84,具体用于将所述分布T中的各个元素和待封装操作对象中所有待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的额外FEC BPU数目;
将所述待保护操作对象中所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的额外FEC BPU数目,分别和待封装操作对象中的对应待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
具体的,所述的数据包封装模块84,具体用于对码流中第一个操作对象作为待封装操作对象并对第一个操作对象作额外保护;
对码流中除了所述第一个操作对象之外的其它操作对象,均作为待保护操作对象,并且作为该操作对象的后一个操作对象对应的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
具体的,所述的数据包封装模块84,具体用于对码流中所有较低层对应的操作对象均作为待保护操作对象,对码流中所有较低层和较高层对应的操作对象的并集作为对应的较低层操作对象对应的待保护操作对象的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
应用本发明实施例的装置进行基于FEC的数据封装的具体处理过程与前述方法实施例类似,此处不再赘述。
以上述实施例三为例。在视频编码端使用分片编码且每个片编码后的码流封装在单一的NAL包中时,每个正确接收的数据包均可以被解码端使用。考虑到视频码流的这个特性。使用现有技术中的通过补齐进行长度规整的方法作为对比算法。
考虑数据流环境,采用分级B帧编码结构,GOP大小为8帧,帧内编码帧周期为64帧,定义操作对象为一个GOP。定义网络最大可允许数据包长度为1400Bytes,定义BPU大小为200Bytes。视频编码时使用分片编码技术,使用固定比特数的编码方法,每一帧划分为不固定数目的片,其中除最后一个片外,其它片编码后的大小均接近但不超过1400Bytes。其中,任意一个GOP中待保护数据包产生的FEC BPU均封装在前一个GOP的待封装数据包中,对第一个GOP不作保护。
对比算法和本发明实施例均只保护数据码流中的关键帧对应的NAL包。考虑到低丢包环境在实际视频传输中更具有代表意义,对比算法使用不少于关键帧数据包和FEC包总数10%的额外FEC校验数据包,比较算法在3%和5%丢包率下的性能表现,使用不少于关键帧数据包和FEC包总数20%的额外FEC校验数据包比较算法在5%丢包率下的性能表现。测试丢包方法采用JVT-Q069所提的丢包文件,其中,起始位置随机设定,每组测试均进行10次取平均值。单个测试序列生成的数据包数目均大于4000。
测试序列分辨率大小为CIF(352*288),测试序列包括:Bus,Football,Mobile,Stefan,Tempete。测试结果采用修改后的Bjontegaard delta PSNR测量方法,使用包速率替代原始算法中的比特率以反应在同样数据包速率下两种方法的性能比较。性能均与无FEC保护的原始码流进行比较。
测试结果如下表所示,其中数据单位为dB。从结果可以看出,相对于现有技术附加不少于10%的额外FEC校验数据包时,本发明实施例在3%和5%丢包率时,各个测试序列中均有提升;相对于现有技术附加不少于10%的额外FEC校验数据包时,在5%丢包率时,本发明实施例对football序列仍然有相当的性能。
表一:本发明实施例与现有技术的性能对比
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
综上所述,本发明实施例采用数据包内部封装的方法,通过有效的利用码流封装后大小与数据链路层最大传输单元之间的冗余空间,封装前向纠错编码数据,可以最大化利用封装后的数据包中的空闲空间,能在不增加码流数据包速率的情况下,有效提升码流的容错性能。
本发明实施例不会打乱待保护数据的原始顺序,从而避免无法利用已经正确接收的数据的情况出现。本发明实施例
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种基于前向纠错保护编码的数据封装方法,其特征在于,包括:
获取待保护操作对象中所有待保护数据包中包括的基本操作单元BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目;
根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;
根据所述FEC的校验符号数目和待保护操作对象中所有待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中所有待保护数据包的FEC校验数据;
根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布;
利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装。
2.根据权利要求1所述的方法,其特征在于,所述的获取待保护操作对象中所有待保护数据包中包括的基本操作单元BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的前向纠错保护FEC BPU数目,包括:
待保护操作对象中的第i个待保护数据包中包括的BPU数目Di的计算方法为:
待封装操作对象中的第i个待封装数据包中最多额外容纳的BPU数目Ei的计算方法为:
3.根据权利要求1所述的方法,其特征在于,所述的根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC的校验符号数目,包括:
将所述待保护操作对象中所有待保护数据包中包括的BPU数目组成集合D,D中的元素数目为n,D中的所有元素之和为F;
将所有D的非空子集中的元素的和值的并集作为集合M;
M中元素数目为w,M中各个元素分别为M0,M1,...,Mw-1,并且各个元素是从小到大排列的,即满足M0<M1<...<Mw-1;
将待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目组成集合E,E中的元素数目为p,E中所有元素之和为S;
依据选用的FEC编码的特性,选取合适的校验符号数目K。选用的FEC编码在校验符号数目为K的情况下最多纠正f(K)个错误,则从集合M中选取一个小于等于f(S)的最大的Mj,选取最小的参数K,使其满足K≤S且f(K)≥Mj,将所述参数K作为FEC的校验符号数,其中,f(K)为选用的FEC编码在校验符号数目为K时的最大纠错能力,f(S)为选用的FEC编码在校验符号数目为S时的最大纠错能力,若无法选出Mj,则令K=0;
选取合适的校验符号数目K,当选用RS码作为FEC编码时,在校验符号数目为K时,最多纠正f(K)=K个错误,若S小于M0,则选定参数K=0;否则,从集合M中选取一个小于等于S的最大的Mj,令K=Mj,将所述参数K作为FEC的校验符号数;
所述的根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布,包括:
选取所述FEC的校验符号数目K对应的FEC BPU分布T,所述T满足下述条件1或者同时满足下述条件1和条件2,
条件1、T中共有p个元素,各元素分别为t0,t1,...,tp-1,T中各元素ti≤Ei且满足和等于K;
条件2、分布T满足在其中一个元素丢失的情况下,剩余元素可以纠正的错误符号数目大于等于Mi的组合最多,所述Mi为所述集合M中小于Mj的任意一个元素;
4.根据权利要求1至3中任一权利要求所述的方法,其特征在于,所述的利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装,包括:
将所述分布T中的各个元素和待封装操作对象中所有待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的额外FEC BPU数目;
将所述待保护操作对象中所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的额外FEC BPU数目,分别和待封装操作对象中的对应待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
5.根据权利要求4所述的方法,其特征在于,所述的完成待封装操作对象的数据封装过程包括:
对码流中第一个操作对象作为待封装操作对象并对第一个操作对象作额外保护;
对码流中除了所述第一个操作对象之外的其它操作对象,均作为待保护操作对象,并且作为该操作对象的后一个操作对象对应的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程;
或者,
对码流中所有较低层对应的操作对象均作为待保护操作对象,对码流中所有较低层和较高层对应的操作对象的并集作为对应的较低层操作对象对应的待保护操作对象的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
6.一种基于前向纠错保护编码的数据封装装置,其特征在于,包括:
基本操作单元BPU数目获取模块,用于获取待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目;
FEC校验符号数获取模块,用于根据所述待保护操作对象中所有待保护数据包中包括的BPU数目和待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目获取FEC校验符号数目;
FEC校验数据生成模块,用于根据所述FEC的校验符号数目和待保护操作对象中所有待保护数据包中包括的BPU数目,通过选取的FEC算法生成所述待保护操作对象中所有待保护数据包的FEC校验数据;
数据包封装模块,用于根据所述待封装操作对象中所有待封装数据包最多额外容纳的BPU数目和所述FEC校验符号数目,选取所述FEC校验符号数目对应的FEC BPU分布;
利用所述FEC校验符号数目对应的FEC BPU分布对所述待保护操作对象中所有待保护数据包的FEC校验数据和所述待封装操作对象中所有待封装数据包进行聚合和封装。
8.根据权利要求6所述的装置,其特征在于:
所述的FEC校验符号数获取模块,具体用于将所述待保护操作对象中所有待保护数据包中包括的BPU数目组成集合D,D中的元素数目为n,D中的所有元素之和为F;
将所有D的非空子集中的元素的和值的并集作为集合M;
M中元素数目为w,M中各个元素分别为M0,M1,...,Mw-1,并且各个元素是从小到大排列的,即满足M0<M1<...<Mw-1;
将待封装操作对象中所有待封装数据包中最多额外容纳的BPU数目组成集合E,E中的元素数目为p,E中所有元素之和为S;
依据选用的FEC编码的特性,选取合适的校验符号数目K。选用的FEC编码在校验符号数目为K的情况下最多纠正f(K)个错误,则从集合M中选取一个小于等于f(S)的最大的Mj,选取最小的参数K,使其满足K≤S且f(K)≥Mj,将所述参数K作为FEC的校验符号数,其中,f(K)为选用的FEC编码在校验符号数目为K时的最大纠错能力,f(S)为选用的FEC编码在校验符号数目为S时的最大纠错能力,若无法选出Mj,则令K=0;
所述的FEC校验符号数获取模块,具体用于当选用RS码作为FEC编码时,在校验符号数目为K时,最多纠正f(K)=K个错误,若S小于M0,则选定参数K=0;否则,从集合M中选取一个小于等于S的最大的Mj,令K=Mj,将所述参数K作为FEC的校验符号数;
所述的数据包封装模块,具体用于选取所述FEC的校验符号数目K对应的FEC BPU分布T,所述T满足下述条件1或者同时满足下述条件1和条件2,
条件2、分布T满足在其中一个元素丢失的情况下,剩余元素可以纠正的错误符号数目大于等于Mi的组合最多,所述Mi为所述集合M中小于Mj的任意一个元素;
设是所有满足条件1的分布的集合,设选定的f(K)≥Mj,其中f(K)为选定的FEC编码在校验符号数目为K时最多纠正的错误符号数目,定义
则
9.根据权利要求6至8任一权利要求所述的装置,其特征在于:
所述的数据包封装模块,具体用于将所述分布T中的各个元素和待封装操作对象中所有待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的额外FEC BPU数目;
将所述待保护操作对象中所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的额外FEC BPU数目,分别和待封装操作对象中的对应待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
10.根据权利要求9所述的装置,其特征在于:
所述的数据包封装模块,具体用于对码流中第一个操作对象作为待封装操作对象并对第一个操作对象作额外保护;
对码流中除了所述第一个操作对象之外的其它操作对象,均作为待保护操作对象,并且作为该操作对象的后一个操作对象对应的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程;
或者,
所述的数据包封装模块,具体用于对码流中所有较低层对应的操作对象均作为待保护操作对象,对码流中所有较低层和较高层对应的操作对象的并集作为对应的较低层操作对象对应的待保护操作对象的待封装操作对象;
将所述分布T中的各个元素和对应的待封装操作对象中的各个待封装数据包对应起来,并将分布T中的各个元素的数值作为对应的待封装操作对象中的待封装数据包中需要添加的FEC BPU数目;
将所述待保护操作对象的所有待保护数据包的FEC校验数据中包括的K个FEC BPU按照所述得到的需要添加的FEC BPU数目,分别和所述待封装操作对象中的各个待封装数据包进行聚合并封装,完成待封装操作对象的数据封装过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210243507.0A CN103152126B (zh) | 2012-04-06 | 2012-07-13 | 基于前向纠错保护编码的数据封装方法和装置 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210100137.5 | 2012-04-06 | ||
CN2012101001375 | 2012-04-06 | ||
CN201210100137 | 2012-04-06 | ||
CN201210243507.0A CN103152126B (zh) | 2012-04-06 | 2012-07-13 | 基于前向纠错保护编码的数据封装方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103152126A true CN103152126A (zh) | 2013-06-12 |
CN103152126B CN103152126B (zh) | 2015-04-22 |
Family
ID=48550018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210243507.0A Active CN103152126B (zh) | 2012-04-06 | 2012-07-13 | 基于前向纠错保护编码的数据封装方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103152126B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281871A (zh) * | 2014-05-28 | 2016-01-27 | 三星显示有限公司 | 用于在符号编码的传输流中传送前向纠错码的方法 |
CN107168681A (zh) * | 2017-03-31 | 2017-09-15 | 北京奇艺世纪科技有限公司 | 一种实时任务处理方法及装置 |
US10432353B2 (en) | 2014-12-04 | 2019-10-01 | Samsung Display Co., Ltd. | Memory-efficient methods of transporting error correction codes in a symbol encoded transmission stream |
US10749628B2 (en) | 2015-09-17 | 2020-08-18 | Nec Corporation | Terminal apparatus, control method therefor, and recording medium in which control program for terminal apparatus is stored |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101166273A (zh) * | 2006-10-16 | 2008-04-23 | 华为技术有限公司 | 实现视频数据传送的方法、装置及*** |
US20090007207A1 (en) * | 2007-06-29 | 2009-01-01 | Broadcom Corporation | Hardware-implemented handling of back-to-back and parallel time slices in a video broadcasting receiver |
CN101494517A (zh) * | 2008-01-22 | 2009-07-29 | 中兴通讯股份有限公司 | 一种数据传输方法及装置 |
-
2012
- 2012-07-13 CN CN201210243507.0A patent/CN103152126B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101166273A (zh) * | 2006-10-16 | 2008-04-23 | 华为技术有限公司 | 实现视频数据传送的方法、装置及*** |
US20090007207A1 (en) * | 2007-06-29 | 2009-01-01 | Broadcom Corporation | Hardware-implemented handling of back-to-back and parallel time slices in a video broadcasting receiver |
CN101494517A (zh) * | 2008-01-22 | 2009-07-29 | 中兴通讯股份有限公司 | 一种数据传输方法及装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281871A (zh) * | 2014-05-28 | 2016-01-27 | 三星显示有限公司 | 用于在符号编码的传输流中传送前向纠错码的方法 |
US10447429B2 (en) | 2014-05-28 | 2019-10-15 | Samsung Display Co., Ltd. | Methods to transport forward error correction codes in a symbol encoded transmission stream |
CN105281871B (zh) * | 2014-05-28 | 2020-05-08 | 三星显示有限公司 | 用于在符号编码的传输流中传送前向纠错码的方法 |
US10432353B2 (en) | 2014-12-04 | 2019-10-01 | Samsung Display Co., Ltd. | Memory-efficient methods of transporting error correction codes in a symbol encoded transmission stream |
US10749628B2 (en) | 2015-09-17 | 2020-08-18 | Nec Corporation | Terminal apparatus, control method therefor, and recording medium in which control program for terminal apparatus is stored |
CN107168681A (zh) * | 2017-03-31 | 2017-09-15 | 北京奇艺世纪科技有限公司 | 一种实时任务处理方法及装置 |
CN107168681B (zh) * | 2017-03-31 | 2020-11-06 | 北京奇艺世纪科技有限公司 | 一种实时任务处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103152126B (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101353128B1 (ko) | 부가적인 네트워크 추상화 계층 (nal) 들을 사용하여 멀티미디어 데이터를 보호하는 방법 | |
CN101272495B (zh) | 用于传输基于分组的图像帧的方法和装置 | |
CN101061659B (zh) | 自适应前向纠错的方法和设备 | |
CN106937134B (zh) | 一种数据传输的编码方法、编码发送装置及*** | |
CN101674152B (zh) | 基于前向纠错的数据传输方法、装置及*** | |
CN110943800A (zh) | 数据包的发送方法、装置及***、存储介质、电子装置 | |
CN106817192B (zh) | 一种错误估计的方法、基站及终端 | |
KR101983032B1 (ko) | 방송 및 통신 시스템에서 패킷 송수신 장치 및 방법 | |
CN104253996B (zh) | 视频数据的发送、接收方法及其装置以及传输*** | |
KR101118194B1 (ko) | 손실된 패킷 재건을 위한 방법 및 상기 방법을 수행하기 위한 디바이스 | |
CN103152126B (zh) | 基于前向纠错保护编码的数据封装方法和装置 | |
CN106303539B (zh) | 一种基于h.264视频报文类型的不等差错传输保护方法 | |
CN111935485A (zh) | 一种rs码前向纠错方法及装置 | |
KR101951659B1 (ko) | 방송 및 통신 시스템에서 수신 패킷들의 복호 방법 및 장치 | |
CN109245863B (zh) | 用于传输和接收前向纠错分组的装置和方法 | |
CN102710943B (zh) | 基于前向纠错编码窗口扩张的实时视频传输方法 | |
CN102231837B (zh) | 基于子画面群的前向纠错实时视频传输方法 | |
CN107005349B (zh) | 一种数据处理方法、基站以及终端设备 | |
CN109618164A (zh) | 一种视频编解码处理方法 | |
CN102438151B (zh) | 一种嵌入数字水印的视频流媒体传输信道的差错控制方法 | |
Blatsas et al. | A performance study of LT based unequal error protection for 3D video streaming | |
JP5474896B2 (ja) | Crcパリティコードを利用したビデオエラー検出技術 | |
CN104348577A (zh) | 改善云会议中的视频质量的重复包策略 | |
Bouazizi et al. | Distortion-optimized FEC for unequal error protection in MPEG-4 video delivery | |
Lynch et al. | Syntax and discontinuity based error concealment for compressed video in a packet environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C53 | Correction of patent of invention or patent application | ||
CB03 | Change of inventor or designer information |
Inventor after: Li Houqiang Inventor after: Zhu Haibo Inventor after: Zhang Dong Inventor before: Zhu Haibo Inventor before: Zhang Dong Inventor before: Li Houqiang |
|
COR | Change of bibliographic data |
Free format text: CORRECT: INVENTOR; FROM: ZHU HAIBO ZHANG DONG LI HOUQIANG TO: LI HOUQIANG ZHU HAIBO ZHANG DONG |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |