Rtp包的传输方法及装置制造方法
【专利摘要】本发明公开一种RTP包的传输方法及装置,在上述方法中,对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号;将上述RTP包进行传输。根据本发明提供的技术方案,不需要对会话中的每一个RTP包都传递完整的RTP报头,有效减少了冗余的传输信息,提高了网络的利用效率。
【专利说明】RTP包的传输方法及装置
【技术领域】
[0001]本发明涉及通信领域,具体而言,涉及一种RTP包的传输方法及装置。
【背景技术】
[0002]音视频数据在网络中进行传输之前,要先对其进行封装,如先封装成实时传输协议(Real-time Transport Protocol,简称为RTP)包,再封装成的用户数据报协议(UserDatagram Protocol,简称为UDP)包、英特网协议(Internet Protocol,简称为IP)包等。封装后数据远远大于原始有效数据,导致只传输了少量的音视频数据,却占据了大量的带宽。
[0003]RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式,它一开始被设计为一个多播协议,但后来常常被用在单播应用中。如图1所示,RTP包报头格式前12个字节出现在每个RTP包中,当RTP信源为混频器时,还需要CSRC列表,有时候还需要增加扩展报头。RTP包的报头信息包括如下域:版本(V)、填充标志(P)、扩展标志(X)、CSRC计数(CC)、标志(M)、有效载荷类型(PT)及同步源信息(SSRC)等。其中,这些域有以下意义:
[0004]版本(V):2比特,此域定义了 RTP的版本。此协议定义的版本是2。(值I被RTP草案版本使用,值O用在最初“vat”语音工具使用的协议中。)
[0005]填充标志(P):1比特,若填料比特被设置,则此包包含一到多个附加在末端的填充比特,填充比特不算作负载的一部分。填充的最后一个字节指明可以忽略多少个填充比特。填充可能用于某些具有固定长度的加密算法,或者用于在底层数据单元中传输多个RTP包。
[0006]扩展标志(X):1比特,若设置扩展比特,固定头(仅)后面跟随一个头扩展。
[0007]CSRC计数(CC):4比特,CSRC计数包含了跟在固定头后面CSRC识别符的数目。
[0008]标志(M):l比特,标志的解释由具体协议规定。它用来允许在比特流中标记重要的事件,如帧边界。
[0009]有效载荷类型(PT):7比特,此域定义了负载的格式,由具体应用决定其解释。协议可以规定负载类型码和负载格式之间一个默认的匹配。其他的负载类型码可以通过非RTP方法动态定义。RTP发送端在任意给定时间发出一个单独的RTP负载类型;此域不用来复用不同的媒体流。
[0010]序列号:16比特,每发送一个RTP数据包,序列号加I,接收端可以据此检测丢包和重建包序列。序列号的初始值是随机的(不可预测),以使即便在源本身不加密时(有时包要通过翻译器,它会这样做),对加密算法泛知的普通文本攻击也会更加困难。
[0011]时间戳:32比特,时间戳反映了 RTP数据包中第一个字节的采样时间。时钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。也可以通过RTP方法对负载格式动态描述。
[0012]在同一个RTP会话中,用于封装的报头信息,很大部分在传输建立之后不会发生变化,只有少数几个字节的数据会发生变化。尽管每个包中总有几个字节要发生变化,但包与包之间的区别却是恒定的,即二次差分为O。因此,对于会话中的每一个RTP包,如果都传递完整的RTP报头,将产生大量的信息冗余。
【发明内容】
[0013]本发明公开了一种RTP包的传输方法及装置,以至少解决相关技术中对于会话中的每一个RTP包,如果都传递完整的RTP报头,将产生大量的信息冗余的问题。
[0014]根据本发明的一个方面,提供了一种RTP包的传输方法。
[0015]根据本发明的RTP包的传输方法包括:对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号;将上述待传输RTP包进行传输。
[0016]根据本发明的另一方面,提供了一种RTP包的传输装置。
[0017]根据本发明的RTP包的传输装置包括:压缩模块,用于对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号;传输模块,用于将上述待传输RTP包进行传输。
[0018]通过本发明,对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,压缩后的RTP报头包括序列号信息。因此,不需要对会话中的每一个RTP包都传递完整的RTP报头,有效减少了冗余的传输信息,提高了网络的利用效率。
【专利附图】
【附图说明】
[0019]图1是相关技术中的未压缩的RTP报头的格式示意图;
[0020]图2是根据本发明实施例的RTP包的传输方法的流程图;
[0021]图3是根据本发明优选实施例的压缩后的RTP报头的格式示意图;
[0022]图4是根据本发明优选实施例的发送端发送RTP包的流程示意图;
[0023]图5是根据本发明优选实施例的接收端接收RTP包的流程示意图;
[0024]图6是根据本发明实施例的RTP包的传输装置的结构框图;以及
[0025]图7是根据本发明优选实施例的RTP包的传输装置的结构框图。
【具体实施方式】
[0026]下面结合说明书附图对本发明的具体实现方式做一详细描述。
[0027]图2是根据本发明实施例的RTP包的传输方法的流程图。如图2所示,该RTP包的传输方法包括以下处理:
[0028]步骤S201:对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号;
[0029]步骤S203:将上述待传输RTP包进行传输。
[0030]相关技术中,对于会话中的每一个RTP包,如果都传递完整的RTP报头,将产生大量的信息冗余。采用图1所示的方法,对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,压缩后的RTP报头包括序列号信息。因此,不需要对会话中的每一个RTP包都传递完整的RTP报头,有效减少了冗余的传输信息,提高了网络的利用效率。
[0031]优选地,上述压缩后的RTP报头还可以包括:用于指示当前RTP包的报头是否经过压缩的第一字段。例如,保留相关技术中的报头中的V字段,V字段可以设置成1,2,或3;如果是I,表示RTP报头是经过压缩的;如果是2或3,表示RTP报头是未经过压缩的。其中,如果设置为2,表示该RTP报文发送源不支持该RTP压缩方案;如果设置为3,表示该RTP报文发送源支持该RTP压缩方案,接收方需要解压出报头中包括序列号和时间戳等的上下文信息,并保存起来,以使得后续接收到的压缩的RTP报头可根据这些上下文信息来还原原RTP报头。
[0032]优选地,上述压缩后的RTP报头还包括以下至少之一:用于指示上述RTP包携带的是音频数据或视频数据的第二字段;用于指示上述RTP包携带的视频数据当前帧相对于上一帧的时间戳是否有变化的第三字段;以及填充字段。
[0033]在优选实施过程中,当压缩后的RTP报头包括:序列号,第一字段,第二字段、第三字段和填充字段时,可以将RTP报头的长度压缩到2个字节,例如,上述第一字段可以设置有2比特,上述第二字段可以设置有I比特,上述第三字段可以设置有I比特,上述填充字段可以设置有4比特,上述序列号可以设置有8比特。
[0034]以下结合图3对上述优选实施方式进行进一步说明。
[0035]图3是根据本发明优选实施例的压缩后的RTP报头的格式示意图。如图3所示,
[0036]压缩后的RTP头仅有两个字节,与图1所示的未压缩RTP报头相比,节省了 10个字节。其中,报头中V字段版本号仍然保留,用于指示该RTP报头是否经过压缩以及该RTP报文发送源是否支持该RTP压缩方案,相当于上述第一字段;vide0字段用于指示该RTP携带的数据是音频还是视频数据,相当于上述第二字段;flag用于视频数据时间戳计算,视频数据可以由flag值指示该帧相对于上一帧时间戳是否发生变化,相当于上述第三字段;pad字段为上述填充字段,可以先预留,暂不使用。在同一个音频或视频RTP流中,真正变化的信息为序列号和时间戳,而序列号是依次递增的,音频数据时间戳相邻包的差值也是一定的,例如,序列号相邻的包递增1,时间戳递增为固定值。如果相邻RTP包时间戳之差为40ms,如果收到序列号为η的RTP包时间戳为N,则序列号为m的时间戳就是N+(m_n)*40,因而根据序列号可以计算出音视频的时间戳信息。
[0037]优选地,将上述RTP包进行传输包括:在上述RTP包中,将报头未经压缩的一个或多个RTP包发送之后,发送预定数量的报头经过压缩的RTP包,其中,压缩后的RTP报头中的序列号以上述报头未经压缩的一个或多个RTP包为基准逐个递增。
[0038]压缩的RTP报头,可以是与相邻的上一个RTP包信息的差值,也可以是与上一个完整RTP报头的差值。如果采用前者,相邻两个RTP包的头部信息偏差应该更小,需要传输的差值也更小,但如果有RTP包丢失时,还原的RTP报头与未压缩前的信息就会不一致。因而优选米用后者,即依赖于前一个完整的RTP报头来还原RTP报头信息。若与前一个完整的RTP报头间隔越远,产生的偏差就越大,以至于压缩的头部无法承载所有的差值信息,因而每隔一段时间,必须再次发送完整的RTP报头。
[0039]完整的RTP报头有可能在网络传输中丢失,此后压缩的RTP报头将无法还原成正确的信息,可以由接收端请求发送端重新发送完整RTP信息,但网络传输的延时会影响该机制的效率。可以采用连续发送2个,3个(或更多个)完整的RTP信息,再对随后的RTP包头进行压缩,对于一般的网络,连续3个包丢失的概率极低,因而可以认为接收者总是能够收到完整的RTP报头信息,从而能还原后续压缩的RTP报头。
[0040]在一个只有序列号和时间戳发生变化的RTP流中,由于压缩的RTP报头序列号只有8位(bit),因而最多只能连续传输256个压缩的RTP消息。而为了降低对同一个完整的RTP包的依赖,可以适当地减少连续发送压缩RTP包的个数,例如,连续发送50个后再发3个完整的RTP包。
[0041]以下结合图4进一步描述上述优选实施方式。
[0042]图4是根据本发明优选实施例的发送端发送RTP包的流程示意图。如图4所示,发送端发送RTP包的流程主要包括以下处理:
[0043]步骤S401:发送端判断本次发送方式,即是发送报头经过压缩的RTP包,还是发送报头未经过压缩的RTP包(完整RTP包)。具体地,判断aud_send_lite_hdr是否为TURE ?如果是,则执行步骤S403,否则,执行步骤S409。
[0044]步骤S403:发送报头经过压缩的RTP包,其中,压缩的RTP报头的V字段为1,该压缩的 RTP 报头的序列号 seq_number 为 aud_send_lite_seq 的值,aud_send_cnt 增 I,对连续发送的报头经压缩的RTP包进行计数,且aud_send_lite_seq自增I。
[0045]步骤S405:判断连续发送报头经过压缩的RTP包的个数aud_send_lite_seq是否大于等于预设的第一阈值SEND_RTP_LITE_HEADER_COUNT ?如果否,则直接发送RTP包;如果是,则执行步骤S407。
[0046]步骤S407:需要换成另一种发送方式,即发送未经压缩报头的RTP包,将aud_send_lite_hdr设置为FALSE,将aud_send_cnt置为零,该设置在下次发送RTP包时才会生效,之后发送RTP包,本次发送的RTP包仍然是RTP报头经过压缩的。
[0047]步骤S409:发送报头未经过压缩的RTP包(完整RTP包),其中,未压缩的RTP报头的V字段为3,对连续发送的完整RTP包进行计数,即aud_send_cnt自增I。
[0048]步骤S411:当发送源支持该压缩方案,即aud_support_lite_hdr=TRUE ;且判断连续发送完整RTP包的个数aud_send_cnt否大于等于预设的第二阈值SEND_RTP_FIXED_HEADER_C0UNT ?如果是,执行步骤S413 ;否则,发送RTP包。
[0049]步骤S413:需要换成另一种发送方式,即发送报头经压缩的RTP包,将aud_Send_lite_hdr设置为TURE,将aud_send_cnt置为零,aud_send_lite_seq置为I,该设置在下次发送RTP包时才生效,之后发送RTP包,本次发送的RTP包仍然是RTP报头未经过压缩的。
[0050]由此可见,发送RTP包之前判断RTP报头是否进行压缩,并对连续发送的报头经压缩的RTP包或完整RTP包计数,当达到一定的次数后,下一次换用另一种方式发送。如连发三次完整RTP包,跟着连续发送50个压缩的RTP包,依此循环。
[0051]对于接收端而言,在发送端将上述RTP包进行传输之后,可以包括以下处理:接收上述RTP包;根据上述第一字段判断接收到的当前RTP包的报头是否经过压缩;如果否,则更新本地的上下文信息,其中,上述上下文信息包括序列号;如果是,则根据本地的上下文信息还原压缩后的RTP报头。
[0052]以下结合图5进一步描述上述优选实施方式。
[0053]图5是根据本发明优选实施例的接收端接收RTP包的流程示意图。如图5所示,接收端接收RTP包的流程包括以下处理:
[0054]步骤S501:接收端接收到RTP包。
[0055]步骤S503:接收端判断RTP包报头中的V字段。如果V=l,执行步骤S505 ;如果V=2,执行步骤S511 ;如果V=3,执行步骤S513。
[0056]步骤S505:接收端判断RTP包报头中的Video字段,如果该字段为1,则执行步骤S509 ;如果该字段为O,则执行步骤S507 ;
[0057]步骤S507:解压出序列号seq_number,根据保存在本地的序列号和时间戳计算此RTP包的序列号和时间戳。
[0058]步骤S509:解压出序列号seq_number,根据保存在本地的序列号计算此RTP包的序列号。
[0059]步骤S511:解压出序列号和时间戳。
[0060]步骤S513:解压出序列号和时间戳,并保存在本地,将aud_support_lite_hdr字段设置为TRUE。
[0061]图6是根据本发明实施例的RTP包的传输装置的结构框图。如图6所示,该RTP包的传输装置包括:压缩模块60,用于对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号;以及传输模块62,用于将上述待传输RTP包进行传输。
[0062]采用图6所示的装置,压缩模块60对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,压缩后的RTP报头包括序列号信息。因此,不需要对会话中的每一个RTP包都传递完整的RTP报头,有效减少了冗余的传输信息,提高了网络的利用效率。
[0063]优选地,上述压缩后的RTP报头还包括:用于指示当前RTP包的报头是否经过压缩的第一字段。
[0064]优选地,上述压缩后的RTP报头还包括以下至少之一:用于指示上述RTP包携带的是音频数据或视频数据的第二字段;用于指示上述RTP包携带的视频数据当前帧相对于上一帧的时间戳是否有变化的第三字段;以及填充字段。
[0065]优选地,上述传输模块62,用于在上述RTP包中,将报头未经压缩的一个或多个RTP包发送之后,发送预定数量的报头经过压缩的RTP包,其中,压缩后的RTP报头中的序列号以上述报头未经压缩的一个或多个RTP包为基准逐个递增。
[0066]优选地,如图7所示,上述装置还包括:接收模块64,用于接收上述RTP包;判断模块66,用于根据上述第一字段判断接收到的当前RTP包的报头是否经过压缩;更新模块68,用于在上述判断模块输出为否时,更新本地的上下文信息,其中,上述上下文信息包括上述序列号;还原模块70,用于在上述判断模块输出为是时,根据本地的上下文信息还原压缩后的RTP报头。
[0067]其中,上述压缩模块60和传输模块62可以设置在发送端,上述接收模块64和判断模块66可以设置在接收端。
[0068]需要说明的是,上述装置中各模块相互结合的优选实施方式可以参见图2至图5的描述,此处不再赘述。
[0069]综上所述,借助本发明提供的上述实施例,在发送完未压缩头之后,可以将随后的包头中未变化的部分除去,只传递与上一个未压缩头的变化差值,从而达到压缩的目的。接收端通过上一个未压缩头还原压缩头完整信息,需要在本地维护上下文信息,并且在收到新的未压缩头之后,对上下文信息进行更新。RTP头部压缩功能可将原来长度至少为12的RTP报头压缩为2字节,从而降低报头信息所占RTP包总大小的比率,提高对网络的利用效率。
[0070]以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
【权利要求】
1.一种实时传输协议RTP包的传输方法,其特征在于,包括: 对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号; 将所述待传输RTP包进行传输。
2.根据权利要求1所述的方法,其特征在于,所述压缩后的RTP报头还包括:用于指示当前RTP包的报头是否经过压缩的第一字段。
3.根据权利要求1或2所述的方法,其特征在于,所述压缩后的RTP报头还包括以下至少之一:用于指示所述RTP包携带的是音频数据或视频数据的第二字段;用于指示所述RTP包携带的视频数据当前帧相对于上一帧的时间戳是否有变化的第三字段;以及填充字段。
4.根据权利要求3所述的方法,其特征在于,所述压缩后的RTP报头的长度为2个字节,其中,所述第一字段设置有2比特,所述第二字段设置有I比特,所述第三字段设置有I比特,所述填充字段设置有4比特,所述序列号设置有8比特。
5.根据权利要求2所述的方法,其特征在于,将所述待传输RTP包进行传输包括: 在所述RTP包中,将报头未经压缩的一个或多个RTP包发送之后,发送预定数量的报头经过压缩的RTP包,其中,压缩后的RTP报头中的序列号以所述报头未经压缩的一个或多个RTP包为基准逐个递增。
6.根据权利要求2所述的方法,其特征在于,在将所述待传输RTP包进行传输之后,还包括: 接收所述待传输RTP包; 根据所述第一字段判断接收到的当前RTP包的报头是否经过压缩; 如果否,则更新本地的上下文信息,其中,所述上下文信息包括序列号; 如果是,则根据本地的上下文信息还原压缩后的RTP报头。
7.一种实时传输协议RTP包的传输装置,其特征在于,包括: 压缩模块,用于对待传输RTP包中一个或多个RTP包的RTP报头进行压缩,其中,压缩后的RTP报头包括:序列号; 传输模块,用于将所述待传输RTP包进行传输。
8.根据权利要求7所述的装置,其特征在于,所述压缩后的RTP报头还包括:用于指示当前RTP包的报头是否经过压缩的第一字段。
9.根据权利要求7或8所述的装置,其特征在于,所述压缩后的RTP报头还包括以下至少之一:用于指示所述RTP包携带的是音频数据或视频数据的第二字段;用于指示所述RTP包携带的视频数据当前帧相对于上一帧的时间戳是否有变化的第三字段;以及填充字段。
10.根据权利要求8所述的装置,其特征在于,所述传输模块,用于在所述RTP包中,将报头未经压缩的一个或多个RTP包发送之后,发送预定数量的报头经过压缩的RTP包,其中,压缩后的RTP报头中的序列号以所述报头未经压缩的一个或多个RTP包为基准逐个递+?>曰ο
11.根据权利要求8所述的装置,其特征在于,所述装置还包括: 接收模块,用于接收所述待传输RTP包; 判断模块,用于根据所述第一字段判断接收到的当前RTP包的报头是否经过压缩; 更新模块,用于在所述判断模块输出为否时,更新本地的上下文信息,其中,所述上下文信息包括所述序列号; 还原模块,用于在所述判断模块输出为是时,根据本地的上下文信息还原压缩后的RTP报头。
【文档编号】H04L29/06GK104394117SQ201410085286
【公开日】2015年3月4日 申请日期:2014年3月10日 优先权日:2014年3月10日
【发明者】蒋鸿伟, 李晓鹏, 周平, 陈正超 申请人:贵阳朗玛信息技术股份有限公司