具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如附图1所示,本发明实施例提供了一种前向纠错编码方法,该方法包括以下步骤:
步骤11:利用多个源数据构造源数据块;每个源数据对应一个位置信息,该位置信息用于标识该源数据在源数据块中的位置。
源数据可以是各种格式的数据包,例如RTP(Real-time TransferProtocol,实时传输协议)包、RTCP(Real Time Control Protocol,实时控制协议)包、IP(Internet Protocol,网际协议)包、TCP(Transfer Control Protocol,传输控制协议)包、UDP(User Datagram Protocol,用户数据报协议)包等;或者,源数据可以是上层净载荷(payload),例如应用层程序输出的净载荷,具体的有多媒体数据源输出的视频帧、音频帧等。
利用多个源数据构造源数据块的实现方式可以参考图2,图2示出了一个源数据块,源数据块的每一行表示固定长度的数据,每一行的数据称为一个符号(Symbol),每一个符号对应一个ESI(Encoding Symbol ID,编码符号标识),ESI是收发双方约定的一种标识,可以按照约定的规则编号,例如使用码表或者从一个初值开始顺序递增或递减,图2中的ESI示例性的使用了自然数顺序编号,源数据块左边的一列数字(1,2,…K,K+1,K+2,…M,…M+n)即为每个符号对应的ESI。每个源数据在源数据块中可以占用一个或者多个符号的存储空间,本发明实施例对此不做限定。
参考2所示,在每收到一个源数据时,根据该源数据对应的流(flow)确定该源数据的流标号F,不同的流对应不同的流标号,并根据该一个源数据的长度(length)确定其长度值L;之后,在源数据块中填写流标号F、长度值L,并将源数据填写入数据区D;由于源数据的长度可变,数据区D占用的最后一个符号可能还有剩余的位,此时,可以对最后一个符号中剩余的位进行填充,以便每一个源数据的流标识F都在一个符号的开始,图2中的填充区P即为源数据占用的最后一个符号中剩余的位,并且,当数据区D正好填满最后一个符号时,该源数据占用的最后一个符号中没有填充区P。这样,每个源数据都会在源数据块中占用一个或多个符号,每收到一个源数据就将该源数据增加到源数据块的最后,当接收了一定的源数据后,例如设定每个原数据块中的源数据为100个符号,则不再在该源数据块中增加新的源数据;如果收到新的源数据,则构建一个新的源数据块,将新的源数据增加到新的源数据块中。
每个源数据对应的位置信息,是用于标识该源数据在源数据块中的位置,因此任何能够标识该源数据在源数据块中的位置的信息都可以作为源数据对应的位置信息,例如,源数据对应的位置信息可以是源数据起始行的ESI。当然,本领域技术人员可以使用的其他任何能够标识该源数据在源数据块中的位置的信息也都在本发明的保护范围之内。在图2中,每个源数据在源数据块中的位置可以用该源数据的起始行的ESI来表示,例如,源数据块中的第一个源数据占用了符号1(即第1行)和符号2,则该第一个源数据的位置为1,而源数据块中的另一个源数据占用了符号K、符号K+1和符号K+2,则该的另一个源数据的位置为K。
步骤12:对构造的源数据块进行前向纠错编码,生成校验数据。
在步骤11利用源数据构造了源数据块之后,进一步对该源数据块进行前向纠错编码,生成一个或多个校验数据,这里的前向纠错编码可以使用各种前向纠错编码算法,对此本发明不做限定;其中,可以对不同的源数据分别进行校验生成多个校验数据,不同的校验数据由不同的源数据进行前向纠错编码获得,或者,对源数据块中的全部源数据生成一个校验数据。在生成校验数据之后,可以将校验数据也增加到源数据块的最后,此时,每个校验数据对应一个位置信息,该位置信息用于标识该校验数据在源数据块中的位置,参考图2,如果M-1行是源数据块中最后添加的源数据,则将校验数增加到M行至M+n行中,校验数据可以采用ESI(图2中的M,…M+n)作为位置信息;或者,生成校验数据后,校验数据可以作为单独的一个数据块,此时,校验数据不需要位置信息或采用独立的位置信息。实际中校验数据可以占用源数据块的一个或多个符号,例如图2中的校验数据为符号M至符号M+n,校验数据在源数据块中共占用了n+1个符号。
步骤13:通过第一数据包发送源数据块中的源数据,通过第二数据包发送校验数据和源数据的位置信息;其中,第二数据包中携带源数据的位置信息与源数据的对应关系。
源数据的位置信息可以是:包括每个源数据对应的位置信息;或者,包括每个源数据对应的位置信息和最后一个源数据的结束位置;或者,包括每个源数据对应的位置信息和最后一个源数据的长度;或者,包括每个源数据对应的位置信息和源数据总共的长度;或者,包括每个源数据对应的位置信息和每个源数据的长度;或者,包括每个源数据对应的位置信息和第一个校验数据的起始位置。由于源数据和源数据的位置信息是分开传送的,所以携带源数据的位置信息与源数据的对应关系是为了,使在第一数据包中携带的源数据与在第二数据包中携带的位置信息能够相互对应,即解码端根据该对应关系可以将第一数据包中携带的源数据与第二数据包中携带的位置信息对应起来,该对应关系的具体实现方式不限,只要能够实现源数据与位置信息的对应即可。源数据的位置信息与源数据的对应关系可以是:源数据的位置信息与源数据的编号的对应关系,或者,源数据的位置信息与源数据的序号的对应关系,或者,源数据的位置信息与源数据的其他标识的对应关系;在实际中,只需要将源数据的位置信息与源数据的标识(源数据的编号、序号或其他标识)按照一定的规则携带在第二数据包中即可,解码端可以按照相同的规则解出源数据的位置信息与源数据的标识之间的对应关系。
第一数据包和第二数据包是不同的数据包,其中,第一数据包仅用于封装源数据,第二数据包用于封装除源数据之外的其他数据或信息。在封装第二数据包时,可以将校验数据和源数据的位置信息分别封装,此时,将校验数据封装为校验数据包,将源数据的位置信息封装为位置数据包,并在校验数据包或位置数据包中携带源数据的位置信息与源数据的对应关系,校验数据包和位置数据包可以采用不同的类型标识进行区别;或者,将校验数据和源数据的位置信息封装在同一个第二数据包中,并在第二数据包中携带源数据的位置信息与源数据的对应关系。其中,如果校验数据较多,可以对校验数据进行划分,采用多个数据包进行传输,例如将校验数据占用的多个符号的数据分开传输,每个数据包中传输一个符号的校验数据。
由于源数据块的数量可能为多个,因此,在第二数据包中携带的每个源数据对应的位置信息可以进一步包括源数据块标号(SBN,Source BlockNumber),以确定源数据所在的源数据块,例如,每个源数据对应的位置信息包括SBN和起始行ESI,则根据SBN可以确定源数据所在的源数据块,根据起始行ESI可以确定源数据在该源数据块中的具体位置。另外,在具体应用中,如果源数据来自不同的数据流,在第二数据包中携带的每个源数据对应的位置信息可以进一步包括流标号F,用来区别不同的流;由于不同的流的源数据构成同一源数据块时,是否区分不同的流的数据,并不影响对该源数据块进行前向纠错编码或解码,因此,该流标号F为可选的;当位置信息中包括了流标号时,可以根据流标号对不同的流分别进行前向纠错编码和解码。当然,在实际中如果只有一个源数据块,并且所有的源数据都来自相同的流,则在第二数据包中携带的每个源数据对应的位置信息则不需包括源数据块标号SBN和流标号F。
一个源数据块对应的校验数据和源数据的位置信息,可以封装为一个或者多个第二数据包,例如,将一个源数据块对应的校验数据以符号为单位进行传输,每个符号的校验数据使用一个第二数据包传输,源数据的位置信息采用一个第二数据包传输,并在传输位置信息的第二数据包中携带源数据的位置信息与源数据的对应关系。当构造了多个源数据块时,不同源数据块对应的校验数据及其源数据的位置信息可以封装在一个第二数据包中,并在该第二数据包中携带源数据的位置信息与源数据的对应关系;或者,不同源数据块对应的校验数据及其源数据的位置信息可以分别封装在不同的第二数据包中,即每个源数据块对应的校验数据和该源数据块中源数据的位置信息封装在一个第二数据包中,并在该第二数据包中携带该源数据块的源数据的位置信息与源数据的对应关系。
在发送数据包时,分别发送第一数据包和第二数据包。第一数据包和第二数据包可以采用各种传输协议进行传送,例如RTP、UDP、RTCP等。本发明各实施例中,第一数据包和第二数据包仅是用于区别数据包类型,而不限定数据包的数量,例如:在通过第一数据包发送源数据块中的源数据时,可以将多个源数据放在一个第一数据包中发送,也可以在每个第一数据包中只携带一个源数据;在通过第二数据包发送校验数据和源数据的位置信息时,可以将多个源数据块对应的校验数据和源数据的位置信息放在一个第一数据包中发送,也可以在每个第二数据包中只携带一个源数据块对应的校验数据和源数据的位置信息;在通过第二数据包发送校验数据和源数据的位置信息时,也可以将第二数据包进一步细分为校验数据包和位置数据包,可以在每个校验数据包中只携带一个源数据块对应的校验数据,在每个位置数据包中只携带一个源数据块对应的源数据的位置信息,不同数据块对应的校验数据采用不同的校验数据包携带,不同数据块对应的位置信息采用不同的位置数据包携带。
本实施例中,在步骤11之前,还可以包括步骤10:获取多个源数据。获取多个源数据的方式可以是:接收通过网络传输的多个数据包;或者,接收上层净载荷。当接收通过网络传输的多个数据包时,由于该接收的多个数据包可以直接转发,因此,该接收的多个数据包即是步骤13中的第一数据包。
本实施例中,通过在编码端对源数据块中的源数据进行前向纠错编码,生成校验数据,并将源数据在源数据块中的位置信息和校验数据携带在第二数据包中向解码端发送,而源数据通过第一数据包向解码端发送,使得源数据与校验数据以及源数据的位置信息分开采用不同的数据包发送,不改变承载源数据的第一数据包的结构,从而没有前向纠错功能的解码端可以丢弃第二数据包,只根据第一数据包进行解码,同时,有前向纠错能够的解码端可以根据校验数据以及源数据的位置信息,利用校验数据和接收到的源数据进行前向纠错解码,恢复丢失的源数据,所以,本发明实施例提供的技术方案即能够与现有通信系统兼容,又可以有效的利用前向纠错恢复丢失的源数据。
实施例二
如附图3所示,本发明实施例提供了一种前向纠错解码方法,该方法包括以下步骤:
步骤31:接收第一数据包和第二数据包;其中,第一数据包中携带源数据,第二数据包中携带校验数据、源数据的位置信息、以及源数据的位置信息与源数据的对应关系。
源数据的位置信息可以是:包括每个源数据对应的位置信息;或者,包括每个源数据对应的位置信息和最后一个源数据的结束位置;或者,包括每个源数据对应的位置信息和最后一个源数据的长度;或者,包括每个源数据对应的位置信息和源数据总共的长度;或者,包括每个源数据对应的位置信息和每个源数据的长度;或者,包括每个源数据对应的位置信息和第一个校验数据的起始位置。源数据的位置信息与源数据的对应关系可以是:源数据的位置信息与源数据的编号的对应关系,或者,源数据的位置信息与源数据的序号的对应关系,或者,源数据的位置信息与源数据的其他标识的对应关系;在实际中,只需要将源数据的位置信息与源数据的标识(源数据的编号、序号或其他标识)按照一定的规则携带在第二数据包中即可,解码端可以按照相同的规则解出源数据的位置信息与源数据的标识之间的对应关系。
步骤32:根据第二数据包中携带的源数据的位置信息以及源数据的位置信息与源数据的对应关系,利用第一数据包中携带的多个源数据生成重构数据块;
其中,每个源数据对应一个位置信息,该位置信息用于标识该源数据在源数据块中的位置;所述对应关系用于指示每个第一数据包中的源数据与第二数据包中该源数据的位置信息的对应。
根据源数据的位置信息与源数据的对应关系,可以确定每个第一数据包中的源数据对应的位置信息,该对应的位置信息携带在第二数据包中;之后,根据源数据对应的位置信息和该源数据可以生成重构数据块,该重构数据块是基于接收的第一数据包和第二数据包中的内容,对编码端构造的源数据块的重新构造。例如,参考图2,源数据的位置信息是用ESI指示的,则在生成重构数据块时,根据源数据的ESI将源数据填入重构数据块的相应位置,即以该ESI对应的符号作为起始行,将该源数据填入重构数据块,生成重构数据块时源数据的填入方式与构造源数据块时的填入方式类似,在此不再赘述。
利用第一数据包中携带的多个源数据生成重构数据块可以是:当源数据的位置信息包括每个源数据对应的位置信息时,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并以最后一个源数据的结束位置作为重构数据块中源数据的结束位置;或者,当源数据的位置信息包括每个源数据对应的位置信息和最后一个源数据的结束位置时,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并以最后一个源数据的结束位置作为重构数据块中源数据的结束位置;或者,当源数据的位置信息包括每个源数据对应的位置信息和最后一个源数据的长度时,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并根据最后一个源数据的长度和最后一个源数据的位置信息确定重构数据块中源数据的结束位置,例如,最后一个源数据的长度为n个符号,最后一个源数据的位置信息指示的起始行为第N行,则重构数据块中源数据的结束位置为第(N+n-1)行;或者,当源数据的位置信息包括每个源数据对应的位置信息和源数据总共的长度,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并以源数据总共的长度确定重构数据块中源数据的结束位置,例如,源数据总共的长度为Q个符号,则重构数据块中源数据的结束位置为第Q行;或者,当源数据的位置信息包括每个源数据对应的位置信息和每个源数据的长度时,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并根据最后一个源数据的长度和最后一个源数据的位置信息确定重构数据块中源数据的结束位置;或者,当源数据的位置信息包括每个源数据对应的位置信息和第一个校验数据的起始位置时,则根据每个源数据对应的位置信息将接收到的每个源数据填入重构数据块,并根据第一个校验数据的起始位置确定重构数据块中源数据的结束位置,例如,第一个校验数据的起始位置为第M行,则重构数据块中源数据的结束位置为第(Q-1)行。
如果在第二数据包中携带的每个源数据对应的位置信息还包括源数据块标号SBN,则首先根据位置信息中的SBN确定源数据对应的重构数据块,然后以位置信息中的ESI对应的符号作为起始行,将该源数据填入该重构数据块。如果在第二数据包中携带的每个源数据对应的位置信息还包括流标号F,则在将源数据填入重构数据块时,将流标号F也填入重构数据块,例如参考图2,将流标号填入该源数据的ESI对应的符号的第一字节中。源数据块标号SBN和流标号F在编码端构造源数据块时是可选的,解码端在生成重构数据块时只需根据编码端的配置相应的处理数据包中的信息即可,所以上述对源数据块标号SBN和流标号F也不是必须的。
步骤33:利用第二数据包中携带的校验数据,对重构数据块进行前向纠错解码,恢复丢失的源数据。
在步骤32中,利用接收的第一数据包中携带的多个源数据生成重构数据块时,由于数据包在传输时可能丢失,导致重构数据块中缺失了部分源数据,所以,可以利用接收的第二数据包中携带的校验数据,对重构数据块进行前向纠错解码,生成缺失的源数据,从而恢复出与编码端源数据块相同的数据块。
对重构数据块进行前向纠错解码可以是:利用接收的一个或多个校验数据和接收的多个源数据,生成未接收到的缺失的源数据,从而在解码端恢复出与编码端源数据块相同的数据块。其中,当有多个校验数据时,不同的校验数据可以对不同的源数据进行前向纠错解码;或者,当只有一个校验数据时,利用该一个校验数据对接收的多个源数据进行前向纠错解码。
本实施例中,通过在解码端分别接收承载源数据的第一数据包和承载校验数据以及源数据位置信息的第二数据包,使得源数据与校验数据以及源数据的位置信息分开采用不同的数据包发送,不改变承载源数据的第一数据包的结构,从而没有前向纠错功能的解码端可以丢弃第二数据包,只根据第一数据包进行解码,同时,有前向纠错能够的解码端可以根据校验数据以及源数据的位置信息,利用校验数据和接收到的源数据进行前向纠错解码,恢复丢失的源数据,所以,本发明实施例提供的技术方案即能够与现有通信系统兼容,又可以有效的利用前向纠错恢复丢失的源数据。
实施例三
如附图4所示,本发明实施例提供了一种前向纠错编解码方法,该方法包括以下步骤:
步骤40:编码设备接收多个源数据包;
其中,源数据包的格式不限,源数据包可以来自不同的数据流,用流标号F来区别不同数据流的源数据包。
步骤41:编码设备利用接收的多个源数据包构造源数据块;每个源数据包对应一个位置信息,该位置信息用于标识该源数据包在源数据块中的位置;
其中,利用多个源数据包构造源数据块的实现方式可以参考图2,图2示出了一个源数据块,源数据块的每行表示一个符号,每个符号对应一个符号标识(如图2中源数据块左边的一列数字所示),图2中F表示源数据包对应的流标号,L表示源数据包的长度(即数据区D的长度),D表示数据区,每个数据区D中填充了一个源数据包,一个数据区D可以占用源数据块的一个多个符号,P表示剩余位,可以按照一定的规则对剩余位进行填充。
步骤42:编码设备对构造的源数据块进行前向纠错编码,生成校验数据;
参考图2,图2中R表示校验数据,一个源数据块的可以有一个多个符号的校验数据,在生成校验数据后也可以给校验数据对应的符号标识,以便解码时可以重新恢复出图2所示的源数据块。
步骤43:编码设备转发接收的多个源数据包;
由于接收的源数据包本身已经是封装好的数据包,可以对这些接收的数据包不做处理直接转发,此时,接收的多个源数据包即为第一数据包,参考图5,图5示例性的给出了一种源数据包的格式,该源数据包包括IP头部(Internet Protocol Header)、UDP头部(User Datagram Protocol Header)和原始UDP净载荷(Original User Datagram Protocol Payload);具体的,可以在接收到多个源数据包时,复制接收的多个源数据包,将复制的多个源数据包用于步骤41中的构造和步骤42中的编码,将接收的多个源数据包用于步骤43中的转发。
步骤44:编码设备通过第二数据包发送校验数据和源数据包的位置信息;其中,第二数据包中携带源数据包的位置信息与源数据包的对应关系;
源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系有各种各样的实现形式,具体可以参考实施例一中的相关内容。
校验数据和位置信息以及对应关系可以采用不同的第二数据包进行传输,例如,将校验数据封装为校验数据包,将位置信息以及对应关系封装为位置数据包。参考图6,图6示例性的给出了一种校验数据包的格式,该校验数据包包括IP头部、UDP头部、修复净载荷ID(Repair FEC PayloadIdentification)和修复净载荷(Repair symbols),其中,修复净载荷即为生成的校验数据,修复净载荷ID包括该校验数据对应的源数据块的SBN以及在该源数据块中校验数据起始行的ESI;参考图7,图7示例性的给出了一种校验数据包中修复净载荷ID的格式,该修复净载荷ID包括校验数据对应的源数据块的SBN、在该源数据块中校验数据起始行的ESI、和该源数据块中源数据包的总长度SBL(Source Block Length,源数据块长度)。参考图8,图8示例性的给出了一种位置数据包的格式,该位置数据包包括IP头部、UDP头部、位置信息和对应关系;参考图9,图9示例性的给出了一种位置数据包中位置信息和对应关系的格式,该位置信息和对应关系包括前向纠错ID(fec_id)、源数据块标识(SBN)、流标号(FlowID)、初始序列号(InitialSequence Number,ISN)、多个ESI,其中,fec_id用于表示FEC编码类型,可以确定SBN和ESI的格式,SBN标识该位置信息和对应关系对应的源数据块,FlowID标识该位置信息和对应关系对应的数据流的流ID,ISN标识该源数据块中属于某一FlowID的第一个ESI对应的源数据包的序列号,length标识该位置信息和对应关系中属于某一FlowID的信息的长度,多个ESI组成一个ESI列表,每个ESI标识源数据块中的一个源数据包。在图9的位置信息和对应关系中,源数据包的位置信息包括源数据块标识、流标号和该源数据块的该数据流中的ESI列表。其中,ESI列表中的多个ESI可以包括:该源数据块的该数据流中第一个源数据包的ESI的绝对值,和除第一源数据包外的其他源数据包与其前一个源数据包的ESI的差值,由于同一数据流中的源数据包一般在同一源数据块中是连续的,因此,只要知道了该数据流中第一个源数据包的ESI和之后每两个相邻源数据包的ESI差值,即可确定出该源数据块的该数据流中各个源数据包的ESI,使用差值可以有效减少ESI列表的长度;或者,该源数据块的该数据流中各源数据包的ESI的绝对值。对应关系是通过如下方法实现:由于同一数据流中的源数据包的序列号是顺序增加的,则只要知道源数据块的某一数据流中的第一个源数据包的序列号,则可以确定之后的任一个源数据包的序列号,因此,在图9的位置信息和对应关系中,只需携带第一个源数据包的序列号即可得知各个源数据包的位置信息与序列号的对应,即确定源数据包的位置信息与源数据包的对应关系。
根据图9的位置信息和对应关系的格式,图10给出了一个具体的例子。从图10示出的位置信息和对应关系中,可以得到SBN为0的源数据块中有两条流,流ID为分别为96和97。流ID为96的三个源数据包的序列号分别为14567,14568=14567+1,14569=14567+2;ESI为1、7=1+6、11=7+4;其中,序列号为14567源数据包对应的ESI为1,序列号为14568源数据包对应的ESI为7,序列号为14569源数据包对应的ESI为11。流ID为97的两个源数据包的序列号分别为5734,5735=5734+1;ESI为15、19=15+4;其中,序列号为5734源数据包对应的ESI为15,序列号为5735源数据包对应的ESI为19。
步骤45:解码设备接收源数据包(即第一数据包)和第二数据包(校验数据包和位置数据包);其中,校验数据包中携带校验数据,位置数据包中携带各源数据包的位置信息、以及源数据包的位置信息与源数据包的对应关系;
例如,接收如图5所示的源数据包,第二数据包包括如图6所示的校验数据包和如图7所示的位置数据包。
步骤46:解码设备根据第二数据包中携带的源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系,利用接收的多个源数据包生成重构数据块。
首先,解码设备根据接收的一个或多个第二数据包确定源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系,例如,接收如图10所示的位置信息和对应关系,确定SBN为0的源数据块中有两条流,流ID为分别为96和97;流ID为96的数据流中包括三个源数据包,序列号为14567源数据包对应的ESI为1,序列号为14568源数据包对应的ESI为7,序列号为14569源数据包对应的ESI为11;流ID为97的数据流中包括两个源数据包,序列号为5734源数据包对应的ESI为15,序列号为5735源数据包对应的ESI为19。
之后,解码设备根据确定的源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系,利用接收到的多个源数据包生成重构数据块。例如,解码设备只接收到四个源数据包,接收到的四个源数据包的序列号分别为14567,14568,5734,5735,丢失的一个源数据包的序列号为14569,则根据图10所示的位置信息和对应关系,将接收到的四个源数据包(序列号分别为14567,14568,5734,5735)按照其对应的位置信息填入重构数据块,具体的,根据序列号14567的源数据包对应的ESI值1,以重构数据块中第1行为起始行将序列号14567的源数据包填入重构数据块,根据序列号14568的源数据包对应的ESI值7,以重构数据块中第7行为起始行将序列号14568的源数据包填入重构数据块,根据序列号5734的源数据包对应的ESI值15,以重构数据块中第15行为起始行将序列号5734的源数据包填入重构数据块,根据序列号5735的源数据包对应的ESI值19,以重构数据块中第19行为起始行将序列号5735的源数据包填入重构数据块,生成的重构数据块如图11所示。其中,如果最后一个源数据包(序列号5735)丢失,则重构数据块的结束位置可以从图7示出的修复净载荷ID中确定,修复净载荷ID中携带了校验数据起始行的ESI,假设校验数据起始行的ESI值为26,则重构数据块中源数据包的结束位置为第25行;或者,由于是否确定最后一个源数据包(序列号5735)的长度,并不影响前向纠错解码,因此,如果最后一个源数据包(序列号5735)丢失,则将接收到的最后一个源数据包(例如序列号5734的源数据包)填入源数据块后,不确定源数据块中源数据包的结束位置,只确定源数据块中最后一个源数据包丢失即可。在图11的重构数据块中,第1行至6行填充了序列号14567的源数据包,第7至10填充了序列号14568的源数据包,由于序列号14569的源数据包丢失,则第11至14行中不填充数据,第15至18填充了序列号5734的源数据包,第19至25填充了序列号5735的源数据包;各个源数据包填充时,源数据包对应的长度L、流标号F、填充位P可以根据实际设置。
步骤47:利用校验数据包中携带的校验数据,对重构数据块进行前向纠错解码,恢复丢失的源数据包。
例如,重构数据块如图11所示,序列号14569的源数据包丢失,则可以根据校验数据和接收到的其他源数据包(序列号分别为14567,14568,5734,5735)中的部分或全部,进行前向纠错解码,从而恢复出丢失的序列号14569的源数据包,例如,根据校验数据和序列号14568的源数据包进行前向纠错解码恢复序列号14569的源数据包。因为可以根据一个源数据块中的全部源数据包生成一个校验数据,或根据不同的一个或多个源数据包生成不同的校验数据,所以,在利用校验数据进行前向纠错解码时,可以利用一个或多个校验数据和接收到的源数据包中的部分或全部,来恢复丢失的一个或多个源数据包,具体使用时,可以根据前向纠错算法的不同来灵活处理,本发明实施例在此不做限定。
在其他实施例中,第二数据包的格式可以多种多样,本实施例仅仅是示例性的给出了一些具体的报文格式,这些报文格式是为了更好的理解发明,而不构成对本发明的限制。例如,第二数据包可以是RTP报文、RTCP报文或者是自定义的新报文等等。在具体传输源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系时,可以将源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系分为多个第二数据包进行传送。
另外,在编码端,编码设备为了保证校验数据或源数据包的位置信息以及源数据包的位置信息与源数据包的对应关系传输的可靠性,可以多次发送携带校验数据的校验数据包,和/或多次发送携带位置信息与对应关系的位置数据包;例如,连续发送多个相同的位置数据包,或者,穿插在其他数据包(第一数据包和/或校验数据包)中发送多个相同的位置数据包,以减小位置数据包丢失的概率。而且,编码设备利用接收的多个源数据包构造源数据块时,可以选择接收的多个源数据包中的部分源数据包构造源数据块,例如,只选择视频数据流中的I帧数据包构造源数据块,而P帧、B帧不用于构造源数据块。如果选择多个源数据包中的部分源数据包构造源数据块,则在位置数据包中,只需传输选择的源数据包的位置信息以及对应关系,例如:可以在位置数据包(参考图9)中规定其中不参与构造源数据块的源数据包的ESI字段为某一特殊值(比如0xFFFF);或者,在位置数据包中将只包含一系列连续源数据包的初始序列号,进一步扩展为包含参与构造源数据块的源数据包的多个不同源数据包段的起始序列号,参考图12,图12示例性的给出了一种位置数据包中位置信息和对应关系的格式,图12中与图9相同的部分不再重复,其中,序列号(Sequence Number,SN)标识该源数据块中包含的不同源数据包段的起始序列号,ESI计数值(ESI Count,EC)标识该源数据块中包含的不同源数据包段中源数据包的计数值,EC用于确定下一个SN的位置。
根据图12的位置信息和对应关系的格式,图13给出了一个具体的例子。从图13示出的位置信息和对应关系中,可以得到SBN为0的源数据块中有两条流,流ID为分别为96和97。流ID为96的两段源数据包分别以序列号14567、14587开始,以14567开始的3个数据包的ESI为0、6=6+0、10=6+4,以14587开始的2个数据包的ESI为13、17=13+4;流ID为97的只有一段段源数据包,以序列号5734开始的1个数据报的ESI为19。
本实施例中,通过在编码端对源数据块中的源数据进行前向纠错编码,生成校验数据,并将源数据在源数据块中的位置信息和校验数据携带在第二数据包中向解码端发送,而源数据通过第一数据包向解码端发送,在解码端分别接收承载源数据的第一数据包和承载校验数据以及源数据位置信息的第二数据包,使得源数据与校验数据以及源数据的位置信息分开采用不同的数据包发送,不改变承载源数据的第一数据包的结构,从而没有前向纠错功能的解码端可以丢弃第二数据包,只根据第一数据包进行解码,同时,有前向纠错能够的解码端可以根据校验数据以及源数据的位置信息,利用校验数据和接收到的源数据进行前向纠错解码,恢复丢失的源数据,所以,本发明实施例提供的技术方案即能够与现有通信系统兼容,又可以有效的利用前向纠错恢复丢失的源数据。
实施例四
如附图14所示,本发明实施例提供了一种通信系统,该系统包括:
编码设备5,用于利用多个源数据构造源数据块,每个源数据对应一个位置信息,该位置信息用于标识该源数据在源数据块中的位置;对构造的源数据块进行前向纠错编码,生成校验数据;通过第一数据包发送源数据块中的源数据,通过第二数据包发送校验数据和源数据的位置信息;其中,第二数据包中携带源数据的位置信息与源数据的对应关系;
解码设备6,用于接收第一数据包和第二数据包,第一数据包中携带源数据,第二数据包中携带校验数据、源数据的位置信息、以及源数据的位置信息与源数据的对应关系;根据第二数据包中携带的源数据的位置信息以及源数据的位置信息与源数据的对应关系,利用第一数据包中携带的多个源数据生成重构数据块;利用第二数据包中携带的校验数据,对重构数据块进行前向纠错解码,恢复丢失的源数据。
编码设备5与解码设备6通过网络7相连,编码设备5通过网络7向解码设备6发送第一数据包和第二数据包。第一数据包和第二数据包携带的内容以及携带内容的方式,可以参考其他实施例中的相关内容,这里不再赘述。
编码设备5可以进一步包括:构造模块51,用于利用多个源数据构造源数据块,每个源数据对应一个位置信息,该位置信息用于标识该源数据在源数据块中的位置;编码模块52,用于对构造模块51构造的源数据块进行前向纠错编码,生成校验数据;第一发送模块53,用于通过第一数据包发送源数据块中的源数据,通过第二数据包发送编码模块52生成的校验数据和源数据的位置信息,其中,第二数据包中携带源数据的位置信息与源数据的对应关系。
编码设备5还可以包括:获取模块50,用于获取用于构造源数据块的多个源数据。其中,获取模块50可以进一步包括:第一接收单元501,用于接收通过网络传输的多个数据包,以接收的多个数据包中的全部或部分作为所述多个源数据,或者,接收通过网络传输的多个数据包,解析出接收的多个数据包的净载荷,将解析出的净载荷中的全部或部分作为所述多个源数据;和/或第一获取单元502,用于获取上层的多个净载荷,以获取的多个净载荷中的全部或部分作为所述多个源数据。
其中,编码模块52可以进一步包括:第一编码单元521,用于对源数据块中不同的源数据分别进行校验生成多个校验数据,不同的校验数据由不同的源数据进行前向纠错编码获得;或第二编码单元522,用于对源数据块中的全部源数据进行前向纠错编码,生成一个校验数据。其中,对源数据块中不同的源数据分别进行校验生成多个校验数据可以是:对一个源数据块中不同的源数据分别进行校验生成多个校验数据;或者,对不同源数据块的源数据分别进行校验生成多个校验数据,每个源数据块分别校验生成一个或多个校验数据。对源数据块中的全部源数据进行前向纠错编码,生成一个校验数据可以是:对一个源数据块中的全部源数据进行前向纠错编码,生成一个校验数据;或者,对多个源数据块中的全部源数据进行前向纠错编码,生成一个校验数据。
其中,第一发送模块53可以进一步包括:第一发送单元531,用于通过第一数据包发送源数据块中的源数据,通过一个或多个校验数据包发送校验数据,通过一个或多个位置数据包发送位置信息及对应关系,所述第二数据包包括校验数据包和位置数据包;或第二发送单元532,用于通过第一数据包发送源数据块中的源数据,将校验数据、源数据的位置信息和源数据的位置信息与源数据的对应关系封装在同一个第二数据包中,发送该第二数据包。
解码设备6可以进一步包括:第二接收模块60,用于接收第一数据包和第二数据包,第一数据包中携带源数据,第二数据包中携带校验数据、源数据的位置信息、以及源数据的位置信息与源数据的对应关系;重构模块61,用于根据第二接收模块60接收的第二数据包中携带的源数据的位置信息以及源数据的位置信息与源数据的对应关系,利用第二接收模块60接收的第一数据包中携带的多个源数据生成重构数据块;解码模块62,用于利用第二数据包中携带的校验数据,对重构模块61生成的重构数据块进行前向纠错解码,恢复丢失的源数据。
解码设备6还可以包括:第二发送模块63,用于发送接收和恢复的全部的源数据。
其中,重构模块61可以进一步包括:确定单元611,用于根据源数据的位置信息与源数据的对应关系,确定接收的每个第一数据包中的源数据对应的位置信息;填写单元612,用于根据每个源数据对应的位置信息,对应的将接收的每个源数据填入重构数据块。
其中,解码模块62可以进一步包括:第一解码单元621,用于利用校验数据中的一个或多个与重构数据块中的一个或多个接收到的源数据,进行前向纠错解码,生成丢失的源数据。
以上通信系统中的编码设备5与解码设备6的具体功能,以及使用的各种位置信息、对应关系、报文格式可以参考其他实施例的相关内容,这里不再赘述。
其中,编码设备5可以作为一个模块设置在各种网络节点上,例如,设置在路由器或交换机等中间节点上,作为中间节点的一个模块,对中间节点接收的数据流进行复制,从复制的数据流中获取多个源数据,进而利用这些获取的源数据构造源数据块、进行前向纠错编码,并在中间节点通过第一数据包转发接收的数据流的同时,编码设备5发送携带校验数据、源数据的位置信息和源数据的位置信息与源数据的对应关系的第二数据包;或者,编码设备5对中间节点接收的数据流进行解析,解析出接收的数据流的净载荷,以解析出的净载荷作为多个源数据,进而利用这些源数据构造源数据块、进行前向纠错编码,并在通过第一数据包发送解析出的净载荷的同时,发送携带校验数据、源数据的位置信息和源数据的位置信息与源数据的对应关系的第二数据包。编码设备5可以也作为一个模块设置在网络的头端节点上,头端节点可以产生数据流,例如头端节点通过视频采集设备采集视频流和音频流,编码设备5以头端节点的数据流作为多个源数据,进而利用这些源数据构造源数据块、进行前向纠错编码,并在通过第一数据包发送源数据的同时,发送携带校验数据、源数据的位置信息和源数据的位置信息与源数据的对应关系的第二数据包。相应的,解码设备6也可以作为一个模块设置在各种网络节点上,例如,对应编码设备5的设置在编码设备5的下游节点上,解码设备6在恢复出丢失的源数据后,可以将接收的和恢复的全部源数据向其他网络节点发送。当然,各个网络节点上也可以同时设置编码设备5和解码设备6,或者,将编码设备5和解码设备6集成为一个编解码设备设置在网络节点上,以实现在双向的数据传输时,都可以进行前向纠错编解码。
针对不同的网络情况及网络布局,可以灵活的部署编码设备5和解码设备6,例如在网络条件相对较好侧(如核心网)可以不需要,而对于网络条件相对较差侧(如接入网)则增加编码设备5和解码设备6;还可以根据不同的接入端选择编码设备5和解码设备6的使用与否;还可以在整个网络中可靠性差的网段分段部署编码设备5和解码设备6,例如整个网络的某一部分可靠性比较差,可以在可靠性差的网段入口端部署编码设备5,相应地,在该网段地出口端增加解码设备6。这样可以减少部署成本,且对现有系统影响较小,实现平滑升级。在不改变现有系统前提下,可以旁挂在网络的任意节点,比如汇聚交换机,边缘路由器等,应用广泛,灵活。
由于编码设备5和解码设备6可以灵活的设置在各种网络节点上作为一个附加的功能模块,而不同网络节点所使用的数据包格式也可能各种各样,因此,编码设备5和解码设备6中第一数据包和第二数据包可以采用各种形式的数据包格式。
当编码设备5和解码设备6旁挂在各种网络节点上作为一个附加的功能模块时,编码设备5的获取模块50从编码设备5所在的网络节点接收的源数据包中获取多个源数据,这里,可以是将网络节点接收的源数据包复制,以复制的源数据包作为多个源数据,或者,将网络节点接收的源数据包复制,对复制的源数据包进行解析,以解析出的源数据包净载荷作为多个源数据;之后,编码设备5的第一发送模块53将第二数据包通过网络接口直接发送,或者将第二数据包发送给编码设备5所在的网络节点,然后由该网络节点通过网络接口发送第二数据包;由于在获取源数据时,进行了流复制,因此可以由给编码设备5所在的网络节点直接转发接收的源数据包(即第一数据包),而编码设备5的第一发送模块53仅需发送第二数据包即可。
本实施例中,通过在编码端对源数据块中的源数据进行前向纠错编码,生成校验数据,并将源数据在源数据块中的位置信息和校验数据携带在第二数据包中向解码端发送,而源数据通过第一数据包向解码端发送,在解码端分别接收承载源数据的第一数据包和承载校验数据以及源数据位置信息的第二数据包,使得源数据与校验数据以及源数据的位置信息分开采用不同的数据包发送,不改变承载源数据的第一数据包的结构,从而没有前向纠错功能的解码端可以丢弃第二数据包,只根据第一数据包进行解码,同时,有前向纠错能够的解码端可以根据校验数据以及源数据的位置信息,利用校验数据和接收到的源数据进行前向纠错解码,恢复丢失的源数据,所以,本发明实施例提供的技术方案即能够与现有通信系统兼容,又可以有效的利用前向纠错恢复丢失的源数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。