发明内容
有鉴于此,本发明实施例的目的在于提供数据传输方法、检错方法、系统和装置,以解决现有技术中需要将PES封装数据转换为其它数据进行检错,导致系统传输延时和带宽消耗增大的问题。
本发明实施例所提供的技术方案为:
一种数据传输方法,包括:
获取原始数据;
将所述原始数据封装成PES数据包,并在每个PES数据包的包头写入检错参数;
传输所述PES数据包。
所述将原始数据封装成PES数据包包括:
将所述原始数据顺序分成若干数据单元;
分别对每个数据单元进行封装生成PES数据包。
当所述检错参数为校验码时,所述在每个PES数据包的包头写入检错参数包括:
对每个数据单元进行校验变换获得校验码;
将所述校验码写入所述PES数据包的包头的默认填充字节。
当所述校验参数为计数值时,所述在每个PES数据包的包头写入检错参数包括:
预先设置计数规则,所述计数规则用于区别所述PES数据包之间的顺序;根据所述计数规则在每个PES数据包的包头的填充字节写入相应的计数值。
一种数据检错方法,包括:
接收PES数据包;
读取每个PES数据包的包头中的检错参数;
根据所述检错参数检测所述PES数据包是否发生传输错误。
当读取每个PES数据包的包头中的检错参数具体为,读取所述PES数据包包头的默认填充字节中的第一校验码时,
所述根据检错参数检测所述PES数据包是否发生传输错误包括:
对所述PES数据包的载荷部分中的数据单元进行校验变换得到第二校验码;
判断所述第一校验码与所述第二校验码是否一致,若一致,则所述PES数据包传输的载荷数据正确,若不一致,则所述PES数据包传输的载荷数据错误。
当读取每个PES数据包的包头中的检错参数具体为,读取所述PES数据包包头的默认填充字节中的第一计数值时,
所述根据所述检错参数检测所述PES数据包是否发生传输错误包括:
根据所述PES数据包在所述接收到的PES数据包中的顺序,按照预先设置的计数规则生成所述PES数据包的第二计数值;
判断所述第一计数值与所述第二计数值是否一致,若一致,则所述PES数据包传输的顺序正确,若不一致,则所述PES数据包传输的顺序错误。
还包括:
读取每个PES数据包的包头中的载荷长度参数;
比较所述载荷长度参数与所述PES数据包的载荷的实际长度是否一致,若一致,则所述PES数据包的载荷数据完整,若不一致,则所述PES数据包的载荷数据丢失。
一种数据检错系统,包括:数据发送装置和数据接收装置,
所述数据发送装置,用于获取原始数据,将所述原始数据封装成PES数据包,并在每个PES数据包的包头写入检错参数,将所述PES数据包通过数据传输网络传输到所述数据接收装置;
所述数据接收装置,用于接收到所述PES数据包后,读取每个PES数据包的包头中的检错参数,根据所述检错参数检测所述PES数据是否发生传输错误。
一种数据传输装置,包括:
获取单元,用于获取原始数据;
封装单元,用于将所述原始数据封装成PES数据包;
写入单元,用于在每个PES数据包的包头写入检错参数;
传输单元,用于传输所述PES数据包。
所述封装单元包括:
原始数据分割单元,用于将所述原始数据顺序分成若干数据单元;
原始数据封装单元,用于分别对每个数据单元进行封装生成PES数据包。
所述写入单元包括:
校验变换单元,用于对每个数据单元进行校验变换获得校验码;
校验码写入单元,用于将所述校验码写入所述PES数据包的包头的默认填充字节。
所述写入单元包括:
规则预设单元,用于预先设置计数规则,所述计数规则用于区别所述PES数据包之间的顺序;
计数值写入单元,用于根据所述计数规则在每个PES数据包的包头的填充字节写入相应的计数值。
一种数据检错装置,包括:
接收单元,用于接收所述PES数据包;
读取单元,用于读取每个PES数据包的包头中的检错参数;
检错单元,用于根据所述检错参数检测所述PES数据包是否发生传输错误。
所述读取单元包括:
第一校验码读取单元,用于读取所述PES数据包包头的默认填充字节中的第一校验码;
所述检错单元包括:
第二校验码获取单元,对所述PES数据包的载荷部分中的数据单元进行校验变换得到第二校验码;
校验码比较单元,用于判断所述第一校验码与所述第二校验码是否一致,若一致,则所述PES数据包传输的载荷数据正确,若不一致,则所述PES数据包传输的载荷数据错误。
所述读取单元包括:
第一计数值读取单元,用于读取所述PES数据包包头的默认填充字节中的第一计数值;
所述检错单元包括:
第二计数值生成单元,用于根据所述PES数据包在所述接收到的PES数据包中的顺序,按照预先设置的计数规则生成所述PES数据包的第二计数值;
计数值比较单元,用于判断所述第一计数值与所述第二计数值是否一致,若一致,则所述PES数据包传输的顺序正确,若不一致,则所述PES数据包传输的顺序错误。
所述读取单元还用于,读取每个PES数据包的包头中的载荷长度参数;
所述检错单元还用于,比较所述载荷长度参数与所述PES数据包的载荷的实际长度是否一致,若一致,则所述PES数据包的载荷数据完整,若不一致,则所述PES数据包的载荷数据丢失。
由上述本发明实施例提供的技术方案可见,在本发明实施例中数据发送方获取原始数据,将所述原始数据封装成PES数据包,并在每个PES数据包的包头写入检错参数,传输所述PES数据包;数据接收方接收所述PES数据包,读取每个PES数据包的包头中的检错参数,根据所述检错参数检测PES数据是否发生传输错误。本发明实施例在对PES数据包传输检错时,无需将PES数据包转换为其它形式的数据包,因此减少了系统的处理时间和传输延时,降低了系统因增加额外数据而消耗的带宽;并且,由于利用了PES数据包包头中的字节传输检错参数,因此能够与现有PES传输定义兼容。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
参见图1,为本发明数据传输方法的第一实施例,包括以下步骤:
步骤101:获取原始数据。
步骤102:将原始数据封装成PES数据包。
具体的,将所述原始数据顺序分成若干数据单元,分别对每个数据单元进行封装生成PES数据包。
步骤103:在每个PES数据包的包头写入检错参数。
当检错参数为校验码时,对每个数据单元进行校验变换获得校验码,将校验码写入PES数据包的包头的默认填充字节;当校验参数为计数值时,预先设置用于区别所述PES数据包之间的顺序的计数规则,根据计数规则在每个PES数据包的包头的填充字节写入相应的计数值。
步骤104:传输所述PES数据包。
参见图2,为本发明数据传输方法的第二实施例,该实施例详细示出了数据的封装传输过程,包括以下步骤:
步骤201:获取原始数据。
本发明实施例中的原始数据指还未经过特定封装的数据。
步骤202:将原始数据顺序分成若干数据单元。
通常原始数据较大,例如,一个视频流或者音频流,在传输前需要将原始数据按照预设长度分成若干小的数据单元,分割到最后的数据如果小于预设长度,也作为一个数据单元,因此一个原始数据可以分割成若干顺序排列的数据单元。
步骤203:分别对每个数据单元进行封装生成PES数据包。
根据MPEG2中对PES封装的定义将分割后的每个数据单元封装成PES数据包,PES封装为现有技术,在此不再赘述。
步骤204:对每个数据单元进行校验变换获得校验码。
每个PES数据包由包头和载荷组成,其中包头用于承载数据包的属性参数,载荷用于承载数据单元。
由于PES数据包在传输过程中载荷数据可能出现错误,例如,PES数据包的某个字节为0x32,而接收端解析后的该字节为0x33。因此,本步骤的目的在于在传输前对每个数据单元进行校验获得校验码,以使接收端可以根据该校验码检测PES数据包是否正确传输。
其中,可以对数据单元进行CRC校验获得校验码,CRC是一种根据网络数据封包或计算机档案等数据产生简短固定位数的一种杂凑函数,主要用来检测或验证数据传输或者保存后可能出现的错误,生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化,一般来说,循环冗余检验的值都是32位的整数。需要说明的是,除了采用CRC校验外,也可以采用现有技术中的任意校验方式,对此本发明实施例不做限制。
步骤205:将校验码写入PES数据包的包头的默认填充字节。
根据MPEG2对PES数据包的语法定义,在PES数据包包头的尾部可以存在长度不大于32个字节的填充字节,填充字节默认值为十六进制0xFF。本发明实施例应用该填充字节,将填充字节中的一部分字节用于承载校验码。
步骤206:根据预先设置的计数规则在每个PES数据包的包头的填充字节写入相应的计数值。
由于PES数据包中的各个PES数据包按照一定的顺序传输,但其在传输过程中可能出现数据包丢失或者数据包之间顺序颠倒的错误,例如,传输15个PES数据包,接收端解析后仅得到13个PES数据包,或者顺序传输了PES数据包A和PES数据包B,接收端解析后得到的顺序为PES数据包B和PES数据包A。因此,本步骤的目的在于在传输前按照预先设置的技术规则计算顺序排列的PES数据包的计数值,例如,按照PES数据包的排列顺序,每个PES数据包的计数值顺序增加1,即第一个PES数据包的计数值为1,第二个PES数据包的计数值为2,以此类推,第N个PES数据包的计数值为N,以使接收端可以根据该预设规则计算接收到的PES数据包的计数值,通过比较计数值检测PES数据包是否正确传输。
步骤205已经提到,在PES数据包包头的尾部可以存在长度不大于32个字节的填充字节,该填充字节除了可以承载校验码外,也可以将其中的一部分字节用于承载计数值。
需要说明的是,预设规则可以任意设置,只要发送端与接收端能够约定一致,并且能够正确区分PES数据包的传输顺序即可,对此本发明实施例不做限制。
另外,步骤206也可以在步骤204之前执行,即先写入校验码还是先写入计数值本发明实施例不做限制。
步骤207:传输所述PES数据包。
在步骤207后,还可以将PES数据包进一步封装为PS(Program Stream,节目流)数据包进行传输。需要说明的是,根据实际应用的需要,上述实施例也可以只在PES数据包的包头的填充字节内写入校验码或计数值中的任何一种,对比本发明实施例不做限制。
与本发明数据传输方法的实施例相对应,本发明还提供了对所述数据传输方法实施例中所传输的PS数据包进行检错的数据检错方法实施例。
参见图3,为本发明数据检错方法的第一实施例,包括以下步骤:
步骤301:接收PES数据包。
步骤302:读取每个PES数据包的包头中的检错参数。
其中,读取的PES数据包的包头中的检测参数可以包括:PES数据包包头的默认填充字节中的校验码,和/或PES数据包包头的默认填充字节中的计数值。
步骤303:根据检错参数检测PES数据包是否发生传输错误。
参见图4,为本发明数据检错方法的第二实施例,该实施例示出了数据检错的详细过程,包括以下步骤:
步骤401:接收PES数据包。
如果数据发送方传输的是封装了PES数据包的PS数据包,则数据接收方接收到该PS数据包后,还需要先将该PS数据包解析成PES数据包。
步骤402:读取每个PES数据包的包头中的载荷长度参数。
对每个PES数据包顺序执行步骤402至步骤415,以检测每个PES数据包是否传输正确。
PES数据包的包头中承载了一些数据属性参数,其中包括载荷长度,该长度是数据发送方在发送前根据待传输载荷的长度写入的参数。
步骤403:比较读取的载荷长度参数与PES数据包的载荷的实际长度是否一致,若是,则执行步骤404;否则,执行步骤405。
步骤404:确定PES数据包的载荷数据完整,执行步骤406。
如果读取的载荷长度参数与PES数据包的载荷的实际长度一致,则可以确定该PES数据包的载荷数据完整。
步骤405:确定PES数据包的载荷数据丢失,结束当前流程。
如果读取的载荷长度参数与PES数据包的载荷的实际长度不一致,则可以确定该PES数据包的载荷数据丢失,例如,读取到的PES数据包的包头中的载荷长度为2000字节,而实际接收到的PES数据包的载荷长度为1500字节,则说明载荷数据在传输过程中发生了丢失。
步骤406:读取PES数据包包头的默认填充字节中的第一校验码。
如果数据发送方在PES数据包包头的默认填充字节中写入了校验码,则数据接收方可以从该包头的相应字节处读取到该校验码,设为第一校验码。
步骤407:对PES数据包的载荷部分中的数据单元进行校验变换得到第二校验码。
数据接收方按照与数据发送方一致的校验变换方式,例如,都采用CRC32校验,对接收到的PES数据包载荷中的数据进行校验变换,得到第二校验码。
步骤408:判断第一校验码与第二校验码是否一致,若是,则执行步骤409;否则,执行步骤410。
步骤409:确定PES数据包传输的载荷数据正确,执行步骤411。
如果读取的第一校验码与第二校验码一致,则可以确定该PES数据包的载荷数据在传输过程中没有发生错误。
步骤410:确定PES数据包传输的载荷数据错误,结束当前流程。
如果读取的第一校验码与第二校验码不一致,则可以确定该PES数据包的载荷数据在传输过程中发生了错误。
步骤411:读取PES数据包包头的默认填充字节中的第一计数值。
如果数据发送方在PES数据包包头的默认填充字节中写入了计数值,则数据接收方可以从该包头的相应字节处读取到该计数值,设为第一计数值。
步骤412:根据该PES数据包在接收到的PES数据包中的顺序,按照预先设置的计数规则生成该PES数据包的第二计数值。
数据接收方采用与数据发送方一致的预设规则,例如,都采用顺序加1的计数规则,根据该PES数据包在接收时的顺序,利用该预设规则计算该PES数据包的计数值,得到第二计数值。
步骤413:判断第一计数值与第二计数值是否一致,若是,则执行步骤414;否则,执行步骤415。
步骤414:确定PES数据包传输的顺序正确,结束当前流程。
如果读取的第一计数值与第二计数值一致,则可以确定该PES数据包的传输顺序正确。
步骤415:确定PES数据包传输的顺序错误,结束当前流程。
如果读取的第一计数值与第二计数值不一致,则可以确定该PES数据包的传输顺序发生了错误。
结合前述数据传输方法和数据检错方法的实施例,参见图5,为本发明数据传输和检错的一个应用流程示意图。
发送方待传输的原始数据可以分成N个数据单元,对N个数据单元分别进行封装后得到N个PES数据包,按照前述方法实施例,在每个PES数据包的包头的填充字节中写入该PES数据包的校验码和计数值,可以将N个PES数据包封装成一个PS数据包,发送该封装后的PS数据包。该PS数据包经过传输网络后传输到数据接收方,数据接收方将该PS数据包进行解析得到N个PES数据包,对每个PES数据包分别进行检错,按照前述方法实施例,从每个PES数据包的填充字节中读取校验码和计数值,并计算PES数据包当前的校验码和计数值,分别比较读取的校验码和计算的校验码,以及读取的计数值和计算的计数值,以此判断每个PES数据包是否传输正确。
与本发明数据传输方法和数据检错方法的实施例相对应,本发明还提供了数据检错系统、数据传输装置和数据检错装置的实施例。
本发明数据检错系统的实施例框图如图6所示,该系统包括:数据发送装置610和数据接收装置620。
其中,数据发送装置610用于获取原始数据,将所述原始数据封装成PES数据包,并在每个PES数据包的包头写入检错参数,将所述PES数据包通过数据传输网络传输到所述数据接收装置620;数据接收装置620用于接收到所述PES数据包后,读取每个PES数据包的包头中的检错参数,根据所述检错参数检测所述PES数据包是否发生传输错误。
本发明数据传输装置的实施例框图如图7所示,该装置包括:获取单元710、封装单元720、写入单元730和传输单元740。
其中,获取单元710用于获取原始数据;封装单元720用于将所述原始数据封装成PES数据包;写入单元730用于在每个PES数据包的包头写入检错参数;传输单元740用于传输所述PS数据包。
具体的,封装单元720可以包括(图7中未示出):原始数据分割单元,用于将所述原始数据顺序分成若干数据单元;原始数据封装单元,用于分别对每个数据单元进行封装生成PES数据包。
具体的,写入单元730可以包括(图7中未示出):校验变换单元,用于对每个数据单元进行校验变换获得校验码;校验码写入单元,用于将所述校验码写入所述PES数据包的包头的默认填充字节。
具体的,写入单元730还可以包括(图7中未示出):规则预设单元,用于预先设置计数规则,所述计数规则用于区别所述PES数据包之间的顺序;计数值写入单元,用于根据所述计数规则在每个PES数据包的包头的填充字节写入相应的计数值。
本发明数据传检错置的实施例框图如图8所示,该装置包括:接收单元810、读取单元820和检错单元830。
其中,接收单元810用于接收PES数据包;读取单元820用于读取每个PES数据包的包头中的检错参数;检错单元830用于根据所述检错参数检测所述PES数据包是否发生传输错误。
具体的,读取单元820可以包括(图8中未示出):第一校验码读取单元,用于读取所述PES数据包包头的默认填充字节中的第一校验码;相应的,检错单元830可以包括(图8中未示出):第二校验码获取单元,对所述PES数据包的载荷部分中的数据单元进行校验变换得到第二校验码;校验码比较单元,用于判断所述第一校验码与所述第二校验码是否一致,若一致,则所述PES数据包传输的载荷数据正确,若不一致,则所述PES数据包传输的载荷数据错误。
具体的,读取单元820还可以包括(图8中未示出):第一计数值读取单元,用于读取所述PES数据包包头的默认填充字节中的第一计数值;相应的,检错单元830可以包括(图8中未示出):第二计数值生成单元,用于根据所述PES数据包在所述接收到的PES数据包中的顺序,按照预先设置的计数规则生成所述PES数据包的第二计数值;计数值比较单元,用于判断所述第一计数值与所述第二计数值是否一致,若一致,则所述PES数据包传输的顺序正确,若不一致,则所述PES数据包传输的顺序错误。
进一步,读取单元820还可以用于读取每个PES数据包的包头中的载荷长度参数;检错单元830还可以用于比较所述载荷长度参数与所述PES数据包的载荷的实际长度是否一致,若一致,则所述PES数据包的载荷数据完整,若不一致,则所述PES数据包的载荷数据丢失。
通过以上的实施方式的描述可知,在本发明实施例中数据发送方获取原始数据,将所述原始数据封装成PES数据包,并在每个PES数据包的包头写入检错参数,传输所述PES数据包;数据接收方接收所述PES数据包,读取每个PES数据包的包头中的检错参数,根据所述检错参数检测PES数据是否发生传输错误。本发明实施例在对PES数据包传输检错时,无需将PES数据包转换为其它形式的数据包,因此减少了系统的处理时间和传输延时,降低了系统因增加额外数据而消耗的带宽;并且,由于利用了PES数据包包头中的字节传输检错参数,因此能够与现有PES传输定义兼容。
为了描述的方便,以上所述装置的各部分以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件或硬件中实现。对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。