一种前向纠错的方法、装置及电子设备与流程

文档序号:11877826阅读:203来源:国知局
一种前向纠错的方法、装置及电子设备与流程

本发明涉及数据传输技术领域,更具体地,本发明涉及一种前向纠错方法、装置及电子设备。



背景技术:

前向纠错也叫前向纠错码(在本领域技术也被称为FEC),是增加数据通讯可信度的方法。在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输。FEC是利用数据进行传输冗余信息的方法,当传输中出现错误,将允许接收器再建数据。

FEC也随着时间的发展,演化出不同的版本,不同的算法。但是不管何种演化,他们的核心目的都是通过改进算法,提高单组的编解码效率,减少冗余包数,提高传输效率。主流传统的FEC算法可以很好的解决在单组中少量的数据包丢失的问题。但是一旦遇到网络突变,造成大量连续的数据包丢失情况下,丢失有效数据包超过单组冗余包数量,甚至整组数据丢失,传统的FEC算法是没有办法恢复的。

而在实际网络环境中,偶尔单个的丢包和突发的连续性丢包都是存在的,特别当网络发生拥堵时候,突发的连续性丢包更为常见。例如通过观察,在使用WIFI网络环境下,发送接收长度为1316的UDP数据包(标准的ts流数据包),就有百分之二左右的连续性的丢包(连续丢失5个以上的)。以上数据仅在特定环境下测得,虽不能作为定量的指标,但是也能说明在某些特殊的网络环境下,的确存在突发的连续性的丢包。假设我们使用传统的7个数据包加一个冗余包的情况下,若是突发一次连续丢失5个数据包的网络拥堵情况。那么这组数据是不可被恢复的。

本发明的内容和特点就是:通过提供一种将多个FEC数据组穿插发送的方式,来有效的规避网络出现连续性的丢包。而对于FEC核心算法又不敏感,可以随时升级替换核心的FEC算法,来提高编解码效率和传输效率



技术实现要素:

本发明的一个目的是提供一种用于避免网络出现连续性丢包问题的新技术方案。

根据本发明的第一方面,提供了一种用于发送端的前向纠错的方法,包括:

设定每一分组使用数据包个数、与所述数据包配合的冗余包个数、以及每一数据包大小;

根据当前传输数据的帧数、所述数据包个数和所述每一数据包大小,计算得到每帧将会产生的分组个数;

将所述分组个数、及每一分组使用的所述数据包个数和所述冗余包个数发送至接收端;

根据所述分组个数、所述数据包个数和所述冗余包个数对所述数据进行排列编码;

将每组中相同位置的数据包或者冗余包作为一队,依次将每队中的数据包或者冗余包发送至所述接收端。

可选的是,所述根据当前传输数据的帧数、所述数据包个数和所述每一数据包大小,计算得到每帧将会产生的分组个数之前包括:

将所述当前传输数据的帧数设置为固定值。

可选的是,每队中相同位置的数据包或者冗余包属于同一分组。

根据本发明的第二方面,提供了一种用于接收端的前向纠错的方法,包括:

接收发送端发送的分组个数、及每一分组使用的数据包个数和冗余包个数;

顺序接收所述发送端发送的所有数据包以及所有冗余包;

根据接收顺序、所述分组个数和每一分组使用的所述数据包个数及冗余包个数对所述数据包和所述冗余包进行排列解码。

可选的是,所述顺序接收所述发送端发送的所有数据包以及所有冗余包之后还包括:

检测是否有丢失的数据包,如是,则检测丢失的数据包所在的分组和分队。

根据本发明的第三方面,提供了一种用于发送端的前向纠错的装置,包括:

设定模块,用于设定每一分组使用数据包个数、与所述数据包配合的冗余包个数、以及每一数据包大小;

计算模块,用于根据当前传输数据的帧数、所述数据包个数和所述每一数据包大小,计算得到每帧将会产生的分组个数;

第一发送模块,用于将所述分组个数、及每一分组使用的所述数据包个数和所述冗余包个数发送至接收端;

排列编码模块,用于根据所述分组个数、所述数据包个数和所述冗余包个数对所述数据进行排列编码;以及,

第二发送模块,用于将每组中相同位置的数据包或者冗余包作为一队,依次将每队中的数据包或者冗余包发送至所述接收端。

可选的是,所述装置还包括:

帧数设置模块,用于将所述当前传输数据的帧数设置为固定值。

可选的是,每队中相同位置的数据包或者冗余包属于同一分组。

根据本发明的第四方面,提供了一种用于接收端的前向纠错的装置,包括:

第一接收模块,用于接收发送端发送的分组个数、及每一分组使用的数据包个数和冗余包个数;

第二接收模块,用于顺序接收所述发送端发送的所有数据包以及所有冗余包;以及,

排列解码模块,用于根据接收顺序、所述分组个数和每一分组使用的所述数据包个数及冗余包个数对所述数据包和所述冗余包进行排列解码。

可选的是,所述装置还包括:

检测模块,用于检测是否有丢失的数据包,如是,则检测丢失的数据包所在的分组和分队。

本发明的发明人发现,在现有技术中,存在某些特殊的网络环境下会发生突发的连续性丢包的问题。在本发明的实施例中,通过提供一种将多个数据组穿插发送的方式,能够有效的规避网络中出现连续性丢包,来提高编解码效率和传输效率。因此,本发明所要实现的技术任务或者所要解决的技术问题是本领域技术人员从未想到的或者没有预期到的,故本发明是一种新的技术方案。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。

图1为根据本发明一种前向纠错的方法的一种实施方式的流程图;

图2为编码后数据的排列方式的示意图;

图3为现有的顺序发送后的数据丢包情况示意图;

图4为根据本发明方法接收到的数据丢包情况示意图;

图5为根据本发明方法排列解码后数据丢包情况及排列方式的示意图;

图6为根据本发明一种前向纠错的装置的一种实施结构的方框原理图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

为了解决现有技术中存在某些特殊的网络环境下会发生突发的连续性丢包的问题,提供了一种前向纠错方法,通过将多个FEC数据组穿插发送,来有效的规避网络中出现连续性丢包的问题,进而提高编解码效率和传输效率。

图1为根据本发明一种前向纠错方法的一种实施方式的流程图,图中实线代表发送端和接收端各自的实施流程,虚线代表发送端与接收端之间进行交互的实施流程,具体为发送端发送,接收端接收。

根据图1所示,包括以下步骤:

步骤S101,发送端设定每一分组使用的数据包个数、与数据包配合的冗余包个数、以及每一数据包的大小。

例如可以设定每一分组使用的数据包个数为m,与数据包配合的冗余包个数为n、以及每个数据包的大小为p,其中,每个数据包的大小可以为标准的TS数据包的大小1316。

步骤S102,发送端根据当前需要传送数据的帧数、数据包个数和每一数据包的大小,计算得到每帧将会产生的分组个数。

如果当前需要传送数据的帧数为L,则可以计算每帧都会产生的分组数N=L/(m*p),如果每个数据包的大小为标准的TS流数据包大小为1316,在当前需要传送数据为4M码流,GOP值设置为25,画面为静态画面的情况下,一个I帧典型大小为3.4M左右,其中,GOP是画面组,一个GOP就是一组连续的画面,那么将产生340个TS数据包,按照m=8,n=2,也就是8个数据包,2个冗余包的方式进行FEC编码,就将产生N=34个分组。

步骤S103,发送端将分组个数、每一分组使用的数据包个数和冗余包个数发送至接收端。

通知解码端本次数据流共有N分组,并且将采用m个数据包,n个冗余包的方式进行编码。

步骤S104,接收端接收分组个数、每一分组使用的数据包个数和冗余包个数。

步骤S105,发送端根据分组个数、数据包个数和冗余包个数对数据进行排列编码。

例如可以将当前需要传送数据按照数据包个数为8个,冗余包个数为2个相互配合进行编码,编码后数据的排列方式例如可以如图2所示,其中,1-1、1-2、……、1-8、2-1、2-2、……、34-8均为数据包,1-ex1、1-ex2、2-ex1、2-ex2、……、34-ex1、34-ex2均为冗余包。

步骤S106,将每组中相同位置的数据包或者冗余包作为一队,依次将每队中的数据包或者冗余包发送至接收端。

将每组中相同位置的数据包或者冗余包作为一队具体可以为将图2中的每列数据包或者冗余包作为一队,且每队中相同位置的数据包或者冗余包属于同一组。

依次将每队中的数据包或者冗余包发送至接收端具体为,先发送每组的第一个数据包,再发送每组的第二个数据包,再发送每组的第三个数据包,以此类推直至每组的所有数据包都被发送;发送每组的第一个冗余包,再发送每组的第二个冗余包,以此类推直至每组的所有数据包都被发送。

步骤S107,接收端顺序接收所有的数据包和所有的冗余包。

具体的,接收端根据发送端的发送顺序接收所有的数据包和冗余包,这样,就接收到N*m个数据包以及N*n个冗余包。

在本发明的一个具体实施例中,该方法还包括检测是否有丢失的数据包,如是,则检测丢失的数据包所在的分组位置,如否,则不作任何处理。

其中,丢包检测并不包含在传统FEC算法中,同样也不包含在本方法中。丢包检测作为网络通讯常用方法,通过检测能够准确知道是否发生丢包以及丢了哪些包。

步骤S108,接收端根据接收顺序、分组个数和每一分组使用的数据包个数对数据包进行排序解码。

根据接收顺序、分组个数和每一分组使用的数据包个数对数据包进行排序即为将数据包恢复成原始的如图2所示的排列顺序。

图3为现有的顺序发送后的数据分组如果遇到网络突发情况从第2到第8个数据包产生了连续的丢包(图3中灰色部分1-2到1-8所示)。

接受端在收到数据后第一组数据包将无法被恢复出来,因为丢失了7个有效数据包,只剩下一个有效数据包,而冗余包只有2个,达不到恢复的条件,导致产生个丢包

图4为根据本发明方法接收到的数据,同样遇到网络突发情况,从第2到第8个数据包产生了连续的丢包(图4中灰色部分2-1到8-1所示)。

由于采用本发明中的发送方式,接收端在收到数据后恢复为图5所示情况。从第2组开始到第8组,每组的第一个有效数据包都丢失了。但是由于从第2组到第8组每组都还剩余7个有效数据包和2个冗余包,满足恢复的条件。从第2组开始到第8组每组都可以把第一个有效数据包恢复出来。

因此对于同样一次连续丢包,采用本发明方法发送数据,将不会出现不能恢复的丢包情况,能够有效提升数据的传输效率。

为了规避实时性的缺陷,可以采用动态分组策略,具体为把每一帧数据作为一个大组一起发送出去,在本发明的一个具体实施例中,该方法还包括将所述当前传输数据的帧数设置为固定值,例如为一帧,这样既能保证每一帧都能实时的发送,不需要等待下一帧的数据,做到尽可能的实时性,并且在一帧内也可以进行穿插发送,提高抵抗网络连续丢包的能力。

由于在TS流基本都是从ES流封装而来的,视频编码器在出ES流时候会提供ES大小可以通过这个大小,获得当前帧最终会产生多少个TS包。

本发明还提供了一种前向纠错的系统,该系统包括用于发送端的前向纠错的装置和用于接收端的前向纠错的装置,图6示出了该系统的一种实施结构的方框原理图。

根据图6所示,该系统包括用于发送端的前向纠错的装置610和用于接收端的前向纠错的装置620,其中,该用于发送端的前向纠错的装置610包括设定模块611、计算模块612、第一发送模块613、排列编码模块614和第二发送模块615。该用于接收端的前向纠错的装置620包括第一接收模块621、第二接收模块622和排列解码模块623。

上述设定模块611用于设定每一分组使用数据包个数、与数据包配合的冗余包个数、以及每一数据包大小。

上述计算模块612用于根据当前传输数据的帧数、数据包个数和每一数据包大小,计算得到每帧将会产生的分组个数。

上述第一发送模块613用于将分组个数、及每一分组使用的数据包个数和冗余包个数发送至接收端。

上述排列编码模块614用于根据分组个数、数据包个数和冗余包个数对数据进行排列编码。

上述第二发送模块615用于将每组中相同位置的数据包或者冗余包作为一队,依次将每队中的数据包或者冗余包发送至接收端。

其中,每队中相同位置的数据包或者冗余包属于同一分组。

上述第一接收模块621用于接收发送端发送的分组个数、及每一分组使用的数据包个数和冗余包个数。

上述第二接收模块622用于顺序接收发送端发送的所有数据包以及所有冗余包。

上述排列解码模块623用于根据接收顺序、分组个数和每一分组使用的数据包个数及冗余包个数对数据包和冗余包进行排列解码。

进一步地,该用于发送端的前向纠错的装置610还包括帧数设置模块,用于将当前传输数据的帧数设置为固定值。

在此基础上,该用于接收端的前向纠错的装置620还包括检测模块,用于检测是否有丢失的数据包,如是,则检测丢失的数据包所在的分组和分队。

上述各实施例主要重点描述与其他实施例的不同之处,但本领域技术人员应当清楚的是,上述各实施例可以根据需要单独使用或者相互结合使用。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分相互参见即可,每个实施例重点说明的都是与其他实施例的不同之处,但本领域技术人员应当清楚的是,上述各实施例可以根据需要单独使用或者相互结合使用。另外,对于装置实施例而言,由于其是与方法实施例相对应,所以描述得比较简单,相关之处参见方法实施例的对应部分的说明即可。以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smal ltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1