一种接收rtp包时消除抖动乱序重包的方法

文档序号:7553159阅读:3951来源:国知局
专利名称:一种接收rtp包时消除抖动乱序重包的方法
技术领域
本发明属于媒体数据网络传输技术领域,具体涉及ー种接收RTP包时消除抖动乱序重包的方法。
背景技术
RTP(实时传输协议)是Real-time Transport Protocol的缩写,通常用于音视频媒体数据的实时传输,在VOIP和音视频会议业务中得到广泛的应用。RTP实行有序传送,但并不保证传送或防止无序传送,也不确定底层网络的可靠性,因此容易出现抖动、乱序和包重复等问题。不过RTP包的序号允许接收方重组发送方的包序列,同时序号也能用于决定适当的包位置。因此在接收RTP包时,必须由队列对包进行缓存,以消除抖动,同时需要对包进行排序重组。使用普通的队列接收RTP包时,需要不断的比较包的序号和在队列中查找存储位置,给系统増加处理开销。

发明内容
为解决上述技术问题,本发明提供了一种接收RTP包时消除抖动乱序重包的方法,此方法利用静态循环队列能快速获取RTP读写位置的特点,除了能消除抖动,在遇到包乱序重复的情况时,省去了包之间比较序号和在队列中查找存储位置的过程,简化了处理过程,大大降低了系统开销。为达到上述目的,本发明的技术方案如下:A.在系统接收RTP包之前,创建ー个长度为Ien的静态循环队列,队列中每个单元保存ー个RTP包,单元的序号为0到Ien-1 ;B.在正常接收RTP包时,用RTP的包序号seq对Ien取模得到保存位置i = seq%len,将该包保存到队列中第i个单元;C.为防止队列被写满溢出,在队列中包数目达到一定数值时,开始从队列中均匀取出RTP包进行处理,从而达到消除抖动的目的;D.出现包乱序和重复时,用包序号对Ien取模得到队列中的位置,然后进行保存。优选的,所述系统包括終端或服务器。优选的,所述系统遵循RTP协议。通过上述技术方案,本发明所提供的一种接收RTP包时消除抖动乱序重包的方法包括以下操作步骤:1.在系统接收前,创建ー个长度为Ien的静态循环队列,队列中每个单元保存ー个RTP包;2.在正常接收RTP包时,用RTP的包序号seq对Ien取模得到保存位置i = seq% len,将该包保存到队列中第i个单元,在队列中包数目达到一定数值时,开始从队列中均匀取出RTP包进行处理,从而达到消除抖动的目的;3.遇到包乱序和重复的情况时,和正常处理一祥,用包序号对Ien取模得到队列中的位置,然后进行保存。由于ー个RTP包通过包序号只对应队列中的ー个位置,因此RTP包在队列中是有序排列,即使是在包乱序的情況。而对于重复的包,会重复保存在队列中同样的位置,从而消除了包重复。本发明利用了静态循环队列可快速获得读写RTP包位置的特点,简化了接收RTP包处理的过程,有如下优点:a、使用循环静态队列,其存储空间能重复利用,不需要频繁的对存储空间进行分配和释放操作;b、根据包序号能能快速排序,高效的解决包乱序重复的问题,降低系统开销。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。图1是本发明所提供的一种接收RTP包时消除抖动乱序重包的方法实施例的系统处理流程图;图2是本发明所提供的一种接收RTP包时消除抖动乱序重包的方法实施例的系统收到RTP包的队列示意图;图3是本发明所提供的一种接收RTP包时消除抖动乱序重包的方法实施例的系统处理乱序、重复包后的队列示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明所提出的一种接收RTP包时消除抖动乱序重包的方法,包括以下步骤:A.在系统(包括终端或服务器)接收RTP包之前,创建ー个长度为Ien的静态循环队列,队列中每个单元保存ー个RTP包,単元的序号为0到len-1,其中,所述系统(終端或服务器)遵循RTP协议;B.在正常接收RTP包时,用RTP的包序号seq对Ien取模得到保存位置i = seq%len,将该包保存到队列中第i个单元;C.为防止队列被写满溢出,在队列中包数目达到一定数值时(例如len/2),开始从队列中均匀取出RTP包进行处理,从而达到消除抖动的目的;D.出现包乱序和重复时,用包序号对Ien取模得到队列中的位置,然后进行保存。其中,所述系统遵循RTP协议。实施例:參见附图1,它是本系统的接收RTP包的处理流程图。系统在接收RTP包前,创建长度为10的静态循环队列,队列起始单元序号为0,并将maxRecvSeq置为O。假定系统从网络上已经接收到RTP包序号为21526、21527和21528,maxRecvSeq值为21528 ;当前从网络上接收到RTP包序号为21530,根据位置计算规则21530% 10 = 0,该包保存在第0个单元,同时更新maxRecvSeq为21530。其中,RTP包在队列中的存储情况參见附图2。參见附图3,系统从网络上接收到序号为21529的包(与序号为21530的包乱序),计算存储位置21529% 10 = 9,保存到第9个单元。由于21529 < maxRecvSeq,因此不会更新maxRecvSeq,然后继续接收到需要为21530的包(之前已经接收过此序号的包,说明出现包重复),根据21530% 10 = 0,保存到第0单元,由于21530和maxRecvSeq相等,因此也不会更新 maxRecvSeq。另外,在接收RTP的同时,系统也需要不断取出队列中的RTP包进行处理,否则会出现队列被写满溢出的问题。本发明的技术方案采取如下的步骤简化RTP包接收处理:A、建立长度为Ien的静态循环队列,并创建两个标志nextReadSeq(下一个可取出队列处理的包的序号)和maxRecvSeq (接收的包中最大序号);B、收到第一个RTP包(包序号为seq)时,将包保存在队列中第seq% Ien单元,nextReadSeq和maxRecvSeq都被置为seq ;收到后续包时,同样保存在队列的第seq% Ien单兀,如果 seq > maxRecvSeq, maxRecvSeq 置为 seq ;C、当队列中RTP包数大于len/2时,取出第nextReadSeq1^ Ien单元的包进行处理,同时给nextReadSeq的值加I ;D、假如收到RTP包,其序号seql < maxRecvSeq,而之前队列没有收到过该包,说明出现包乱序,这时将包保存在第seql % Ien单元,但不更新maxRecvSeq ;而假如之前已经收到过序号seql的包,说明出现包重复,同样将包保存在第Seql% Ien単元,也不更新maxRecvbeq。

本发明所提出的一种接收RTP包时消除头东乱序重包的方法利用了静态循环队列可快速获得读写RTP包位置的特点,简化了接收RTP包处理的过程,有如下优点:a、使用循环静态队列,其存储空间能重复利用,不需要频繁的对存储空间进行分配和释放操作山、根据包序号能能快速排序,高效的解决包乱序重复的问题,降低系统开销。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。
权利要求
1.一种接收RTP包时消除抖动乱序重包的方法,其特征在于,包括以下步骤: A.在系统接收RTP包之前,创建ー个长度为Ien的静态循环队列,队列中每个单元保存ー个RTP包,单元的序号为O到Ien-1 ; B.在正常接收RTP包时,用RTP的包序号seq对Ien取模得到保存位置i= seq% len,然后将该包保存到队列中第i个单元; C.为防止队列因被写满而溢出,在队列中包数目达到设定数值时,开始从队列中均匀取出RTP包进行处理; D.出现包乱序和重复时,用包序号对Ien取模得到队列中的位置,然后进行保存。
2.根据权利要求1所述的ー种接收RTP包时消除抖动乱序重包的方法,其特征在于,所述系统包括終端或服务器。
3.根据权利要求1或2所述的ー种接收RTP包时消除抖动乱序重包的方法,其特征在于,所述系统遵循RTP协议。
全文摘要
本发明公开了一种接收RTP包时消除抖动乱序重包的方法,通过在系统接收前,创建一个长度为len的静态循环队列,队列中每个单元保存一个RTP包,在正常接收RTP包时,用RTP的包序号seq对len取模得到保存位置i=seq%len,将该包保存到队列中第i个单元,在队列中包数目达到一定数值时,开始从队列中均匀取出RTP包进行处理,从而达到消除抖动的目的。本发明公开的一种接收RTP包时消除抖动乱序重包的方法,本方法利用了静态循环队列可快速获得读写RTP包位置的特点,简化了接收RTP包处理的过程,大大降低了系统开销。
文档编号H04N21/647GK103108256SQ20131007381
公开日2013年5月15日 申请日期2013年3月8日 优先权日2013年3月8日
发明者兰玉杰 申请人:苏州工业园区云视信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1