CN101771599A - 一种rtp数据包接收处理方法及装置 - Google Patents
一种rtp数据包接收处理方法及装置 Download PDFInfo
- Publication number
- CN101771599A CN101771599A CN200810241110A CN200810241110A CN101771599A CN 101771599 A CN101771599 A CN 101771599A CN 200810241110 A CN200810241110 A CN 200810241110A CN 200810241110 A CN200810241110 A CN 200810241110A CN 101771599 A CN101771599 A CN 101771599A
- Authority
- CN
- China
- Prior art keywords
- rtp packet
- level
- packet
- queues
- rtp
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种RTP数据包接收处理方法及装置,其中,该方法包括:从网络接收RTP数据包;对接收的RTP数据包进行一级缓冲预排序处理;将预排序处理后的RTP数据包进行二级缓冲处理。其中,采用队列组作为一级缓冲,对接收的RTP数据包进行一级缓冲预排序处理,其中,队列组包括链表组、数组组。本发明可解决现有技术中RTP接收处理方式处理效率低的缺陷,实现提高RTP数据包的接收处理效率。
Description
技术领域
本发明涉及通信领域中流媒体等数据传输技术,具体地,涉及一种实时传输协议(Real-time Transport Protocol,简称RTP)数据包接收处理方法及装置。
背景技术
RTP是用于流媒体业务的标准传输协议,由互联网工程任务组(The Internet Engineering Task Force,简称IETF)制定,其标准文档是RFC 3550,该文档中规定了RTP包的格式。在所有流媒体相关业务中,几乎所有的媒体内容在IP网络上进行传输之前都需要封装为RTP数据包的形式。由于RTP协议本身和流媒体业务的特点,在处理RTP数据包接收时一般会遇到以下问题:
A.由于RTP协议的底层一般由UDP协议承载,因此造成传输具有不可靠性,UDP传输的丢包、乱序、重复等问题在RTP传输时会出现。
B.在流媒体通讯中,音视频同步,去抖动等需求,往往有实时性要求。
C.RTP数据包接收的实现一般使用回调机制,回调函数操作时间过长会引起底层缓冲区溢出。
D.移动终端本身的处理能力和功耗等限制,接收操作的步骤越少越好。
由于RTP数据包有严格的先后顺序,在接收以后必须在缓冲中进行重新排序才能交给下一级进行处理,现有技术中RTP接收处理方式主要有两种:
一、两级缓冲加插入排序:采用两级缓冲的机制,第一级按照到达顺序把接收的数据放入第一级缓冲,在二级缓冲处理中从第一级缓冲取出数据并使用插入排序算法将数据包按照RTP的序列号形成一维链表。
二、两级缓冲加插空排序:采用两级缓冲的机制,第一级的处理机制与上述方式一相同,第二级使用预设缓冲,根据RTP的序列号将数据包插入预设好的缓冲,缓冲区满时丢弃后续到达的数据包。
在实现本发明过程中,发明人发现现有技术RTP接收处理方式至少存在如下问题:
1.第一种方式填充二级缓冲的时候使用的插入排序算法效率比较低,算法复杂度为O(n2),属于效率较低的排序算法。
2.第二种方式中乱序包或错误包可能占据正常包的位置,造成正常包到达后无法插入而丢弃;二级缓冲的长度固定,当缓冲满时对后续数据包直接丢弃,无法根据网络流量进行自适应处理;缓冲分配过大则浪费,过小则可能不够用;且第二种方式对网络接收到的数据进行了两次拷贝,增加了内存复制的开支。
3.上述两种方式均存在共同缺点:二级缓冲复杂度较高、二级缓冲整体由此造成处理效率低。
发明内容
本发明的目的是针对现有技术中RTP接收处理方式处理效率低的缺陷,提出一种RTP数据包接收处理方法及装置,以实现提高RTP数据包的接收处理效率。
为实现上述目的,根据本发明的一个方面,提供了一种RTP数据包接收处理方法。
根据本发明实施例的RTP数据包接收处理方法,包括:从网络接收RTP数据包;对接收的RTP数据包进行一级缓冲预排序处理;将预排序处理后的RTP数据包进行二级缓冲处理。
优选地,可以采用队列组作为一级缓冲和/或二级缓冲,对接收的RTP数据包进行一级缓冲预排序处理和二级缓冲处理,其中,队列组可以包括链表组和/或数组组。
优选地,队列组可以为两个,对接收的所述RTP数据包进行一级缓冲预排序处理的操作可以包括:对接收的RTP数据包进行一级缓冲预排序,将RTP数据包保存至当前正接收数据包的队列组的队列中;当队列组的所有队列已用完,或者队列组保存的RTP数据包总数目大于预设的阀值时,该队列组停止接收数据包,启动另一个队列组,将当前接收到的数据包放入该另一个队列组中;其中,停止接收数据包的队列组执行二级缓冲处理的操作。
优选地,将预排序处理后的RTP数据包进行二级缓冲处理的操作可以包括:将启动二级缓冲的队列组中的所有队列进行合并以及排序;将所述合并以及排序后的队列分为稳定段和非稳定段,将稳定段直接放入二级缓冲。
为实现上述目的,根据本发明的另一个方面,还提供了一种RTP数据包接收处理装置。
根据本发明实施例的RTP数据包接收处理装置,包括:接收单元,用于从网络侧接收RTP数据包;一级缓冲处理单元,用于对接收的RTP数据包进行一级缓冲预排序处理;二次缓冲处理单元,用于对一级缓冲预排序处理后的结果进行二级缓冲处理。
优选地,一级缓冲处理单元可以包括:
存储模块,用于存储至少两个队列组及预设的阈值,其中,每个队列组存储一级缓冲预排序处理及二级缓冲处理后的RTP数据包,该阈值为每个所述队列组能存储的最大RTP数据包的总数目,队列组包括链表组和/或数组组;
分析模块,用于将当前接收的RTP数据包的序列号与上次最后接收的RTP包的序列号进行比较,将RTP数据包总数目与预设的阀值进行比较;
处理模块,用于接收分析模块的比较结果,对当前接收的RTP数据包进行一级缓冲预排序并存入存储模块的队列组中;当队列组的所有队列已用完,或者RTP数据包总数目大于预设的阀值时,触发二次缓冲处理单元,并将当前接收到的数据包放入存储模块的另一个队列组中。
优选地,二次缓冲处理单元可以包括:
合并排序模块,用于接收一级缓冲处理单元的触发消息,将存储模块中启动二级缓冲的队列组进行合并排序;
处理模块,用于将合并排序后的队列分为稳定段和非稳定段,将非稳定段中RTP数据包序列号的第一个非连续点之前的RTP数据包与稳定段合并,放入二级缓冲;将非稳定段的剩余RTP数据包放入所述存储模块中当前正在接收数据的队列组中。
本发明的RTP数据包接收处理装置可以为网络机顶盒,手机等用于流媒体点播/直播类的客户端。
本发明各实施例的RTP数据包接收处理方法及装置,可以有效利用网络数据包到达的时间间隙进行数据包的预排序,从而平衡一级缓冲和二级缓冲的处理复杂度,简化整体排序过程,有效提高整体处理效率。
本发明还有一些实施例采用链表组或者数组等队列组作为一级缓冲和二级缓冲,不会由于乱序包提前到达造成正常包无法排序;二级缓将合并冲排序队列分为稳定段和非稳定段,有效解决乱序包滞后到达问题,减少由于数据包乱序造成的误判断。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明RTP数据包接收处理方法实施例流程图;
图2(a)为根据本发明RTP数据包接收处理方法中以链表组为一级缓冲的实施例解析示意图;
图2(b)为根据本发明RTP数据包接收处理方法中以数组为一级缓冲的实施例解析示意图;
图3为根据本发明RTP数据包接收处理方法中一级缓冲预排序实施例流程图;
图4为根据本发明RTP数据包接收处理方法中二级缓冲处理过程实施例流程图;
图5为根据本发明RTP数据包接收处理装置实施例示意图;
图6为根据本发明RTP数据包接收处理装置另一实施例示意图。
具体实施方式
以下结合附图对本发明的实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
方法实施例
图1为根据本发明RTP数据包接收处理方法实施例流程图,如图1所示,本实施例包括:
步骤S102:从网络接收RTP数据包;
步骤S104:对接收的RTP数据包进行一级缓冲预排序处理;
步骤S106:将预排序处理后的RTP数据包进行二级缓冲处理。
本实施例可以有效地利用网络数据包到达的时间间隙进行数据包的预排序,平衡了一级缓冲和二级缓冲的处理复杂度,简化了整体排序过程,提高了整体处理效率。本发明中一级缓冲和二级缓冲可以采用接收队列组的形式,其中,队列组可以为链表组、数组等,队列组的每个队列对应为链表或者数组。
本发明中一级缓冲预排序处理主要利用网络接收的间隔对接收到的RTP数据包进行初步排序,得到一系列有序RTP队列。从而在使用这些有序RTP队列进行二级缓冲排序的时候能够提高排序速度。一级缓冲的预排序机制可以有多种实现方式,例如预排序后进行二级缓冲处理的有序RTP队列可以是链表形式,也可以是数组形式,下面通过图2(a)-图2(b)对本发明一级缓冲的预排序过程进行解释说明。
图2(a)为根据本发明RTP数据包接收处理方法中以链表组为一级缓冲的实施例解析示意图,如图2(a)所示,一级缓冲中设置2个接收链表组,每一组有n个链表,用于保存收到的RTP数据包,两个接收链表组交替使用。其中一个链表组用于实时接收RTP数据包,同时另一个链表组用于进行二次缓冲排序处理,具体在图4中会进行详细说明。下面对照图2(a)对本发明的一级缓冲的处理机制进行解释说明:图2(a)的情况下,假设每个接收链表组能够容纳的最大RTP数据包的数量为max_proc_pkt,每个接收队列组(链表组)由n个接收链表组成。假设RTP数据包到达的顺序依次为:1,4,2,3,7,8,9,10,5,6,16,20,11,12,13,15,14,17,19,18,20...。
1.每一链表组的第一个链表保留给二级缓冲排序后剩余的RTP包组成的链表使用的,不用于接收过程,其余链表用于实时接收数据包。如图2(a)中接收链表1不接收RTP数据包,具体可参见图4实施例中对于二级缓冲的相关说明。
2.在队列组开始接收RTP包之前所有链表都是空的,没有任何RTP数据包。每一链表组从第二个链表开始使用,接收到的RTP数据包从第二个链表开始放入。在收到一个RTP数据包以后,首先需要判断其序列号是否正确(序列号不能为负数)。如果序列号正确,则把它与本组上一次放入的RTP包的序列号(作比较。如果相等,则表示这是一个重复包,应该丢弃;如果新到达的数据包比上一次的数据包的序列号大,则添加到当前链表的末尾,否则将其放入当前链表组的下一个未使用的空链表,这样保证每个链表中的数据包是递增的,不同链表的第一序列号与前一个链表的最后一个序号则不是递增的,为二级缓冲处理做好准备。如图2(a)所示,按照RTP包到达的顺序将上述数据包存储到接收链表2到链表7中,其中,每个链表中的数据包序列号保持递增。
3.当某一链表组的所有的接收链表都用完,或者接收到的RTP数据包数目大于链表组预设的阀值,如:接收到的RTP数据包数目大于链表组能够容纳的最大RTP数据包的数量max_proc_pkt时,停止对该链表组的使用,对其启动二级缓冲排序处理流程,具体如图4所示。在停止该链表组的同时启用另一链表组,把接收到的RTP数据包放入另一组链表组(接收链表组2,未示出,与接收链表组1结构相同)。
4.两个链表组反复交替使用,当启动二级缓冲进行排序的链表组处理完毕后,加入一级缓冲进行一级缓冲的接收预处理。
本实施例以链表组为一级缓冲进行举例,为一级缓冲的优选实现方式,本领域普通技术人员应当了解,还可以数组等其它队列组的方式实现一级缓冲预处理。
图2(b)为根据本发明RTP数据包接收处理方法中以数组为一级缓冲的实施例解析示意图。同样假设一个接收数组组能够容纳的最大RTP数据包的数量为max_proc_pkt,每个接收队列组(本图中为数组组)由n个接收数组组成。假设RTP包到达的顺序为:1,4,2,3,7,8,9,10,5,6,16,20,11,12,13,15,14,17,19,18,20...。
如图2(b)所示,其一级缓冲的处理过程与图2(a)链表组的处理过程相类似,不再重复举例说明。对于图2(b)所示数组实现方式,由于数组大小固定,因此每个数组的大小按照冗余都固定为本组数组能够容纳的最大RTP数据包的数量,在本例中即为max_proc_pkt。
图2(a)链表组中每个链表的大小不固定,如果接收的数据包是连续的,则链表最大可以接收连续的max_proc_pkt个数据包。如果采用图2(b)中的数组作为一级缓冲,由于每个数组的大小是固定的,则可能有些数组中的固定长度由于数据包序列号不连续没有被充分利用而空闲,因此,链表组为一级缓冲的优选实现方式,但本发明各实施例中的一级缓冲不仅限于链表组,还可以通过其他队列组的方式实现。
上述实施例的一级缓冲处理中,利用数据包到达的间隙进行数据包的预处理排序,可以使用链表组保存到达的数据包,并使用双链表组切换使用,由于使用链表进行数据包的存储,可以减少内存复制操作,不会产生由于乱序包提前到达造成的正常包无法入队现象。
图3为根据本发明RTP数据包接收处理方法中一级缓冲预排序实施例流程图,为说明方便,将当前收到的RTP包序列号记为“curr_seq”,上次最后收到的RTP包的序列号记为“last_seq”;将当前接收链表的索引记为“curr_list”,链表组的总链表数量记为“list_num”,第一个接收链表记为list[0],最后一个接收链表记为list[list_num-1];将本接收链表组接收到的总RTP包的数量记为list_pkt_num,将链表组预设的最大阈值记为max_proc_pkt。如图3所示,本实施例的一级缓冲预排序处理过程包括:
步骤S301:从两个链表组中选择一个接收链表组进行接收,从该链表组的第二个链表进行接收,将第二个链表(如图2(a)中的链表2)作为当前接收链表;
步骤S302:从网络获取当前RTP数据包;
步骤S304:判断本链表组接收到的总RTP包的数量是否小于预设的阈值,如图3中接收链表组的RTP数据包数量加1,判断list_pkt_num++<=max_proc_pkt是否正确;是则执行步骤S310,否则执行步骤S306;
步骤S306:链表组接收到的总RTP包的数量大于或等于能接收的阈值,因此切换到另一个接收链表组;
步骤S308:在切换的接收链表组中做如下设置:curr_list=1、last_seq=-1、list_pkt_num++,执行步骤S310;
步骤S310:判断当前收到的RTP包序列号“curr_seq”是否正确,是则执行步骤S312,否则当前数据包错误,丢弃该当前数据包,继续执行步骤S302;
步骤S312:判断当前收到的RTP包序列号“curr_seq”是否与上次最后收到的RTP包的序列号“last_seq”相同,即如图3所示,判断curr_seq!=last_seq;是则执行步骤S314,否则为重复接收的数据包,丢弃后继续执行步骤S302;
步骤S314:判断当前收到的RTP包序列号是否大于次最后收到的RTP包的序列号,即如图3所示,判断curr_seq>kast_seq;是则执行步骤S320,否则执行步骤S316;
步骤S316:当前收到的RTP包序列号小于上次最后收到的RTP包的序列号,说明为当前包为滞后到达的乱序包,进一步判断当前接收链表是否为本链表组的最后一个链表,即当前链表的索引“curr_list”是否小于链表组的总链表数量减1,是则执行步骤S318,否则执行步骤S317;
步骤S317:当前接收链表为最后一个接收链表,且当前数据包与前一数据包的序列号不递增,则可以有两种处理方式:
A、从前往后,找到最后一个当前节点最少的链表,即链表中的数据包数量最少,将该链表的所有数据包作为错误包丢弃,将当前包放入该链表,并继续执行步骤S302;
B、将当前包丢弃,继续执行步骤S306,切换到另一个链表组;
步骤S318:当前接收链表不是最后一个接收链表,且当前数据包与前一数据包的序列号不递增,则把本链表组的下一个尚未使用的链表作为当前接收链表,将当前RTP数据包放入该链表中,如图3所示,curr_list++,然后把当前数据包放入list[curr_list]的末尾,继续执行步骤S302;
步骤S320:当前数据包与前一数据包序列号是递增的,将当前包放入当前链表的末尾,并对序列号、数据包总数量进行更新,如last_seq=curr_seq,list_pkt_num++;
步骤S322:判断是否退出,是则结束,否则执行步骤S302,在实际应用时如果用户终端继续接收,则继续执行步骤S302,如果用户终端停止接收或播放RTP等流媒体数据,则结束。
本实施例中,针对目前在流媒体相关业务中,UDP传输的丢包,乱序,重复等问题同流媒体通讯中实时性要求的矛盾,提出一种可以对接收到的RTP包进行快速排序,迅速检查出丢包,乱序,重复等情况,从而简化下一级处理过程,本实施例对接收的RTP数据包进行预排序的过程,利用网络数据包到达间隙进行预排序,使用双链表组切换使用保存到达的数据包,由于使用链表进行数据包的存储,可以减少内存复制操作,不会产生由于乱序包提前到达造成的正常包无法入队现象。
下面对本发明中一级缓冲预处理后进行的二级缓冲排序处理流程进行简要说明,以下以链表作为二级缓冲为例进行说明:
对启动二级缓冲,停止接收数据包的链表组从第一个链表开始对该组的所有链表进行合并以及排序,形成一个链表。考虑到RTP数据包在乱序后可能会滞后到达,因此对合并以及排序后的链表从中间一分为二,前半段为稳定段,后半段为非稳定段。将稳定段直接放入二级缓冲,进行后续处理。非稳定段则进行扫描,如果发现某个数据包的序列号和前面的相邻包的序列号不连续,则将该数据包记为非连续点,从该非连续节点处把再把非稳定链表分为二部分,前一部分(不包括非连续点)与稳定段合并,放入二级缓冲,后一部分(包括非连续点)则放入一级缓冲中另一当前正在接收数据包的链表组的第一个链表中。图2实施例中的相关说明,正在接收的链表组的第一个链表保存二级缓冲排序后剩余的RTP包组成的链表,以进行下一次排序。
本领域技术人员应当了解,采用数组作为二级缓冲的处理过程与采用链表类似,在此不对相同或类似技术方案进行重复说明。
图4为根据本发明RTP数据包接收处理方法中二级缓冲处理过程实施例流程图,如图4所示,本实施例的二级缓冲处理流程包括:
步骤S402:对启动二级缓冲,停止接收数据包的链表组从第一个链表开始对该组的所有链表进行合并排序,得到排序后的一个链表,记为order_list,设其长度为n;
步骤S404:读取该合并排序后的链表的中间节点order_list[n/2],记录该数据包的序列号为last_seq;
步骤S406:判断当前数据包是否到达链表尾,是则执行步骤S414,否则步骤S408;
步骤S408:读取下一节点,得到当前读取RTP数据包的序列号curr_seq;
步骤S410:判断当前数据包的序列号是否为上次读取数据包的序列号加一,判断curr_seq=last_seq+1,即判断前后读取的两个数据包是否连续,是则执行步骤S411,否则步骤S412;
步骤S411:前后读取的两个数据包连续,对序列号进行更新,last_seq=curr_seq,继续执行步骤S406;
步骤S412:前后读取的两个数据包不连续,从当前节点将该链表分为两部分,当前节点为不连续点;
步骤S414:扫描结束,将不连续点前的链表与order_list[n/2]之前的稳定段合并,放入二级缓冲,将不连续点后的链表放入一级缓冲中当前正在接收的链表组的第一个节点,以进行下一次排序。
下面对照图4进行举例说明:假设每个接收链表组或数组组能够容纳的最大RTP数据包的数量为50,需要将序列号为1-60的60个RTP数据包在网络上先后到达客户端,其中序列号为40的数据包在第51个到达,其它的RTP数据包仍然按顺序到达。
按照稳定段和非稳定段的处理方式,序列号为1-25的25个RTP数据包直接作为稳定段放入二级缓冲区中。后续的序列号为26-39和41-51的RTP包属于非稳定段。从序列号26的数据包进行扫描,扫描直到序号为39的RTP包都是连续的,它们将和前面的稳定段,即序列号为1-25的RTP数据包合并,一起放入稳定段,而列序号为41-51的RTP数据包则被放入另一组接收链表或数组的第一个链表。
本实施例中的二级缓冲不仅进行合并以及排序,还进行了分段处理,将合并排序后的链表分为稳定段和非稳定段,可有效解决乱序包后到达的问题,本实施例在一级缓冲的预处理后进行的二次处理,可以平衡一级缓冲和二级缓冲的处理复杂度,简化数据包整体的排序处理过程,可有效提高整体处理效率。
上述二级缓冲处理的实施例中,可以使用合并排序算法来提高二次缓冲的排序效率,可以把排序复杂度降低为O(nlgn),n指待排序的数据的个数。与现有技术中的复杂度为O(n2)相比,可以大大提高排序效率。
上述各方法实施例,在一级缓冲中有效利用了网络数据包到达的时间间隙进行了数据包的预排序,使其能够对网络接收到的RTP数据包进行丢包检测,重复包丢弃和乱序包重排等操作,平衡了一级缓冲和二级缓冲的处理复杂度,简化了整体排序过程,提高了整体处理效率;并且,上述各实施例可以对乱序包和错误包提供较好的处理机制,对网络流量变化较大的情况也有很好的适应能力。在经过二级缓冲的处理后,后续可以直接从二级缓冲获取排序好的RTP数据包链表,用于后续的组帧处理和RTCP包生成过程。本发明上述各实施例中,还可以在一级缓冲及二级缓冲过程中统计乱序包个数、重复包个数、错误包个数,丢失包个数等统计信息,并用于后续的组帧处理和RTCP包生成过程。
综上所述,上述一个或多个实施例具有如下有益效果:
1.平衡一级缓冲和二级缓冲的处理复杂度:有效地利用了网络数据包到达的时间间隙进行了数据包的预排序,简化二级缓冲的计算量。
2.提高接收处理效率及运算复杂度:二级缓冲使用合并排序算法可以提高排序效率,将排序复杂度降低为O(nlgn)。
3.二级缓将合并冲排序链表分为稳定段和非稳定段,有效解决乱序包滞后到达问题,减少由于数据包乱序造成的误判断。
4.使用链表存储,减少内存复制操作,不会由于乱序包提前到达造成正常包无法入队。
5.由于二级缓冲采用了链表的形式,可以动态修改缓冲的大小,因此对网络流量变化较大的情况也有很好的适应能力,不会由于网络突发流量过大而造成丢包。
装置实施例
图5为根据本发明RTP数据包接收处理装置实施例示意图,如图5所示,本实施例包括:接收单元2,用于从网络侧接收RTP数据包;一级缓冲处理单元4,用于对接收的RTP数据包进行一级缓冲预排序处理;二次缓冲处理单元6,用于对一级缓冲预排序处理后的结果进行二级缓冲处理。
对于一级缓冲预排序处理可参见图2-图3方法实施例的相关说明,二级缓冲处理可参见图4方法实施例的相关说明,本装置实施例具体可以是机顶盒、手机等用户设备,对网络侧的RTP数据包进行接收处理。
图6为根据本发明RTP数据包接收处理装置另一实施例示意图,如图6所示,本实施例对图5实施例进一步细化,如图6所示,一级缓冲处理单元可以包括:
存储模块42,用于存储至少两个队列组及预设的阈值,其中,每个队列组存储一级缓冲预排序处理及二级缓冲处理后的RTP数据包,预设的阈值为每个队列组能存储的最大RTP数据包的总数目,队列组包括链表组和/或数组组,具体可参见图2(a)或图2(b);
分析模块44,用于将当前接收的RTP数据包的序列号与上次最后接收的RTP包的序列号进行比较,将存储模块42中存储的RTP数据包总数目与预设的阀值进行比较;
处理模块43,用于接收分析模块44的比较结果,对当前接收的RTP数据包进行一级缓冲预排序并存入存储模块42当前正在接收RTP数据包的队列组中,预排序过程可参见图3实施例的处理过程;当队列组的所有队列组已用完,或者RTP数据包总数目大于预设的阀值时,触发二次缓冲处理单元,并将当前接收到的数据包放入存储模块42的另一个队列组中。
如图6所示,二次缓冲处理单元可以包括:合并排序模块62,用于接收一级缓冲处理单元处理模块43的触发消息,如,存储模块42中其中一个链表组启动二级缓冲触发合并排序模块62,将存储模块42中启动二级缓冲的队列组进行合并排序,具体参见图4实施例的相关说明;处理模块64,用于将合并排序后的队列分为稳定段和非稳定段,将非稳定段中RTP数据包序列号的第一个非连续点之前的RTP数据包与稳定段合并,放入二级缓冲区;将非稳定段的剩余RTP数据包放入存储模块42中当前正在接收数据的队列组中。
上述方法发明的图1-图4实施例可以在具备图5-图6结构图所示结构的装置中实现。本发明的RTP数据包接收处理装置可以为网络机顶盒,手机等用于流媒体点播/直播类的客户端。
综上所述,上述一个或多个方法或装置实施例与现有技术相比。
具有如下优点:
1.平衡一级缓冲和二级缓冲的处理复杂度。
2.提高接收处理效率及运算复杂度:二级缓冲使用合并排序算法可以提高排序效率,将排序复杂度降低为O(nlgn)。
3.二级缓将合并冲排序链表分为稳定段和非稳定段,有效解决乱序包滞后到达问题,减少由于数据包乱序造成的误判断。
4.使用链表存储,减少内存复制操作,不会由于乱序包提前到达造成正常包无法入队。
5.对网络流量变化较大的情况也有很好的适应能力,不会由于网络突发流量过大而造成丢包。
本发明上述各方法和装置实施例针对网络质量较差,终端处理能力较低的情况,具有实际应用的市场前景,且具有很强的鲁棒性和较低的处理复杂度。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种RTP数据包接收处理方法,其特征在于,包括:
从网络接收RTP数据包;
对接收的所述RTP数据包进行一级缓冲预排序处理;
将预排序处理后的RTP数据包进行二级缓冲处理。
2.根据权利要求1所述的方法,其特征在于,采用队列组作为一级缓冲和/或二级缓冲,对接收的所述RTP数据包进行一级缓冲预排序处理和二级缓冲处理,其中,所述队列组包括链表组和/或数组组。
3.根据权利要求2所述的方法,其特征在于,所述队列组至少为两个,所述对接收的所述RTP数据包进行一级缓冲预排序处理的操作包括:
对接收的所述RTP数据包进行一级缓冲预排序,将所述RTP数据包保存至当前正接收数据包的队列组的队列中,所述队列包括链表、或者数组;
当所述队列组的所有队列已用完,或者所述队列组保存的RTP数据包总数目大于预设的阀值时,所述队列组停止接收数据包,启动另一个队列组,将当前接收到的数据包放入所述另一个队列组中;
其中,所述停止接收数据包的队列组执行所述二级缓冲处理的操作。
4.根据权利要求2或3所述的方法,其特征在于,所述对接收的所述RTP数据包进行一级缓冲预排序处理包括:
若当前接收的RTP包序列号等于上次最后接收的RTP包的序列号,则丢弃;
若当前接收的RTP包序列号大于上次最后接收的RTP包的序列号,则添加到当前队列组的当前队列的末尾;
若当前接收的RTP包序列号小于上次最后接收的RTP包的序列号,则将当前接收的RTP数据包放入当前队列的下一个队列。
5.根据权利要求2或3所述的方法,其特征在于,所述将预排序处理后的RTP数据包进行二级缓冲处理的操作包括:
将启动二级缓冲的队列组中的所有队列进行合并以及排序;
将所述合并以及排序后的队列分为稳定段和非稳定段,将所述稳定段直接放入二级缓冲。
6.根据权利要求5所述的方法,其特征在于,所述将预排序处理后的RTP数据包进行二级缓冲处理的操作还包括:
按顺序读取所述非稳定段中RTP数据包的序列号,获得所述非稳定段中RTP数据包序列号的第一个非连续点;
将所述非稳定段中所述第一个非连续点之前的RTP数据包与所述稳定段合并,放入所述二级缓冲;
将所述非稳定段的剩余RTP数据包放入当前正在接收数据的一级缓冲中。
7.根据权利要求6所述的方法,其特征在于,将所述非稳定段的剩余RTP数据包放入所述当前正在接收数据的一级缓冲中具体包括:
将所述剩余RTP数据包放入一级缓冲中当前正在接收数据包的队列组的第一个队列;
其中,所述一级缓冲的每个队列组的第一个队列用于二级缓冲排序后的剩余RTP数据包组成的队列使用。
8.一种RTP数据包接收处理装置,其特征在于,包括:
接收单元,用于从网络侧接收RTP数据包;
一级缓冲处理单元,用于对接收的所述RTP数据包进行一级缓冲预排序处理;
二次缓冲处理单元,用于对一级缓冲预排序处理后的结果进行二级缓冲处理。
9.根据权利要求8所述的装置,其特征在于,所述一级缓冲处理单元包括:
存储模块,用于存储至少两个队列组及预设的阈值,其中,每个所述队列组存储一级缓冲预排序处理及二级缓冲处理后的RTP数据包,所述阈值为每个所述队列组能存储的最大RTP数据包的总数目,所述队列组包括链表组和/或数组组;
分析模块,用于将当前接收的RTP数据包的序列号与上次最后接收的RTP包的序列号进行比较,所述存储模块中存储的RTP数据包总数目与所述阀值进行比较;
处理模块,用于接收所述分析模块的比较结果,对当前接收的RTP数据包进行一级缓冲预排序并存入所述存储模块的队列组中;当所述队列组的所有队列已用完,或者RTP数据包总数目大于预设的阀值时,触发所述二次缓冲处理单元,并将当前接收到的数据包放入所述存储模块的另一个队列组中。
10.根据权利要求9所述的装置,其特征在于,所述二次缓冲处理单元包括:
合并排序模块,用于接收所述一级缓冲处理单元的触发消息,将所述存储模块中启动二级缓冲的队列组进行合并排序;
处理模块,用于将合并排序后的队列分为稳定段和非稳定段,将所述非稳定段中RTP数据包序列号的第一个非连续点之前的RTP数据包与所述稳定段合并,放入二级缓冲;将所述非稳定段的剩余RTP数据包放入所述存储模块中当前正在接收数据的队列组中。
11.根据权利要求8-10中任一项所述的装置,其特征在于,所述RTP数据包接收处理装置设置于用于流媒体点播/直播类的客户端设备中,所述客户端设备包括网络机顶盒、手机终端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102411101A CN101771599B (zh) | 2008-12-26 | 2008-12-26 | 一种rtp数据包接收处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102411101A CN101771599B (zh) | 2008-12-26 | 2008-12-26 | 一种rtp数据包接收处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101771599A true CN101771599A (zh) | 2010-07-07 |
CN101771599B CN101771599B (zh) | 2012-07-04 |
Family
ID=42504213
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102411101A Active CN101771599B (zh) | 2008-12-26 | 2008-12-26 | 一种rtp数据包接收处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101771599B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103024596A (zh) * | 2012-12-25 | 2013-04-03 | 四川九洲电器集团有限责任公司 | 一种iptv机顶盒基于rtsp协议网络媒体流窜播放方法 |
CN103744801A (zh) * | 2014-01-24 | 2014-04-23 | 深圳市华宝电子科技有限公司 | 一种实时数据缓存方法及装置 |
CN106101737A (zh) * | 2016-06-15 | 2016-11-09 | 南京云恩通讯科技有限公司 | 一种支持实时视频缓存多路读取的帧调整方法 |
CN107222793A (zh) * | 2017-05-05 | 2017-09-29 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN107395639A (zh) * | 2017-08-29 | 2017-11-24 | 天津艾科仪科技有限公司 | 智能获取网络中视频数据的方法与系统 |
CN108123990A (zh) * | 2016-11-30 | 2018-06-05 | 华为技术有限公司 | 一种数据存储方法、数据存储系统及数据处理设备 |
CN108200481A (zh) * | 2017-12-07 | 2018-06-22 | 北京佳讯飞鸿电气股份有限公司 | 一种rtp-ps流处理方法、装置、设备及存储介质 |
CN108616722A (zh) * | 2018-04-18 | 2018-10-02 | 中南大学 | 一种嵌入式高清视频采集与数据流传输系统 |
CN108683555A (zh) * | 2018-04-17 | 2018-10-19 | 上海电力学院 | 一种rtp丢包检测方法 |
CN109246063A (zh) * | 2017-07-11 | 2019-01-18 | 大唐移动通信设备有限公司 | 一种lsb回绕优化方法及装置 |
CN109547359A (zh) * | 2018-11-30 | 2019-03-29 | 高新兴科技集团股份有限公司 | Rtp数据包乱序重排方法、装置、存储介质及电子设备 |
CN109587096A (zh) * | 2017-09-28 | 2019-04-05 | 中国移动通信集团浙江有限公司 | 一种识别rtp尾部丢包的方法及装置 |
CN110198321A (zh) * | 2019-06-13 | 2019-09-03 | 北京奇艺世纪科技有限公司 | 一种数据包处理方法、装置、服务器及存储介质 |
CN110519180A (zh) * | 2019-07-17 | 2019-11-29 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 网卡虚拟化队列调度方法及系统 |
CN111246290A (zh) * | 2018-11-29 | 2020-06-05 | 中国电信股份有限公司 | 图像接收处理方法和装置 |
CN112953953A (zh) * | 2021-03-02 | 2021-06-11 | 招商银行股份有限公司 | 通讯协议设计方法、终端及计算机存储介质 |
CN113810471A (zh) * | 2021-08-18 | 2021-12-17 | 深圳市元征科技股份有限公司 | 一种数据传输方法、发送设备及接收设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1270533C (zh) * | 2002-12-23 | 2006-08-16 | 中兴通讯股份有限公司 | 会议电视多点控制设备中数据处理的方法 |
CN100550821C (zh) * | 2003-03-13 | 2009-10-14 | 华为技术有限公司 | 用于消除ip语音数据抖动的自适应抖动缓存实现方法 |
CN101330472B (zh) * | 2008-07-28 | 2013-01-16 | 中兴通讯股份有限公司 | 流媒体数据的缓存处理方法 |
-
2008
- 2008-12-26 CN CN2008102411101A patent/CN101771599B/zh active Active
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103024596A (zh) * | 2012-12-25 | 2013-04-03 | 四川九洲电器集团有限责任公司 | 一种iptv机顶盒基于rtsp协议网络媒体流窜播放方法 |
CN103744801A (zh) * | 2014-01-24 | 2014-04-23 | 深圳市华宝电子科技有限公司 | 一种实时数据缓存方法及装置 |
CN106101737B (zh) * | 2016-06-15 | 2019-05-07 | 南京云恩通讯科技有限公司 | 一种支持实时视频缓存多路读取的帧调整方法 |
CN106101737A (zh) * | 2016-06-15 | 2016-11-09 | 南京云恩通讯科技有限公司 | 一种支持实时视频缓存多路读取的帧调整方法 |
CN108123990A (zh) * | 2016-11-30 | 2018-06-05 | 华为技术有限公司 | 一种数据存储方法、数据存储系统及数据处理设备 |
CN108123990B (zh) * | 2016-11-30 | 2020-06-16 | 华为技术有限公司 | 一种数据存储方法、数据存储系统及数据处理设备 |
CN107222793A (zh) * | 2017-05-05 | 2017-09-29 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN107222793B (zh) * | 2017-05-05 | 2019-11-19 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN109246063B (zh) * | 2017-07-11 | 2020-07-31 | 大唐移动通信设备有限公司 | 一种lsb回绕优化方法及装置 |
CN109246063A (zh) * | 2017-07-11 | 2019-01-18 | 大唐移动通信设备有限公司 | 一种lsb回绕优化方法及装置 |
CN107395639A (zh) * | 2017-08-29 | 2017-11-24 | 天津艾科仪科技有限公司 | 智能获取网络中视频数据的方法与系统 |
CN109587096B (zh) * | 2017-09-28 | 2021-09-14 | 中国移动通信集团浙江有限公司 | 一种识别rtp尾部丢包的方法及装置 |
CN109587096A (zh) * | 2017-09-28 | 2019-04-05 | 中国移动通信集团浙江有限公司 | 一种识别rtp尾部丢包的方法及装置 |
CN108200481A (zh) * | 2017-12-07 | 2018-06-22 | 北京佳讯飞鸿电气股份有限公司 | 一种rtp-ps流处理方法、装置、设备及存储介质 |
CN108200481B (zh) * | 2017-12-07 | 2020-12-15 | 北京佳讯飞鸿电气股份有限公司 | 一种rtp-ps流处理方法、装置、设备及存储介质 |
CN108683555A (zh) * | 2018-04-17 | 2018-10-19 | 上海电力学院 | 一种rtp丢包检测方法 |
CN108616722A (zh) * | 2018-04-18 | 2018-10-02 | 中南大学 | 一种嵌入式高清视频采集与数据流传输系统 |
CN108616722B (zh) * | 2018-04-18 | 2021-02-26 | 中南大学 | 一种嵌入式高清视频采集与数据流传输系统 |
CN111246290B (zh) * | 2018-11-29 | 2022-07-05 | 中国电信股份有限公司 | 图像接收处理方法和装置 |
CN111246290A (zh) * | 2018-11-29 | 2020-06-05 | 中国电信股份有限公司 | 图像接收处理方法和装置 |
CN109547359A (zh) * | 2018-11-30 | 2019-03-29 | 高新兴科技集团股份有限公司 | Rtp数据包乱序重排方法、装置、存储介质及电子设备 |
CN110198321A (zh) * | 2019-06-13 | 2019-09-03 | 北京奇艺世纪科技有限公司 | 一种数据包处理方法、装置、服务器及存储介质 |
CN110519180A (zh) * | 2019-07-17 | 2019-11-29 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 网卡虚拟化队列调度方法及系统 |
CN112953953A (zh) * | 2021-03-02 | 2021-06-11 | 招商银行股份有限公司 | 通讯协议设计方法、终端及计算机存储介质 |
CN113810471A (zh) * | 2021-08-18 | 2021-12-17 | 深圳市元征科技股份有限公司 | 一种数据传输方法、发送设备及接收设备 |
CN113810471B (zh) * | 2021-08-18 | 2024-05-14 | 深圳市元征科技股份有限公司 | 一种数据传输方法、发送设备及接收设备 |
Also Published As
Publication number | Publication date |
---|---|
CN101771599B (zh) | 2012-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101771599B (zh) | 一种rtp数据包接收处理方法及装置 | |
CN100539744C (zh) | 广播通信系统中用于越区切换的方法和系统 | |
CN1842052A (zh) | 无线链路控制层的数据传输方法 | |
KR101223806B1 (ko) | 신속 미디어 채널 변경 메커니즘 및 이를 포함하는 액세스네트워크 노드 | |
CN101674486A (zh) | 一种流媒体音视频同步方法及系统 | |
CN102891809B (zh) | 多核网络设备报文按接口保序方法及系统 | |
CN105635000B (zh) | 一种报文存储转发方法和电路及设备 | |
CN101175104B (zh) | 一种抖动缓存装置和抖动缓存管理方法 | |
CN101488841B (zh) | 一种无线链路协议帧重传方法 | |
CN103124412A (zh) | 一种基于rtp协议的网络抖动处理技术 | |
US20020150078A1 (en) | Data transmitter, data receiver, and data transmitting/receiving method | |
CN102821045B (zh) | 多播报文复制方法及装置 | |
CN102355604B (zh) | 媒体报文传输方法及装置 | |
CN101150354B (zh) | 消息调度方法和消息调度装置 | |
US6314087B1 (en) | Method for determining traffic priority order on network | |
CN102742226B (zh) | 对在无线通信系统上接收的数据的增强重定序 | |
CN105763375A (zh) | 一种数据包发送方法、接收方法及微波站 | |
EP1407587A1 (en) | Dispersity coding for inverse multiplexing | |
US8351466B2 (en) | Optimizing video transmission over mobile infrastructure | |
CN104243412B (zh) | 网络数据处理终端及在其中处理网络数据的方法 | |
CN115086253B (zh) | 以太网交换芯片和高带宽报文转发方法 | |
CN101227306A (zh) | 用于多播处理的报文复制方法和装置 | |
CN108632148B (zh) | 基于预读取方式的学习mac地址的装置及方法 | |
WO2022121049A1 (zh) | 光纤坐席系统的音频环形传输方法、系统及存储介质 | |
CN111131089B (zh) | 改善多播业务hol阻塞的队列管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |