一种压缩时间戳的方法和装置与流程

文档序号:13217441阅读:330来源:国知局
技术领域本发明涉及鲁棒性头压缩(ROHC,RobustHeaderCompression)技术,尤指一种压缩时间戳的方法和装置。

背景技术:
ROHC技术是基于IP的通用压缩技术,主要应用在无线传输的空中接口,用于提高空中接口的资源利用率。ROHC技术可以将互联网协议(IP,InternetProtocol)电话(VoIP,VoiceoverInternetProtocol)业务头压缩至最小一个字节的程度,带宽利用率一般可达90%以上。ROHC技术主要是利用以下规律来实现的:同一个流的数据包头(特别是连续的数据包头)中有很多域是不变的,或者很多域不是随机变化的,而是规律性变化的。在压缩互联网协议(IP,InternetProtocol)/用户数据协议(UDP,UserDatagramProtocol)/实时传送协议(RTP,Real-timeTransportProtocol)类型的数据包时,RTP协议中的时间戳(TS,TimeStamp)字段是一个很重要的待压缩字段。目前RFC3095协议中提供了压缩RTP时间戳(ScaledRTPTimestamp)方法。该方法的思想是:两个连续的RTP数据包头的TS值之间通常不是任意增加的,而是每次增加的是一个定值,即时间戳倍数(TS_STRIDE,Timestampstride)。例如,在语音流中,语音的采样频率通常为8千赫兹(kHz),而一帧数据中包含20毫秒(ms)的语音数据。通常一个语音帧放在一个RTP数据包中传输,这种情况下RTP数据包中TS值的增长量通常为N×160(其中,160=8000×0.2),N为正整数。在视频流中,如果视频的采样频率是90kHz,且每秒生成30帧,则每帧中TS值的增长量为N×3000(3000=90000/30)。有一点需要注意的是由于视频帧比较大,一个帧经常会分成几个RTP数据包发送。属于同一帧的RTP数据包头的TS值相同。采用ScaledRTPTimestamp方法时,压缩效率比较低。

技术实现要素:
为了解决上述问题,本发明提出了一种压缩时间戳的方法和装置,能够提高压缩效率。为了达到上述目的,本发明提出了一种压缩时间戳的方法,包括:压缩端计算第N个数据包和第(N-1)个数据包的时间戳TS之间的第一差值;压缩端判断出计算得到的第一差值为0;或者,判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前时间戳倍数TS_STRIDE相等,将第N个数据包的压缩的时间戳TS_SCALED包含在第N个数据包中发送给解压端;其中,N为大于或等于2的正整数。优选地,当所述压缩端判断出所述第一差值不为0,且判断出所述第一差值与当前TS_STRIDE不相等,且所述N为2时,该方法还包括:更新所述当前TS_STRIDE,将所述第N个数据包的TS和更新后的当前TS_STRIDE包含在所述第N个数据包中发送给解压端。优选地,当所述压缩端判断出所述第一差值不为0,且判断出所述第一差值与所述当前TS_STRIDE不相等,且判断出所述第一差值为所述当前TS_STRIDE的两倍或两倍以上,且所述N大于2时,该方法还包括:所述压缩端计算第(N-1)个数据包和第(N-2)个数据包的TS之间的第二差值;所述压缩端判断出所述第一差值与所述第二差值不相等,将所述第N个数据包的TS_SCALED包含在所述第N个数据包中发送给所述解压端。优选地,当所述压缩端判断出所述第一差值不为0,且判断出所述第一差值与所述当前TS_STRIDE不相等,且判断出所述第一差值不是当前TS_STRIDE的整数倍;或者判断出所述第一差值与所述第二差值相等时,该方法还包括:所述压缩端更新所述当前TS_STRIDE,将所述第N个数据包的TS和更新后的当前TS_STRIDE包含在所述第N个数据包中发送给解压端。本发明还提出了一种压缩时间戳的装置,至少包括:计算模块,用于计算第N个数据包和第(N-1)个数据包的时间戳TS之间的第一差值;判断模块,用于判断出计算得到的第一差值为0;或者,判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前时间戳倍数TS_STRIDE相等,将第N个数据包的压缩的时间戳TS_SCALED包含在第N个数据包中发送给解压端;其中,N为大于或等于2的正整数。优选地,所述判断模块还用于:判断出所述第一差值不为0,且判断出所述第一差值与当前TS_STRIDE不相等,且所述N为2,更新所述当前TS_STRIDE,将所述第N个数据包的TS和更新后的当前TS_STRIDE包含在所述第N个数据包中发送给解压端。优选地,所述判断模块还用于:端判断出所述第一差值不为0,且判断出所述第一差值与所述当前TS_SCALED不相等,且判断出所述第一差值为所述当前TS_STRIDE的两倍或两倍以上,且所述N大于2,计算第(N-1)个数据包和第(N-2)个数据包的TS之间的第二差值;判断出所述第一差值与所述第二差值不相等,将所述第N个数据包的TS_SCALED包含在所述第N个数据包中发送给所述解压端。优选地,所述判断模块还用于:判断出所述第一差值不为0,且判断出所述第一差值与所述当前TS_STRIDE不相等,且判断出所述第一差值不是当前TS_STRIDE的整数倍;或者判断出所述第一差值与所述第二差值相等,更新所述当前TS_STRIDE,将所述第N个数据包的TS和更新后的当前TS_STRIDE包含在所述第N个数据包中发送给解压端。与现有技术相比,本发明包括:压缩端计算第N个数据包和第(N-1)个数据包的时间戳TS之间的第一差值;压缩端判断出计算得到的第一差值为0;或者,判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前TS_STRIDE相等,将第N个数据包的TS_SCALED包含在第N个数据包中发送给解压端;其中,N为大于或等于2的正整数。通过本发明的方案,压缩端在第一差值为0;或者,在第一差值不为0,且第一差值与当前TS_STRIDE相等时,将第N个数据包的压缩的TS包含在第N个数据包中发送给解压端,从而提高了压缩效率。附图说明下面对本发明实施例中的附图进行说明,实施例中的附图是用于对本发明的进一步理解,与说明书一起用于解释本发明,并不构成对本发明保护范围的限制。图1为本发明压缩时间戳的方法的流程图;图2为本发明压缩时间戳的装置的结构组成示意图。具体实施方式为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的各种方式可以相互组合。参见图1,本发明提出了一种压缩时间戳的方法,包括:步骤100、压缩端计算第N个数据包和第(N-1)个数据包的TS之间的第一差值。本步骤中,N为大于或等于2的正整数。本步骤中,数据包可以是包含RTP头的数据包。步骤101、压缩端判断出计算得到的第一差值为0;或者,判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前TS_STRIDE相等,将第N个数据包的TS_SCALED包含在第N个数据包中发送给解压端。本步骤中,当压缩端判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前TS_STRIDE不相等,且N为2时,更新当前TS_STRIDE,将第N个数据包的TS和更新后的当前TS_STRIDE包含在第N个数据包中发送给解压端。其中,更新当前TS_STRIDE即将当前TS_STRIDE更新为第一差值。其中,当压缩端判断出计算得到的第一差值不为0,且判断出第一差值与当前TS_STRIDE不相等,且判断出计算得到的第一差值为当前TS_STRIDE的两倍或两倍以上,且N大于2时,本步骤还包括:压缩端计算第(N-1)个数据包和第(N-2)个数据包的TS之间的第二差值;压缩端判断出第一差值与第二差值不相等,将第N个数据包的TS_SCALED包含在第N个数据包中发送给解压端。而当压缩端判断出第一差值不为0,且判断出第一差值与当前TS_STRIDE不相等,且判断出第一差值不是当前TS_STRIDE的整数倍;或者判断出第一差值与第二差值相等时,压缩端更新当前TS_STRIDE,将第N个数据包的TS和更新后的当前TS_STRIDE包含在第N个数据包中发送给解压端。通过本发明的方案,压缩端在第一差值为0,或第一差值与第二差值不相等时,将第N个数据包的TS_SCALED包含在第N个数据包中发送给解压端,从而提高了压缩效率。例如,在视频业务中,由于视频帧比较大,属于同一帧的数据包的TS字段相同,那么解压端根据公式(2)计算得到的TS值是正确的,也就不需要每次都将数据包的TS发送给解压端,从而提高了压缩效率。本发明的方法中,压缩端在发送第一个RTP数据包时会将第一个RTP数据包的TS和TS_STRIDE(等于第一个RTP数据包的TS)一起发送给解压端。解压端收到后,用TS对TS_STRIDE取余就可以计算出TS_OFFSET。当压缩端与解压端确定TS_STRIDE和TS_OFFSET后,压缩端根据第N个RTP数据包的TS和TS_STRIDE,利用公式(1)计算第N个RTP数据包的TS_SCALED,并将第N个RTP数据包的TS_SCALED作为第N个RTP数据包的时间戳发送给解压端从而节省码流。其中,N为大于或等于2的正整数。TS_SCALED=[TSTS_STRIDE]---(1)]]>其中,TS_SCALED为压缩的TS。公式(1)中,第N个RTP数据包的TS_SCALED是对第N个RTP数据包的TS和TS_STRIDE之间的比值进行取整获得的。解压端接收到第N个RTP数据包后,根据公式(2)计算第N个RTP数据包的TS值。TS=TS_SCALEDvTS_STRIDE+TS_OFFSET(2)其中,TS_OFFSET为TS的偏移值。下面通过具体实施例详细说明本发明的方法。第一实施例,丢包情况下更新当前TS_STRIDE的方法。假设RTP数据包中TS值的变化如下:160×1,160×2,160×3,160×5,160×6,160×8,160×10。1)第一包,压缩端发送给解压端的第一个RTP数据包带有第一个RTP数据包的TS原值以及当前TS_STRIDE,此时当前TS_STRIDE等于第一个RTP数据包的TS原值。2)第二包,压缩端接收到第二个RTP数据包,计算第二个RTP数据包和第一个RTP数据包的TS之间的差值为160,与当前TS_STRIDE值相等,认为TS_STRIDE值不变,第二个RTP数据包的TS_SCALED值等于2。3)第三包,与第二包处理相同。4)第四包,压缩端接收到第四个RTP数据包,计算第四个RTP数据包和第三个RTP数据包的TS之间的差值为320,为当前TS_STRIDE的两倍,计算第三个RTP数据包和第二个RTP数据包的TS之间的差值为160,两个差值不相等,认为当前TS_STRIDE没有发生变化,第四个RTP数据包的TS_SCALED值等于5。5)第五包,压缩端计算第五个RTP数据包和第四个RTP数据包的TS之间的差值为160,与当前TS_STRIDE相等,认为当前TS_STRIDE不变,第五个RTP数据包的TS_SCALED值等于6。6)第六包,压缩端计算第六个RTP数据包和第五个RTP数据包的TS之间差值为320,为当前TS_STRIDE的两倍,计算第五个RTP数据包和第四个RTP数据包的TS之间的差值,为160,两个差值不相等,认为TS_STRIDE值没有发生变化,第六个RTP数据包的TS_SCALED值等于8。7)第七包,压缩端计算第七个RTP数据包和第六个RTP数据包的TS之间的差值,为320,为当前TS_STRIDE的两倍,计算第六个RTP数据包和第五个RTP数据包的TS差值,也是320,认为TS_STRIDE值发生了变化,将TS_STRIDE值更新为320,第七个RTP数据包的TS的TS_SCALED值等于10。当连续两个RTP数据包的TS之间的差值相等时更新TS_STRIDE值出于以下两点考虑:1)如果出现丢包的情况,出现连续两次丢包的个数(大于1)都一样的机率很小。即第一次丢了N(N大于1)包,收到几包后,又连续N包,这种机率很小。只要不出现上述情况,本发明提出的TS_STRIDE值更新方法都能正确识别出是因为丢包造成的TS_STRIDE值变化,不更新TS_STRIDE值。2)在语音业务中,由于静默期的存在,会存在TS_STRIDE值为TS差值的整数倍,但确实发生了变化的情况。正常语音包的发包间隔是20ms,静默包的发包间隔是160ms,即正常包的8倍。因此静默期的TS间隔是正常时的8倍。当连续两次TS差值都一样时,更新TS_STRIDE值,这样可以保证TS_STRIDE值快速更新为实际的TS_STRIDE值。第二实施例,TS值相同时,更新当前TS_STRIDE的方法。假设每一个视频帧都分为5个RTP包,这5个RTP包中TS值的相同。每帧的TS值变化如下:3000×1,3000×2,3000×3,3000×4。1)第一包,压缩端发送给解压端的第一个RTP数据包带有第一个RTP数据包的TS原值以及当前TS_STRIDE,此时当前TS_STRIDE等于第一个RTP数据包的TS原值。2)第二包到第五包,计算当前RTP数据包与上一RTP数据包的TS之间的差值为0,当前TS_STRIDE保持不变,第二个RTP数据包到第五个RTP数据包的TS_SCALED值为1。3)第六包,计算第六个RTP数据包和第五个RTP数据包的TS之间的差值为3000,由于该差值等于当前TS_STRIDE,第六个RTP数据包的TS_SCLALED值为2。4)第七包到第十包,计算当前RTP数据包与上一RTP数据包的TS之间的差值为0,当前TS_STRIDE保持不变,第七个RTP数据包到第十个RTP数据包的TS_SCALED值为2。5)第十一包,计算第十一个RTP数据包和第十个RTP数据包的TS之间的差值为3000,由于该差值等于当前TS_STRIDE,第十一个RTP数据包的TS_SCLALED值为3。6)第十二包到第十五包,计算当前RTP数据包与上一RTP数据包的TS之间的差值为0,当前TS_STRIDE保持不变,第十二个RTP数据包到第十五个RTP数据包的TS_SCALED值为3。优化后的理论压缩效率分析。1.丢包情况假设丢包率为1%,每次丢一包。终端每20ms生成一个语音包,且每个语音包的TS值都是按TS_STRIDE值递增的。10分钟内终端共发送3000(10×60×5)包,丢掉的为30(3000×1%)。不丢包时,语音包的类型为UO0,包长为1个字节;丢包时,语音包的类型是UOR2+EXT3,包长为13个字节。按照现有的更新TS_STRIDE的方法,10分钟之内TS_STRIDE值会跳变60(30×2,每丢一次包,TS_STRIDE值会有一次变成双倍的过程,不丢包时,TS_STRIDE值又会变回来)次。则优化前,10分之内发送的语音包大小为:(3000-60)×1+60×13=3720。采用本发明的方法,没有TS_STRIDE跳变的过程,当丢包时,压缩端用UO1_TS包(2个字节)将TS_SCLASED值带给解压端。则优化后,10分之内发送的压缩包大小为:(3000-60)×1+60×2=3060。即采用本发明的方法后,10分钟内可以节省660个字节,与不丢包情况相比,只多出60个字节。参见图2,本发明还提出了一种压缩时间戳的装置,至少包括:计算模块,用于计算第N个数据包和第(N-1)个数据包的时间戳TS之间的第一差值;判断模块,用于判断出计算得到的第一差值为0;或者,判断出计算得到的第一差值不为0,且判断出计算得到的第一差值与当前TS_STRIDE相等,将第N个数据包的TS_SCALED包含在第N个数据包中发送给解压端;其中,N为大于或等于2的正整数。本发明的装置中,判断模块还用于:判断出第一差值不为0,且判断出第一差值为当前TS_STRIDE的两倍或两倍以上,且N为2,更新当前TS_STRIDE,将第N个数据包的TS和更新后的当前TS_STRIDE包含在第N个数据包中发送给解压端。本发明的装置中,判断模块还用于:端判断出第一差值不为0,且判断出所述第一差值与所述当前TS_SCALED不相等,且判断出第一差值与当前TS_STRIDE不相等,且N大于2,计算第(N-1)个数据包和第(N-2)个数据包的TS之间的第二差值;判断出第一差值与第二差值不相等,将第N个数据包的TS_SCALED包含在第N个数据包中发送给所述解压端。本发明的装置中,判断模块还用于:判断出第一差值不为0,且判断出所述第一差值与所述当前TS_STRIDE不相等,且判断出第一差值不是当前TS_STRIDE的整数倍;或者判断出第一差值与第二差值相等,更新当前TS_STRIDE,将第N个数据包的TS和更新后的当前TS_STRIDE包含在第N个数据包中发送给解压端。需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1