具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
通常分组码的分组越长纠错能力越强,为此本发明实施例通过扩大参与编码节点数目来获得纠错增益。即本发明实施例提供了一种分组码编解码改进方案,从而可以提高基于FEC的传输技术的纠删能力。进一步地还可以在不增加冗余度,即不增加带宽负担的情况保证相应的纠删能力,或者,在保证相应的差错恢复能力的前提下,减小所添加的冗余数据占用带宽。
本发明实施例提供的基于前向纠错的数据传输方案中分别包括相应的基于前向纠错的数据发送方法及相应的基于前向纠错的数据接收方法。
在基于前向纠错的数据发送方法中,在获取待发送的原始数据后,根据待发送的原始数据及已知的插入符号按照预定的策略生成对应的数据校验信息,并发送生成的数据校验信息以及相应的待发送的原始数据。具体地,可以对根据原始数据生成的源符号利用相应的插入符号按照预定的策略进行处理,以获得相应的数据校验信息,相应的插入符号可以但不限于为源符号大小的整数倍或者与源符号大小相等。
在数据发送过程中,生成对应的数据校验信息的过程可以采用以下任一处理方式实现:
处理方式一:对待发送的原始数据进行符号填充处理,该符号填充处理是指按照第一预定策略将已知的插入符号填充到待发送的原始数据中,以生 成引入了插入符号的源块,并根据完成符号填充处理后的数据(即相应的源块)生成对应的数据校验信息;相应的第一预定策略可以但不限于为在待发送的原始数据包含的多个符号中以预定数量的间隔插入相应的插入符号,对于同一待发送的原始数据,其对应的间隔可以为等间隔,也可以为不等间隔,如在各个符号之间插入相应的插入符号,或者,假设待发送数据包含1-7个顺序排列的符号,则可以在1、2个符号之间,3、4符号之间,以及6、7符号之间插入相应的插入符号;
处理方式二:对待发送的原始数据及获取的已知的插入符号按照第二预定策略进行运算编码处理,获得对应的数据校验信息;相应的第二预定策略是指在对待发送的原始数据生成的源块进行编码处理以获得数据校验信息的过程中以哪种方式引用相应的插入符号,例如,在编码处理过程中,每若干个符号便引入一个插入符号,以进行数据校验信息的编码运算处理。
在上述处理过程中,为节省发送带宽,还可以在发送数据校验信息的过程中,预先在生成的数据校验信息包含的多个修复符号中选择一个或多个修复符号,之后,仅发送选择的修复符号,其中,相应的修复符号作为数据校验信息的实际载体,这样,可以有效节省数据发送过程中的带宽占用量。在选择修复符号的过程中,具体可以采用各种不同的选择策略,例如,选择前k个修复符号,或者,平均间隔选择k个修复符号,或者,随机选择k个修复符号,或者,依据编码时候的异或次数选择k个修复符号,等等。
进一步地,在发送待发送的原始数据的过程中,可以将待发送的原始数据独立于数据校验信息全部发送;或者,也可以在待发送的原始数据包含的数据符号中选择部分数据符号独立于数据校验信息进行发送,以节省发送带宽,具体可以根据数据校验信息所采用的编码算法进行部分数据符号的选择,例如,选择包含在最多个数据校验信息包含的修复符号中的数据符号进行主动丢弃,余下的数据符号作为选择的需要发送的部分数据符号;或者,也可以直接发送全部或部分生成的数据校验信息,而无需独立于数据校验信息进行待发送的原始数据的发送处理,也就是说:也可以发送预定量的数据 校验信息,且根据该预定量的数据校验信息在接收端能够解码获得所述原始数据,此时,由于该数据校验信息中包含待发送的原始数据信息,则相当于在发送端发送了相应的待发送的原始数据,即接收端可以根据收到的数据校验信息解码获得发送端发送的原始数据。
在基于前向纠错的数据接收方法中,首先,从接收到的数据包中获取数据校验信息和原始数据,其中,相应的数据校验信息是在发送端根据待发送的原始数据及已知的插入符号按照预定的策略生成;之后,便可以根据数据校验信息、原始数据及已知的插入符号恢复获得发送端发送的原始数据。
在数据接收处理过程中,相应的恢复获得发送端发送的原始数据的过程可以但不限于采用以下任一恢复处理方式实现:
恢复处理方式一:从接收到的原始数据包中获取原始数据,对接收到的数据包中获取的原始数据进行符号填充处理,之后,再结合接收的相应的数据校验信息进行解码操作,以便于恢复获得丢失的原始数据,相应的符号填充处理是指按照第一预定策略将已知的插入符号填充到原始数据中;
恢复处理方式二,对接收到的原始数据包中获取的原始数据,从接收到的数据校验信息数据包中解析获得数据校验信息,利用收到的数据校验信息、原始数据及已知的插入符号按照第二预定策略进行解码处理,以恢复获得丢失的原始数据;
恢复处理方式三,对接收到的数据包中获取数据校验信息,对接收到的数据校验信息及已知的插入符号按照第一预定策略或第二预定策略进行解码处理,以恢复获得发送端发送的所有原始数据。
其中,对于恢复处理方式一和恢复处理方式二的情况,除丢失的原始数据外,其他原始数据均可以从接收到的原始数据包中获得,进而可以获得所有发送端发送的原始数据。
在上述处理过程中,相应的发送端与接收端之间可以预先设定相应的预定的策略、第一预定策略、第二预定策略等FEC相关配置参数;或者,也可以在数据传送之前,发送端与接收端之间通过信息交互确定相应的预定的策 略、第一预定策略、第二预定策略等FEC相关配置参数,例如,可以由发送端将相应的FEC相关配置参数通知给接收端,等等。
本发明实施例还提供了相应的基于前向纠错的数据发送装置,其具体实现结构如图1A和图1B所示,可以包括:
(1)数据获取单元11,用于获取待发送的原始数据,即获取需要发送给接收端的原始数据。
(2)校验信息生成单元12,用于根据数据获取单元11获取的待发送的原始数据及已知的插入符号按照预定的策略生成对应的数据校验信息;
在该装置中,相应的校验信息生成单元12具体可以采用以下两种结构中的任一种结构实现,其中:
校验信息生成单元12的一种实现结构参照图1A所示,可以包括:
第一源块填充单元121,用于将待发送的原始数据及已知的插入符号按照第一预定策略写入到源块对应的存储空间中作为相应的源块数据;
第一编码单元122,用于对第一源块填充单元121发来的源块数据进行编码处理,以获得对应的数据校验信息。
校验信息生成单元12的另一种实现结构参照图1B所示,可以包括:
第二源块填充单元123,用于将待发送的原始数据写入到源块对应的存储空间中作为相应的源块数据;
第二编码单元124,用于将第二源块填充单元123发来的源块数据与已知的插入符号按照预定的第二预定策略进行运算编码处理,以获得对应的数据校验信息。
(3)数据发送单元13,用于发送校验信息生成单元12生成的数据校验信息以及数据获取单元11获取的待发送的原始数据。
在该装置中,相应的数据发送单元13还与校验信息选择单元14连接,该校验信息选择单元14用于在所述数据校验信息包含的多个修复符号中选择一个或多个修复符号,并将选择的修复符号传递给数据发送单元13,以通过该数据发送单元13发送部分修复符号。
进一步地,在数据发送过程中,相应的数据发送单元13还可以直接与数据获取单元11连接,以用于将待发送的原始数据全部独立于数据校验信息进行发送。或者,数据发送单元13还可以与数据选择单元15连接,通过该数据选择单元15在待发送的原始数据包含的数据符号中选择部分数据符号,并通过数据发送单元13独立于数据校验信息进行发送。或者,数据发送单元13还可以与校验信息生成单元12连接,以用于发送全部或部分数据校验信息,此时,由于相应的数据校验信息中包含待发送的原始数据,故无需单独进行待发送的原始数据的发送处理;在发送部分数据校验信息时,相应的数据发送单元13则可以与上述校验信息选择单元14连接。
本发明实施例中,还提供了相应的基于前向纠错的数据接收装置,其具体实现结构仍参照图1A和图1B所示,可以包括:
(1)校验信息获取单元16,用于从接收到的数据包中获取数据校验信息,相应的数据校验信息是在发送端根据待发送的原始数据及已知的插入符号按照预定的策略生成。
(2)原始数据获取单元17,用于根据校验信息获取单元16获取的数据校验信息、已知的插入符号和从接收到的数据包中获得的原始数据恢复获得发送端发送的原始数据;
进一步地,参照图1A所示,该原始数据获取单元具体可以包括:
第一原始数据接收单元171,用于从接收到的数据包中获取发送端发送的原始数据;
丢失数据恢复单元172,用于对第一原始数据接受单元171获取的原始数据进行符号填充处理,并结合所述数据校验信息进行解码操作,恢复获得丢失的原始数据,该符号填充处理是指按照第一预定策略将已知的插入符号填充到所述原始数据中;或者,用于对校验信息获取单元16获取的数据校验信息、已知的插入符号和第一原始数据接受单元171获取的原始数据按照第二预定策略进行解码处理,以恢复获得丢失的原始数据。
或者,参照图1B所示,该原始数据获取单元具体可以包括第二原始数据 接收单元173,用于对校验信息获取单元16获取的数据校验信息及已知的插入符号按照第第一或第二预定策略进行解码处理,恢复获得发送端发送的所有原始数据。
本发明初稿例还提供了一种基于前向纠错的数据传输系统,其具体实现结构如图1A和图1B所示,上述基于前向纠错的数据发送装置及上述基于前向纠错的数据接收装置,以实现数据的传送处理。
在本发明的实施例中,通过插入预定的插入符号的方式扩大参与编码节点数目,且引入的预定的插入符号可以认为是100%成功传递到接收端,这样,便可以大大提高丢失数据恢复的能力。同时,而对于生成的修复符号的选择性发送,则可以使得在不增加冗余的前提下提高数据恢复能力,或者说,在扩大参与编码节点数目后,通过有效的选择发送修复符号,还可以在发送少量冗余信息的情况下达到预期的恢复概率,这一点已经通过相应的仿真实验的结果得以证明。
下面将结合附图对本发明的几个具体实施例进行详细说明。
实施例一
在该实施例中,以IPTV实时媒体播放场景为例,对相应的基于FEC编码的数据传送及接收处理过程进行说明
(一)数据发送端
在IPTV实时媒体播放场景中,相应的数据发送端可以为服务器侧,参照图2所示,在服务器侧具体可以采用的处理过程包括:
(1)由源块构造模块(即第一源块填充单元121)缓存待发送的原始数据,并对其进行分组,完成分组处理后,将同组数据按预定规则生成以数据符号为最小单位的包含若干个源符号和预设插入符号的源块数据;
(2)由第一编码模块对上述源块构造模块产生的源块数据,依据特定的编码算法、冗余度信息配置等生成FEC修复符号(即数据校验信息,也可以称为修复数据);
(3)由选择发送模块(可以包括校验信息选择单元14和数据选择单元15 中的至少一项)依照预定规则,选择最终发送的数据信息,包括选择发送生成的FEC修复符号和/或选择发送相应的原始数据;
(4)由发送模块(即数据发送单元13)对上述选择发送模块选出的需要发送的FEC修复符号添加FEC标识(如添加FEC头信息等)以及进行下层协议封装,之后,通过网络传输至终端侧;在发送过程中修复符号和原始数据可以通过同一端口进行发送,也可以通过不同的端口进行发送。
(二)数据接收端
在IPTV实时媒体播放场景中,相应的数据接收端可以为终端侧,仍参照图2所示,在终端侧具体可以采用的处理过程包括:
(1)通过源块重构模块(即第一原始数据接收单元171)收集并解析具有相同源块编号的原始数据包,并采用与编码端(即数据发送端)按同样的规则填充生成FEC源块,该FEC源块包括源符号和预设插入符号,之后,将生成的FEC源块提供给解码模块作为其待解码的原始数据;
(2)利用修复数据收集模块(即校验信息获取单元16)收集具有相同源块编号的修复数据包,并解析获得对应的解码相关信息(如解码向量等),以便于为解码模块提供修复数据以及对应的解码相关信息;
(3)第一解码模块(包括丢失数据恢复单元172)获取源块重构模块及修复数据收集模块传递来的信息后,依据特定的解码算法,结合相应的待解码的原始数据、修复数据、预设数据(如预定的插入符号等信息)及对应的解码信息进行解码,并将恢复出的数据包发送上层。
以上处理过程中,过程(1)、(2)的处理顺序不分先后。
下面将对该实施例中,服务器侧及终端侧的具体处理过程进行描述。
(一)服务器侧
在服务器侧,源块构造模块接收原始数据,并生成以数据符号为最小单位的包含若干个源符号和预设插入符号的源块数据,所述的预设插入符号可以是编码侧与解码侧固定配置的,也可以是双方通过信息交互确定的;第一编码模块对相应的源块数据依据设定的编码算法及冗余度信息配置生成FEC 修复符号数据;之后,由发送模块按照选择发送模块生成的选择策略选择出需要的FEC修复符号,与原始数据一起发送到网络中,以传送给终端侧。
进一步地,如图3A所示,相应的处理过程包括以下步骤:
步骤1,服务器与终端侧确定相关预设信息;
相应的预设信息可以包括:预定的插入符号的数据值(比如全0或全1等)、插入符号在源块中的相对位置以及插入规则(如间隔插入或在sourceBlock尾插入等)、编码图样等信息;
相应的预设信息可以是预先配置于服务器与终端侧,或者,也可以在数据流发送前通过服务器与终端侧之间的通信确定。
步骤2,以字节为单位按预定参数设定符号大小(SymbolSize),为源块(SourceBlock)分配足够大的存储空间。
步骤3,由上层获取需编码的数据包(即获取下一个源数据包),在头部加上必要的信息(如该数据包的长度和对应数据流的ID号),然后按符号大小进行划分、重组填充放入源块S;
该步骤3具体可以包括:
步骤31,获取下一个源数据包;
步骤32,将该源数据包的头部加上必要信息后以源数据符号为单位进行划分,以划分获得一个或多个源数据符号;
若不能被划分为整数数量的源数据符号,则在该数据包的末尾进行填充补0(Padding),以保证会填充后可以划分为整数数量的源符号数据;
步骤33,按顺序依次获取该源数据包划分获得的各源数据符号,并将其填入步骤2中为源块分配的相应存储空间中;
步骤34,在步骤33执行填充操作的过程中,每填入一个或多个源数据符号,则在相应的源数据符号后填入一个或多个预设的插入符号;
通过上述步骤生成的源块S的格式范例可以如下表所示,其中ID(标识)和Length(长度)为源块填充时候在每个源数据包的头部添加的FEC头。
步骤35,判断当前的源数据包划分获得的各组源数据符号是否均已经填充到相应的存储空间中,若是,则执行步骤36,否则,执行步骤33;
步骤36,判断在源块S中(即相应的存储空间中)是否填充入足够的源数据符号,若是,则执行步骤4,否则,执行步骤31;
即重复执行步骤31至步骤36,直至源块S中源数据符号的数目达到预定门限,则将生成源块S送入编码模块执行步骤4。
步骤4,对源块S中源数据符号进行FEC编码,生成相应的修复符号,并执行步骤5;
具体地,第一编码模块利用源块数据中的源数据符号,依据特定的编码算法、冗余度信息配置生成多于实际需发送的FEC修复符号:
假定源块S里有K个符号(包括源数据符号和插入符号),又假定需要发送冗余度为r的修复数据,需要生成R个修复符号(R>K×r),则采用(K:R)的编码图样对源块S中的K个符号进行编码运算(如矩阵乘法等),即对K个符号依据编码图样以符号为单位进行异或叠加,从而生成R个修复符号;
步骤5,按照预定的规定选择需要发送的修复符号及原始数据包,并执行步骤6;
进一步地,可以由选择发送模块对生成的FEC修复符号按照预设规则保 留需要的FEC修复符号,例如是,可以按顺序取前面的K×r个修复符号或者间隔的选取K×r个修复符号或者随机的选取K×r个修复符号或者其他结合编码算法的优选规则选取K×r个修复符号,之后,将选择出的修复符号交给发送模块;选择发送模块同样可结合修复符号选择最终发送的源数据包;
步骤6,将选择的修复符号及原始数据包封装后发送;
进一步地,发送模块可以将选择出需发送的一个或多个修复符号作为修复包,添加必要FEC标识信息等,封装为UDP报文及其他下层封装格式发出至网络传输;发送模块还将需发送的原始数据包加上必要的FEC标识信息等,封装为UDP报文及其他下层封装格式发送至网络传输。
在上述处理过程中,相应的34步骤执行的填充预设插入符号的操作也可以在将所有的源数据符号均填入到源块S后执行,如图3B所示,具体可以采用以下过程替换上述步骤34至步骤36:
步骤34’,判断源块中是否已经填入了足够的源数据符号,若是,执行步骤35’,否则,执行步骤33;
步骤35’,在生成只包含源数据符号的源块S中,将与解码侧事先约定好规则生成预定的插入符号,并将预设插入符号按照预定方式(如等间隔插入或者随机插入或者简单的置于源块的后面等方式)填充入源块S中,生成一个新的源块S,并执行上述步骤4。
(二)终端侧
在终端侧,源块重构模块收集具有相同源块编号的原始数据包,与编码端按同样的规则填充生成FEC源块(包括源数据符号和插入符号),相应的同样的规则可以是编码侧与解码侧预先配置,也可以是双方交互确定;终端侧的修复数据收集模块收集具有相同源块编号的修复数据包,并解析对应符号的解码相关信息(如解码向量等);将收到FEC源块和相关修复符号数据以及解码信息传递给第一解码模块,由解码模块依据预定的解码算法进行解码操作。在若解码成功后,将恢复出的所有数据包发送给上层。
进一步地,如图4所示,相应的处理过程包括以下步骤:
步骤1,终端侧与服务器侧确定相关的预设信息
相应的预设信息可以包括:插入符号的数据值(如全0或全1等)、插入符号在源块中的相对位置、编码采用的编码图样等信息;
该相关的预设信息可以为预先配置于终端侧及服务器侧,也可以为双方在数据流发送前通过交互确定。
步骤2,初始化源块的存储空间,即为源块分配相应的存储空间;
步骤3,获取下一个下层FEC数据包,该FEC数据包可能是FEC源数据包
(即原始数据),也可能是包含修复符号的修复数据包;
步骤4,解析下层FEC数据,获得数据包中的FEC标识信息;
步骤5,判断收到的数据包是否为FEC源数据包,若是,则执行步骤6,否则,执行步骤10;
具体可以通过从下层数据包中解析获得的FEC标识信息区分相应数据包是否为FEC源数据包,或者也可以通过其他区分手段(如不同端口信息等)区分出原始数据和修复数据来;
步骤6,将原始数据包及FEC头信息按照预定的规则对包含的符号进行划分,获得一个或多个符号;
在划分确定符号组过程中,若某个原始数据和FEC头信息不能被划分为整数个符号时,则进行Padding补0,以便于能够将原始数据和FEC头信息划分为整数数量的符号。
步骤7,根据源块重构模块从下层数据包净载中剥离的FEC标识信息,将划分获得的一个或多个符号插入到为源块分配的存储空间中对应位置;
具体地,源块重构模块从下层数据包净载中剥离的FEC标识信息(即FEC头信息),并还原为原始上层协议包后,根据相应的FEC标识信息解析确定原始数据包含的各个符号对应的源块编号以及位置信息,并根据相应的源块编号及位置信息将各个符号组包含的符号插入相应源块的存储空间中的对应位置,若发生丢包,则在相应的符号位置处补0;
步骤8,在将上述符号插入源块的过程中,将与编码侧预先约定好的预定 的插入符号按照与编码侧的相同的策略填充到源块中,并执行步骤9;
步骤9,判断当前原始数据包包含的各个符号是否已经完全填充到源块对应的存储空间中,若是,则执行步骤12,否则,执行步骤7;
对于上述步骤8,也可以在将上述符号插入源块的过程完成后执行,也就是说,可以在步骤9中判断结果为“是”时,执行步骤8,之后,再执行步骤12,此时,执行步骤7之后,可以直接执行步骤9即可。
步骤10,通过修复数据接收模块收集具有相同源块编号的修复数据包,对相应的修复数据包(或称校验数据包)进行处理,根据FEC标识信息将修复数据包划分为多个修复符号;
步骤11,修复数据接收模块还解析其对应符号的解码信息,例如解码向量等信息,并缓存相应的解码信息,之后,执行步骤12;
步骤12,判断是否收到足够数量的符号或等待时间超过预设门限,若是,执行步骤13,否则,执行步骤3;
步骤13,解码模块对接收到的原始数据符号进行FEC解码操作;
步骤14,解码恢复出丢失的数据包,并向上层传递;
即在将需要进行FEC解码恢复的源块数据、收到的相关修复符号以及解码信息送入解码模块后,解码模块还依据预定的解码算法,按照与编码侧同样的编码图样或规则,从原始数据符号和修复符号中,恢复出丢失的原始数据符号,并在解码成功后,将恢复出的数据包向上层发送;
具体地,若编码侧采用(K:R)的编码图样,则解码侧依据设定的编码符号数量K和所收到的修复符号的数量r,采用(K:r)的解码方法进行解码运算,解码恢复出丢失的数据包。
下面将以一个具体的应用实施例为例,对相应的编码及解码过程进行详细地描述。
假设归属同一源块的2个大小均为320字节的RTP(实时传输协议)数据RTP1和RTP2,其在网络传输过程中数据RTP2丢失。且假设相应的编码符号大小为160字节,则每个RTP数据占用2个符号(共320字节),无需对两个 RTP数据进行Padding操作。此时,相应的2个RTP数据的编码发送及解码恢复过程具体可以包括:
(一)在服务器侧的编码发送过程
服务器向终端发送SDP(会话描述协议,Session Description Protocol)信息,告知终端侧相应的插入符号的数据值(比如全0或全1)、插入符号在源块中的相对位置、同次编码所使用的编码图样等预设信息。当然,相应的预设信息也可以预先固定配置于服务器和终端上。
参照图5所示,完成相应的预设信息的设置后(如收到终端的确认信息后),则可以由上层收集2个RTP数据包,并按顺序放入源块S’中,相应的放入源块S’的过程具体可以包括:
(1)首先填入第一个RTP数据,其恰好占用2个Symbol(符号),故无需进行padding处理;
(2)继续填充第二个RTP数据,共占用4个Symbol,填充数据达到源块预设门限(如4个Symbol),则可以进行预定的插入符号的填充。
相应的填充预定的插入符号的过程包括:先根据预先设定好的生成插入符号的策略(如以1010......的策略或全0或全1的策略等)生成与编码符号大小相等的预定的插入符号,之后。将生成的预定的插入符号按照预定的间隔方式填充入源块S’中,生成一个待编码的源块S。
对生成的待编码的源块S进行编码依据设定的编码算法及冗余度信息配置生成FEC修复符号,在该源块S里共有8个符号(包括4个源符号和4个插入符号),需要生成4个修复符号,并采用(8:4)的编码图样采用相应的编码算法对源块S中的8个符号进行编码运算(例如,采用矩阵乘法,即(原始符号按编码矩阵中的对应位是否为1进行异或叠加),生成相应的4个修复符号。
生成相应的4个修复符号后,则可以由选择发送模块对生成的FEC修复符号按照预定的选择策略选择发送其中的部分修复符号,例如,可以按顺序选取发送前面的2个修复符号,等等。
对于源块S中的原始符号,则将全部按相应的顺序进行发送。
在发送选择的修复符号及原始符号过程中,具体可以以单个symbol为单位,将修复符号添加上相应的FEC标识信息封装为2个UDP报文发出至网络传输;将2个原始RTP报文加上相应的FEC标识信息,再封装为UDP报文发送至网络传输。
(二)在终端侧的接收解码过程
在终端侧,若接收到服务器侧发来的SDP信息,则由接收到的SDP信息中获取FEC相关预设信息,并向服务器发回确认信息。
参照图6所示,终端侧在从网络接收到UDP原始数据包后,则剥离FEC添加字段(即FEC标识信息),还原为原始上层协议包,并解析出相应的数据包包含的符号所归属的源块编号以及位置信息,之后,将相应的符号填充入相应源块的对应位置处。
将相应的符号填充入相应的源块后,还将与编码侧约定的插入符号(如1010......等)按照预定的间隔插入方式填充入源块中。
终端侧还收集具有相同源块编号的修复数据包,并解析出相应的两个修复符号以及对应的解码信息(如编码向量等)。
由于RTP2丢失,故终端侧在接收到RTP1数据后100ms内,未接收到RTP2数据,则判定丢包,并在源块中数据RTP2对应的符号位置补0。
将需要FEC解码恢复的源块数据、收到的相关修复符号以及解码信息依据设定的解码算法,按照与编码端(即服务器侧)相同的编码图样或规则,从原始数据符号和修复符号中恢复出丢失的原始数据符号。由于在编码侧采用(8:4)的编码图样,则解码侧将依据约定的源符号数量8和所收到的修复符号的数量2,采用(8:2)的编码图样结合相应的解码信息(如编码向量等),使用高斯消元法进行解码运算。
在完成上述解码操作,并成功解码获得相应数据后,则将恢复出的RTP1、RTP2数据包发送上层。
实施例二
在该实施例二中,是在对源块进行编码,以生成修复符号的过程中引入 预定的插入符号,而在生成源块的过程中并不对原始数据进行预定的插入符号的填充处理。
下面将结合附图对该实施例中的服务器侧及终端侧采用的处理过程分别进行说明。
(一)服务器侧
服务器可以向终端发送控制信息,在相应的控制信息中描述与终端侧约定的所述预定的插入符号的数据值(如全0或全1等)、插入符号在源块中的相对位置等预设信息;或者,相应的预设信息也可以是预先配置于服务器侧与终端侧中。
如图7所示,服务器侧确定待发送的原始数据,并通过源块顺序填充模块(即第二源块填充单元123)处理获得相应的源块数据,之后,再将相应的源块数据送入第二编码模块进行生成修复符号的处理,该生成修复符号的过程如图8所示,包括:
依据设定的编码算法、冗余度信息配置,并引入相应的预定的插入符号生成多于实际需发送的FEC修复符号,当判断确定已经生成足够数量的修复符号后,将生成的修复符号作为修复数据输出。
在上述处理过程中,编码模块可以在编码计算每一个FEC修复符号时加入预设插入符号参与运算,具体可以但不限于将预设插入符号中的特定集合以特定的顺序与源符号进行异或运算,例如,可以将第一个修复符号由第1、3、5原始符号与预设第1符号异或生成,第二个修复符号由2、3、4、6原始符号与预设第2符号进行异或生成,等等。
在对生成的修复符号及原始数据进行发送过程中,可以通过选择发送模块(包括校验信息选择单元14和数据选择单元15中的至少一项)根据预定的选择策略选择出需要的FEC修复符号,然后合并、封装为UDP报文发送至网络传输;以及将原始数据报文加上相应的FEC标识信息,再封装为UDP报文发送至网络传输。即相应的选择发送模块按照预设规则保留需要的FEC修复符号,同样可结合修复符号选择最终发送的源数据包(即原始数据)。
选择发送模块输出的信息由发送模块将选择出的FEC修复符号加上相应的FEC标识信息,再封装为下层数据包发送至网络传输。
(二)终端侧
在终端侧,若从服务器侧接收到相应的控制信息,且从控制信息中获取所需预设信息,则可以向服务器侧发回确认信息;当然,若在终端侧预先配置相应的预设信息则无需执行接收控制信息及回复确认信息的操作。
参照图7所示,源块数据插入模块(即第一原始数据接收单元171)收集具有同样源块编号的原始数据包,与发送端采用同样的规则填充生成FEC源块,进而获得相应的原始数据。
修复数据接收模块(即校验信息获取单元16)收集具有同样源块编号的修复数据包,将收到的相关修复符号以及解码相关信息(如解码向量)传递给第二解码模块。如图9所示,第二解码模块将生成的源块数据和接收到的修复数据一起,引入与编码侧事先约定好的预设插入数据(即预定的插入符号)加入编码运算的逆运算(即FEC解码处理过程),从而按照设定的解码算法恢复出丢失的原始数据符号。
在终端侧解码成功后,便可以将恢复出的所有数据包(即发送端发送来的所有原始数据)发送给上层。
实施例三
在该实施例三中,如图10A和图10B所示,与实施例一及实施例二提供的实现方案类似,区别在于相应的选择发送模块包括编码数据选择发送模块(相当于校验信息选择单元14)和原始数据选择发送模块(相当于数据选择单元15)独立设置。其中,相应的编码数据选择发送模块和原始数据选择发送模块可以采用相同的选择策略对原始数据与修复数据进行选择,也可以采用不同的选择策略对原始数据与修复数据进行选择。
具体地,在服务器侧,可以在发送数据之前,先向终端发送控制信息,在控制信息中描述与终端侧预先设定的插入符号的数据值、插入符号在源块中的相对位置等预设信息;例如,预定的插入符号为全0时,控制信息中可以 描述为插入符号insertBit=00,插入符号为1010...时,控制信息中可以描述为插入符号inserBit=10...;以及,控制信息中还可以包括间隔均匀插入模式insertMode=0,或者,尾部填充模式insertMode=1...;或者,控制信息中也可以包括插入间隔insertStep=1、2、3、...;等等。
参照图10A所示,与实施例一类似,服务器侧的源块构造模块将引入预定的插入符号后获得的源块数据传送给第一编码模块,以生成相应的修复符号,并传送给编码数据选择发送模块进行选择操作,选择后通过发送模块发给终端侧;同时,原始数据还传送到原始数据选择发送模块进行选择,并通过发送模块发给终端侧。终端侧的源块重构模块接收原始数据包,修复数据接收模块接收修复符号数据包,并分别传送给第一解码模块进行解码处理,获得原始数据,并将恢复出的数据发送上层。
参照图10B所示,与实施例二类似,将源块顺序填充模块构造的源块数据送入第二编码模块,并由第二编码模块依据设定的编码算法、冗余度信息配置等信息生成若干FEC修复符号并传送给编码数据选择发送模块按照预定的策略进行选择操作,选择后通过发送模块发给终端侧;同时,原始数据还传送到原始数据选择发送模块进行选择,并通过发送模块发给终端侧。终端侧的源块重构模块接收原始数据包,修复数据接收模块接收修复符号数据包,并分别传送给第二解码模块进行解码处理,获得原始数据,并将恢复出的数据发送上层。
在该实施例三中,在编码数据选择发送模块根据选择策略选择出需要的发送的FEC修复符号,以及原始数据选择发送模块根据选择策略选择出需要的发送的源数据符号的过程中,编码数据选择发送模块与原始数据选择发送模块可以通过互相交互信息,以调整各自采用的选择策略,从而可以确定相应在整体性能上达到最优的选择策略。
实施例四
在该实施例四中,并不独立发送原始数据,而是直接将编码获得的修复符号中的全部或部分发送给终端侧,以使得终端侧可以获得发送端发送的原 始数据。
在服务器侧,具体可以通过向终端发送RTSP(Real Time StreamingProtocol,实时流协议)信令的方式,描述与终端侧约定的插入符号的数据值、插入符号在源块中的相对位置等预设信息;终端侧接收到服务器的FEC相关RTSP信令后,解析出FEC相关预设信息后向服务器发回确认信息。
或者,相应的预设相关信息也可以预先固定配置于服务器与终端上。
如图11A所示,在源块构造模块引入预定的插入符号并生成相应的源块数据后,将源块数据送入第一编码模块,由第一编码模块依据设定的编码算法、冗余度信息配置等生成若干编码符号(即修复符号),相应的编码符号中包含了数据校验信息和原始数据;将生成的编码符号通过选择发送模块按照预定的策略选择发送给终端侧。在终端侧由编码数据接收模块及第二解码模块(相当于第二原始数据接收单元173)解码收到的编码符号,并恢复获得相应的发送端发送的原始数据。
如图11B所示,在源块顺序填充模块生成源块数据后,由第二编码模块引入预定的插入符号对所述源块数据进行编码处理,生成相应的编码符号,其中在编码计算每一个FEC编码符号时可以加入设定的插入符号参与编码运算,相应的编码符号中包含了数据校验信息和原始数据;将生成的编码符号通过选择发送模块按照预定的策略选择发送给终端侧。在终端侧由编码数据接收模块及第二解码模块(相当于第二原始数据接收单元173)解码收到的编码符号,并恢复获得相应的发送端发送的原始数据。
需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
综上所述,本发明实施例提供的针对分组码的应用层FEC编解码改进方 案不仅能够在不增加额外发送冗余的情况下提高接收端恢复丢失数据的能力,而且,还可以在保证数据恢复能力的情况下降低发送的冗余数据的数量,从而减轻通信过程中的带宽负担。本发明实施例既可以基于3GPP中的独立成层FEC方案扩展实现,也可独立结合其他应用层FEC方案实施。进一步地,通过选择发送原始数据及修复符号还可以在一定程度上实现针对数据包发送的速率控制操作,增加了数据传输过程的可控性。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。