一种h264码流分包传输方法及系统的制作方法

文档序号:7823041阅读:311来源:国知局
一种h264码流分包传输方法及系统的制作方法
【专利摘要】本发明公开一种H264码流分包传输方法及系统,传输方法包括:在发送端,对每帧H.264码流中所有NALU进行重要性分析,并依据NALU的重要性进行RTP分包,NALU的重要性包括3类:重要、一般重要、不重要;为不同重要性的RTP包分别建立线程,根据RTP包的重要性,在对应专用线程中一次或n次重复发送RTP分包到接收端,n≥2;在接收端,将接收到的各重复的RTP包丢弃至保留一个RTP包,对保留的RTP包和不重复RTP包重新组合成 NALU恢复H.264编码数据。本发明使用多线程并行处理不同重要性的NALU发送,可以在减少高重要性NALU丢包的同时兼顾RTP发送效率,提高H264码流解码后的视频质量。
【专利说明】一种H264码流分包传输方法及系统

【技术领域】
[0001]本发明涉及数据传输领域,更具体地,涉及一种H264码流分包传输方法及系统。

【背景技术】
[0002]随着IP网络技术和视频、音频编码技术的发展,H.264码流内容通过IP网络进行传输。公知的,数据在以太网中进行传输,如图1所示,以太网的最大传输单元(MTU)为1500字节,所以I个RTP包的最大载荷长度通常为1460字节。
[0003]已知,每帧H.264码流由多个NAL单元(网络抽象层单元)组成,而每个NAL单元的大小不一样。目前H.264码流较常使用的是RTP协议,通常是以每个NAL为单元按以下方式进行处理:(I)当I个NAL单元长度大于RTP包的最大载荷长度(1460Byte)时,需要将该NAL单元分为多个RTP包发送,使得每个RTP包的载荷长度不大于1460Byte ; (2)当I个NAL单元长度小于等于1460Byte时,使用单个RTP包发送;(3)当I个NAL单元长度远小于1460Byte时,使用I个RTP包发送效率比较低,为了提高其发送效率,可以在I个RTP包的载荷中放置多个NAL单元,只要多个NAL单元不大于1460Byte即可。
[0004]如图2所示,每个NAL单元的结构包括NAL头部及原始字节序列载荷(RBSP:RawByte Sequence Payloads)构成,而 NAL 头部由 F (lbit)、R (2bit)、T (5bit)组成。其中R是NAL单元重要性标识位,用来表示NAL单元的重要性,00表示NAL不重要,11表示NAL单元非常重要。
[0005]如图3所示,传输一般是按照NAL单元在码流中先后顺序从NALUl ~ NALU7依次处理。这样就会出现NALUl的长度为432字节,远小于1460字节,但由于NALU2的长度比较大,不能合并,也不能和NALU4、NALU5、NALU6 一起,组成I个RTP包,只能单独组成I个RTP包。而其NALU4、NALU5、NALU6三个NALU的总长度1015字节,依然有445字节剩余可以用于合并NALU1,即采用NAL单元顺序依次处理,还可以提高发送效率。
[0006]而由于RTP包是非可靠连接,在发送过程中会存在丢包现象。如图3所示,当因三个NAL单元(NALU4、NALU5、NALU6)远小于RTP载荷最大单元组成I个RTP包时,当丢失该包时,在解码时,会导致非常重要的NAL单元(NALU5)和不重要的单元(NALU4、NALU6) —起丢失。这样其实,并没有充分利用NAL头部的重要标志位。
[0007]有技术提出按照重要性由高到低重排NAUL单元,并对NAUL单元按重要性进行RTP分组,并依重要性从高到低进行串行发送;该方式能在一定程度上提高视频传输效率,但该方式仍然存在数据包丢失的可能。


【发明内容】

[0008]为了解决上述问题,本发明首先提出一种H264码流分包传输方法,该方法有效的利用了 NAL单元的重要性,在保证最重要的包尽可能不丢失的前提下,提高RTP包发送效率。
[0009]本发明的又一目的是提出一种H264码流分包传输系统。
[0010]为了实现上述目的,本发明的技术方案为:
一种H264码流分包传输方法,包括以下步骤:
在发送端,对每帧H.264码流中所有NAL单元进行重要性分析,并依据NAL单元的重要性进行RTP分包,NAL单元的重要性包括3类,分别为重要、一般重要、不重要,则RTP包也包括3类,分别为重要、一般重要、不重要;为不同重要性的RTP包分别建立专用线程,根据RTP包的重要性,在对应专用线程中一次或η次重复发送RTP包到接收端,n ^ 2 ;
在接收端,将接收到的各重复的RTP包丢弃至保留一个RTP包,对保留的RTP包和不重复RTP包进行解码获得视频数据。
[0011]本发明首先分析每帧H.264码流所有NALU的重要性,并依据NALU重要性进行RTP分包。然后,为不同的重要性的RTP包分别建立线程进行发送处理。为了避免重要性最高的NAL单元的RTP包丢失,会使用一个线程专门处理发送,且每个包会重复发送多次。而重要性稍低(一般重要)的NAL单元的RTP包发送,使用另外一个专用线程处理,每个RTP包重复发送多次。而重要性最低(不重要)的NAL单元的RTP包,则使用第三个专用线程处理,该线程对每个RTP包发送I次或多次。这样会在利用NAL单元重要性保证最重要的包尽可能不丢失的如提下,提闻RTP包发送效率。
[0012]一种Η264码流分包传输系统,包括:
发送端,用于对每帧H.264码流中所有NAL单元进行重要性分析,并依据NAL的重要性进行RTP分包,NALU的重要性包括3类,分别为重要、一般重要、不重要,则RTP包也包括3类,分别为重要、一般重要、不重要;同时为不同重要性的RTP包分别建立专用线程,根据RTP包的重要性,在对应专用线程中一次或η次重复发送RTP包到接收端,n ^ 2 ;
接收端,用于将接收到的各重复的RTP包丢弃至保留一个RTP包,对保留的RTP包和不重复RTP包进行解码获得视频数据。
[0013]与现有技术相比,本发明的有益效果是:使用多线程并行处理不同重要性的NALU发送,可以在减少高重要性NALU丢包的同时兼顾RTP发送效率,提高H.264码流解码后的视频质量。

【专利附图】

【附图说明】
[0014]图1是RTP包结构示意图。
[0015]图2是NAL单元结构示意图。
[0016]图3是3个NAL单元组成I个RTP包示意图。
[0017]图4是发送端RTP分包处理框架示意图。
[0018]图5是接收端RTP组包处理框架示意图。
[0019]图6是实施例中I帧Η264码流示意图。

【具体实施方式】
[0020]下面结合附图对本发明做进一步的描述,但本发明的实施方式并不限于此。
[0021 ] 本发明的系统包括H.264码流的RTP分包发送端和RTP组包接收端。
[0022]H.264码流的RTP分包发送端实现方式如下:
由H.264编码器产生的每帧H.264码流有多个NAL单元,其RTP分包处理流程如图4所示。
[0023](I)进入标识NALU序列号模块,按NALU的排列顺序依次标记l~n。
[0024](2)然后进入NALU重要性分析模块,根据每个NALU的头的R将NALUl~NALUn分为 3 类:R=’ 00’,R=’ 01,和’ 10’,R=’ 11,。
[0025](3)重要性为R=’ 11’的所有NALU会被送到线程I的长度分析模块:
(a) NALU长度大于1460字节的NAL单元,会按1460字节分解成多个部分,每个部分进入类型标识模块被标识为“分解”,然后进入网络发送模块3,进入RTP封装后,每个RTP包重复3次发送给接收端。
[0026](b)长度小于1460字节的所有NALU,长度分析模块从序列号最小的NALU开始,会以依次合并后续m个NALU,当合并到某个NAL单元时总长度超过1460字节时,若后续还有NALU,则先跳过该NAL单元,直到合并后续所有NALU都会超过1460字节时。若m=0,则将该NAL单元送入NALU单包模块,单包模块会直接将NALU送入类型标识模块标记“单包”,然后送到网络发送模块3,进行RTP封包,发送给接收端,每个包重复发送3次。若m>l,则m+1个单元进入合并多个NALU模块合并后,进入类型标识模块标识“合并”,然后进入网络发送模块3进行RTP封包,并重复3次发送到接收端。
[0027](c)然后对剩余NAL单元,按(a)、(b)重复处理,直到所有NALU全部发送。
[0028](4)重要性R=’ 01’和‘10’的所有NAL单元,被送入线程2,NAL单元的RTP封包处理流程同(3),只是在网络发送模块2中,每个RTP只重复发送2次。
[0029](5)重要性R=’ 00’的所有NAL单元,被送入线程3,NAL单元的RTP封包处理流程同(3),只是在网络发送模块I中,每个RTP只发送I次。
[0030]H.264码流的RTP组包接收端实现方式如下,如图5所示:
(I)接收端线程I中,网络接收模块3接收到发送模块3发送的RTP包后,根据RTP包序列号,重复包丢弃,不重复的包去掉RTP包头后送入类型解析模块,若是“分解”,送到组合NALU模块中组合成完成NALU ;若是单包,则送入NALU单包模块,该模块不进行任何处理;若是“合并”,则送入拆分模块拆分成多个NALU。然后送入NALU排序模块。
[0031](2)接收端线程2中,网络接收模块2接收网络发送模块2发送的RTP包,其后处理流程同(I)。
[0032](3)接收端线程I中,网络接收模块2接收网络发送模块I发送的RTP包,其后处理流程同(I)。
[0033](4)最后NALU排序模块将线程1、2、3中处理的NALU,按NALU序列号排序组成I帧完整的H.264码流。
[0034]使用多线程并行处理不同重要性的NALU发送,可以在减少高重要性NALU丢包的同时兼顾RTP发送效率,提高H264码流解码后的视频质量。
[0035]实施例1
在此,给出一个简单的实施例,如图6所示,这里I帧H.264码流由7个NALU组成。每个NALU长度及重要性已在图6中标出。
[0036](I)图6所示的码流进入序列号表示模块,标识序列号。
[0037](2)重要性分析模块获取NALU1~NALU7的重要性,并将它们进行分类:R=’ 11’(NALU1、NALU2、NALU3、NALU5) R=’ 01’ 和’ 10’ (NALU7) R=’ 00’(NALU4、NALU6) (3)将NALU1/NALU2/NALU3/NALU5送入线程I中,同时将NALU7送入线程2,NALU4和NALU6送入线程3。
[0038](4)线程I中,长度分析决策模块:(a)会分析NALUl长度432字节,小于1460字节。
[0039](b)接着分析下一个NALU2长度为1446字节,发现两者总长度1892字节,超过1460字节分析模块发现后续还存在NALU3 ;
(c)于是分析NALUl和NALU3的长度总和4117字节,也超过1460字节;
(d)继续分析NALUl和NALU5的总长度为833字节,小于1460字节。
[0040](e)分析模块发现后续没有NALU 了,此时m>0,于是将NALU1/NALU5发送到“合并多个NALU模块”进行合并,然后送到“类型标识”模块标识“合并”,最后网络发送模块3对合并后的载荷进行RTP封包,并将该RTP包I连续发送3次到接收端。
[0041](f)分析模块再分析NALU2的长度为1446字节,小于1460字节。然后分析NALU2和NALU3总长度5131字节,超出1460字节。此时m=0,所以会将NALU2送到“NALU单包”模块,该模块不处理直接送到“类型标识”模块进行“单包”标识后,放到网络发送模块3进行RTP封包2,并完成3次重复发送。
[0042](g)接着分析NALU3的长度3685字节,超过1460字节。送到“分解NALU”模块分解成3个部分,每个部分依次长度为1460,1460,765。并把它们依次标识为“分解”,通过网络模块3封包成RTP包3、RTP包4、RTP包5,连续发送3次。
[0043](5)在线程I处理的同时,线程2中长度分析模块分析R=’ 10’和’ 01’的NALU7的长度:NALU7的长度4876字节,超过1460字节,送到“分解NALU”模块分解成3个部分,每个部分依次长度为1460,1460,1460,496。并把它们依次标识为“分解”,通过网络模块2封包成RTP包6、RTP包7、RTP包8,连续发送2次。
[0044](6)在线程1、2处理的同时,线程3中长度分析模块分析R=’ 10’的NALU4和NALU6的长度:NALU4和NALU6总长度614字节,后续无NALU,此时m=l,送入“合并多个NALU”模块合并,然后进入标识模块标识为“合并”,再通过网络模块I封包RTP包5,并只发送I次。
[0045](7)接收端线程1:
Ca)网络接收模块3接收到第I个RTP包I后解包,送到“类型解析”模块解析为“合并”,送到“拆分成多个NALU”模块拆分成NALUl和NALU5后,送到NALU排序模块根据NALU序列号排序为NALUl、NALU5。
[0046](b)网络接收到后2个重复的RTP包I时,直接丢弃不往下处理。
[0047](c)网络接收到第I个RTP包2后解包,并送到类型解析模块解析类型为“单包”时,送到“NALU单包”模块,该模块不处理,直接送到NALU排序模块,此时根据NALU序列号排序为NALU1、NALU2、NALU5。同样其他2个RTP包2被丢弃。
[0048](d)网络接收到RTP包3、RTP包4、RTP包5后解包后,送到类型解析模块解析为“合并”类型后,送到“组合NALU”模块组包成NALU3。然后放入NALU排序模块进行排序:NALUl、NALU2、NALU3、NALU5。
[0049](8)在接收端线程I处理的同时,接收线程2的网络接收模块2接收到RTP包6、RTP包7、RTP包8后进行RTP解包,然后解析类型为“合并”时,送入“组合NALU”模块组包成 NALU7。然后放置到 “NALU 排序”模块排序为:NALU1、NALU2、NALU3、NALU5、NALU7。
[0050](9)在接收端线程I和2处理同时,接收线程3网络接收模块2接收到RTP包5后解包,送入“类型解析”模块解析“合并”类型后,送到“拆分成多个NALU”模块进行拆分成NALU4、NALU6。然后 NALU4、NALU6 被送入到“NALU 排序”模块排序为 NALU1、NALU2、NALU3、NALU4、NALU5、NALU6、NALU7。
[0051 ] 此时接收端就完整接收到由NALU1~NANU7组成的I帧H264码流。
[0052]以上所述的本发明的实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神原则之内所作出的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
【权利要求】
1.一种H264码流分包传输方法,其特征在于,包括以下步骤: 在发送端,对每帧H.264码流中所有NAL单元进行重要性分析,并依据NAL单元的重要性进行RTP分包,NAL单元的重要性包括3类,分别为重要、一般重要、不重要,则RTP包也包括3类,分别为重要、一般重要、不重要;为不同重要性的RTP包分别建立专用线程,根据RTP包的重要性,在对应专用线程中一次或η次重复发送RTP包到接收端,n ^ 2 ; 在接收端,将接收到的各重复的RTP包丢弃至保留一个RTP包,对保留的RTP包和不重复RTP包进行解码获得视频数据。
2.根据权利要求1所述的Η264码流分包传输方法,其特征在于,NAL单元中R=‘11’时表示NAL单元重要,R= ‘01’或R= ‘10’表示NAL单元一般重要,R= ‘00’表示NAL单元不重要。
3.根据权利要求1或2所述的Η264码流分包传输方法,其特征在于,采用一个专用线程对重要的RTP包进行处理发送,且每个重要的RTP包重复发送3次;采用另一专用线程对一般重要的RTP包进行处理发送,且每个一般重要的RTP包重复发送2次;采用又一个专用线程对不重要的RTP包进行处理发送,每个不重要的RTP包发送I次。
4.根据权利要求3所述的Η264码流分包传输方法,其特征在于,在发送端对各个NAL单元按先后进行标记,分别标记为NALU1、NALU2、…、NALUM ;再对各个NAL单元进行重要性分析,NAL单元包括重要NAL单元、一般重要NAL单元和不重要NAL单元; 分别对重要NAL单元、一般重要NAL单元和不重要NAL单元中的各个NAL单元进行长度分析,根据长度分析结果对NAL单元进行分解或合并,其具体方式为: 1)对长度大于最大传输单元MTU的NAL单元,将其分解成多个NAL子单元,将各个NAL子单元封装为RTP包,并将各RTP包标识为“分解”,发送给接收端; 2)对长度小于MTU的所有NAL单元,从序列号最小的NAL单元开始,依次合并后续m个NAL单元,当合并到某个NAL单元,其总长度超过最大传输单元MTU的字节时,且后续还有其他NAL单元,则先跳过该NAL单元;直到合并后续所有NAL单元都会超过最大传输单元MTU的长度时,则合并停止,对剩余未合并的NAL单元采用同样的方式处理; 若m=0,则将该NAL单元封装为RTP包,并将该RTP包标识为“单包”,发送给接收端; 若m>l,则对m+1个NAL单元进行合并,将m+1个合并的NAL单元封装为RTP包,并将该RTP包标识为“合并”,发送到接收端。
5.根据权利要求4所述的H264码流分包传输方法,其特征在于,在接收端,接收各个专用线程发送的RTP包,将重复的RTP包中RTP包丢弃部分只保留一个RTP包,去掉保留下来的RTP包或不重复RTP包的包头,并对该RTP包的载荷类型进行分析,若RTP包标识为“分解”,则对进行合并获得NAL单元;当标识为“合并”,则进行分解获得NAL单元;当标识为“单包”,则直接获得NAL单元;根据各NAL单元的序列号进行排序重新获得H264视频编码数据。
6.—种H264码流分包传输系统,其特征在于,包括: 发送端,用于对每帧H264码流中所有NAL单元进行重要性分析,并依据NAL的重要性进行RTP分包,NALU的重要性包括3类,分别为重要、一般重要、不重要,则RTP包也包括3类,分别为重要、一般重要、不重要;同时为不同重要性的RTP包分别建立专用线程,根据RTP包的重要性,在对应专用线程中一次或η次重复发送RTP包到接收端,n ^ 2 ; 接收端,用于将接收到的各重复的RTP包丢弃至保留一个RTP包,对保留的RTP包和不重复RTP包进行解码获得视频数据。
7.根据权利要求6所述的H264码流分包传输系统,其特征在于,所述发送端包括NALU序列号标识模块、NALU重要性分析模块、NALU长度分析模块、NALU分解模块、NALU合并模块和NALU类型标识模块; 所述NALU序列号标识模块,用于对各个NAL单元按先后进行标记,分别标记为NALU1、NALU2、…、NALUM ; 所述NALU重要性分析模块,用于对NAL单元进行重要性分析,NAL单元包括重要NAL单元、一般重要NAL单元和不重要NAL单元; 所述NALU长度分析模块,用于分别对重要NAL单元、一般重要NAL单元和不重要NAL单元中的各个NAL单元进行长度分析; 所述NALU分解模块,用于将长度大于最大传输单元MTU的NAL单元分解成多个NAL子单元,将各个NAL子单元封装为RTP包,并将各RTP包标识为“分解”,通过专用线程发送给接收端; 所述NALU合并模块,用于对长度小于MTU的所有NAL单元进行合并,从序列号最小的NAL单元开始,依次合并后续m个NAL单元,当合并到某个NAL单元时,其总长度超过最大传输单元MTU的字节时,且后续还有其他NAL单元,则先跳过该NAL单元,直到合并后续所有NAL单元都会超最大传输单元MTU的字节时,则合并停止,对剩余未合并的NAL单元采用同样的方式处理; 若m=0,则将该NAL单元封装为RTP包,并将该RTP包标识为“单包”,通过专用线程发送给接收端; 若m>l,则对m+1个NAL单元进行合并,将m+1个合并的NAL单元封装为RTP包,并将该RTP包标识为“合并”,通过专用线程发送到接收端。
8.根据权利要求7所述的H264码流分包传输系统,其特征在于,在接收端,接收各个专用线程发送的RTP分包,将重复的RTP包中RTP包丢弃部分只保留一个RTP包,去掉保留下来的RTP包或不重复RTP包的包头;所述接收端还包括NALU类型解析模块、NALU组合模块、NALU单包模块、NALU拆分模块和NALU排序模块; 所述NALU类型解析模块,用于对去掉包头的RTP包进行类型解析,当RTP包标识为“分解”,则将该RTP包发送到NALU组合模块进行组合获取NAL单元,并发送到NALU排序模块;当RTP包标识为“分包”,则将该RTP包发送到NALU单包模块获取NAL单元,并发送到NALU排序模块;当RTP包标识为“组合”,则将该RTP包发送到NALU拆分模块进行拆分获取NAL单元,并发送到NALU排序模块; 所述NALU排序模块,根据NALU序列号对各个NAL单元进行排序。
【文档编号】H04N21/647GK104506959SQ201410777716
【公开日】2015年4月8日 申请日期:2014年12月15日 优先权日:2014年12月15日
【发明者】李 根, 谭小刚, 谢文君 申请人:广东威创视讯科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1