CN101330472A - 流媒体数据的缓存处理方法 - Google Patents
流媒体数据的缓存处理方法 Download PDFInfo
- Publication number
- CN101330472A CN101330472A CNA2008101447515A CN200810144751A CN101330472A CN 101330472 A CN101330472 A CN 101330472A CN A2008101447515 A CNA2008101447515 A CN A2008101447515A CN 200810144751 A CN200810144751 A CN 200810144751A CN 101330472 A CN101330472 A CN 101330472A
- Authority
- CN
- China
- Prior art keywords
- packet
- data
- data queue
- supplementary buffer
- sequence number
- 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
本发明提供了一种流媒体数据的缓存处理方法,包括以下步骤:顺序地接收流媒体业务的多个数据包;将数据包按照其在流媒体业务中的顺序有序地缓存于缓冲区的数据队列中;先进先出地从数据队列中读取数据包,以用于流媒体业务的消费。本发明因为对缓存数据包采取了排序,所以克服了缓存数据包不排序导致的多媒体业务错帧和乱帧的问题,能够实现流畅的多媒体业务,给客户带来更好的体验。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种流媒体数据的缓存处理方法。
背景技术
随着通信技术的发展,能够向终端设备提供的通信带宽越来越大,多媒体在移动终端上得到了飞速的发展,手机电视、流媒体等业务逐渐在成熟起来,导致传送的数据包必然是大量的。而如何对这些数据包进行缓存,并使得能够方便的获取这些数据,就变得非常重要。
图1示出了实现流媒体业务的系统示意图。在该业务系统中,包含有流媒体业务管理平台,该平台主要用来管理现有的流媒体服务器资源,如用户权限、资费、信息发布等功能;数据存储系统可以包含该业务相关的各种信息的存储;流媒体服务器是用户通过终端访问网页的流媒体资源的实际设备,通过该服务器向用户终端发送流媒体音视频数据以及相关的消息,如RTP(Real Time Protocol,实时协议)数据包、RTCP(Real Time Control Protocol,实时控制协议)数据包等。在现有的流媒体业务系统中,运营商管理者通过业务管理平台生成网页链接和实际的媒体的关联关系,用户通过终端登录运营商的流媒体业务网页,可以点击期望的链接,终端上启动流媒体播放器,播放器主动发起请求,得到音视频数据后进行解码并显示。
图2示出了流媒体业务的RTP包结构。包含RTP包头和数据体payload。RTP包头中包含了序列号sequence number,这是数据包有序的依据。图3示出了流媒体业务系统的缓冲区数据生产消费示意图。将从网络上获取的流媒体数据包送入缓冲区进行缓存,然后再将数据包送入如解码器之类的器件进行相关处理。从网络(有线或者无线)上获取的流媒体数据包虽然基本上是有序的,但是由于网络的复杂性,从流媒体服务器上获取的数据包并不一定能够保证在终端设备接收端一定是有序的。
在接收端消费这些缓存的数据包时,由于不加以排序,导致实现的多媒体业务产生错帧和乱帧的现象,给客户不好的体验。
发明内容
本发明旨在提供一种流媒体数据的缓存处理方法,以解决缓存数据包不排序导致的多媒体业务错帧和乱帧的问题。
根据本发明的一个方面,提供了一种流媒体数据的缓存处理方法,包括以下步骤:顺序地接收流媒体业务的多个数据包;将数据包按照其在流媒体业务中的顺序有序地缓存于缓冲区的数据队列中;先进先出地从数据队列中读取数据包,以用于流媒体业务的消费。
优选的,将数据包按照其在流媒体业务中的顺序有序地缓存于缓冲区中具体包括:设置缓冲区包括主缓冲区和辅助缓冲区;判断当前接收的数据包是否为晚到的数据包;如果是晚到的,则将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中;如果不是晚到的,则将当前接收的数据包增加到主缓冲区中的数据队列的队尾。
优选的,数据包包括指示其在流媒体业务中的顺序的序列号;判断当前接收的数据包是否为晚到的数据包具体包括:判断当前接收的数据包的序列号是否小于主缓冲区的最后一个数据包的序列号;如果小于,则判定当前接收的数据包是晚到的数据包;否则判定当前接收的数据包不是晚到的数据包。
优选的,将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:判断当前接收的数据包的序列号是否大于辅助缓冲区的最后一个数据包的序列号;如果大于,则将当前接收的数据包增加到辅助缓冲区的数据队列的队尾;否则,将当前接收的数据包插入到辅助缓冲区的数据队列中其序列号大于当前接收的数据包的序列号的数据包之前。
优选的,先进先出地从数据队列中读取数据包具体包括:比较主缓冲区的数据队列队首的数据包的序列号与辅助缓冲区的数据队列队首的数据包的序列号的大小;读取其中序列号较小的数据包作为当前的数据包输出。
优选的,将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:将主缓冲区的数据队列的数据包以序列号的升序方式连续地存储于主缓冲区的空间上;或者采用链表的方式实现主缓冲区的数据队列,其中将主缓冲区的数据队列的数据包以序列号的升序方式进行链接。
优选的,将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:将辅助缓冲区的数据队列的数据包以序列号的升序方式连续地存储于辅助缓冲区的空间上;或者将辅助缓冲区的数据队列的数据包存储于空间上,建立映射数据包的索引表,以数据包的序列号的升序方式排列索引表的索引;或者采用链表的方式实现辅助缓冲区的数据队列,其中将辅助缓冲区的数据队列的数据包以序列号的升序方式进行链接。
优选的,链表采用单向链表或者双向链表。
优选的,流媒体业务包括视频业务,设置主缓冲区和辅助缓冲区具体包括:设置主缓冲区中包括视频主缓冲区,设置辅助缓冲区中包括视频辅助缓冲区;将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:将当前接收的数据包有序地缓存于视频辅助缓冲区的数据队列中;将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:将当前接收的数据包增加到视频主缓冲区中的数据队列的队尾。
优选的,流媒体业务包括音频业务,设置主缓冲区和辅助缓冲区具体包括:设置主缓冲区中包括音频主缓冲区,设置辅助缓冲区中包括音频辅助缓冲区;将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:将当前接收的数据包有序地缓存于音频辅助缓冲区的数据队列中;将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:将当前接收的数据包增加到音频主缓冲区中的数据队列的队尾。
上述的缓存处理方法因为对缓存数据包采取了排序,所以克服了缓存数据包不排序导致的多媒体业务错帧和乱帧的问题,能够实现流畅的多媒体业务,给客户带来更好的体验。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了实现流媒体业务的系统示意图;
图2示出了流媒体业务的RTP包结构;
图3示出了流媒体业务系统的缓冲区数据生产消费示意图;
图4示出了根据本发明实施例的流媒体数据的缓存处理方法的流程图;
图5示出了根据本发明实施例的流媒体数据缓冲区结构图;
图6示出了根据本发明实施例的流媒体数据包缓存结构图一;
图7示出了根据本发明实施例的流媒体数据包缓存结构图二;
图8示出了根据本发明实施例的流媒体数据包缓存结构图三;
图9示出了根据本发明实施例的流媒体数据包缓存结构图四;
图10示出了根据本发明实施例的流媒体数据包缓存结构图五;
图11示出了根据本发明实施例的流媒体数据包缓存结构图六。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
图4示出了根据本发明实施例的流媒体数据的缓存处理方法的流程图,包括以下步骤:
步骤S10,顺序地接收流媒体业务的多个数据包;
步骤S20,将数据包按照其在流媒体业务中的顺序有序地缓存于缓冲区的数据队列中;
步骤S30,先进先出地从数据队列中读取数据包,以用于流媒体业务的消费。
该缓存处理方法将从流媒体服务器上获取的音视频数据包按照一种基本有序的顺序缓存在缓冲区中(例如,在这里流媒体数据包为RTP包),此缓冲区可以循环利用,来存放流媒体数据。这样在获取数据包的时候,数据包的存放是有序的,可以按照先进先出的顺序从缓冲区中获取就能保准数据包在时间上顺序。因为对缓存数据包采取了排序,所以克服了缓存数据包不排序导致的多媒体业务错帧和乱帧的问题,能够实现流畅的多媒体业务,给客户带来更好的体验。
优选的,步骤S20具体包括:设置缓冲区包括主缓冲区和辅助缓冲区;判断当前接收的数据包是否为晚到的数据包;如果是晚到的,则将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中;如果不是晚到的,则将当前接收的数据包增加到主缓冲区中的数据队列的队尾。
在接收端为了有序地缓存流媒体的数据包,需要在接收端对这些数据包进行全部排序。然而,数据包的数量是大量的,排序所消耗的资源必然是大的,而对于手持设备终端比如手机这样的电子产品,由于它的资源比较紧张,所以如果采用不当的排序方法,将导致这种排序耗时较多,甚至无法进行。从网络上获取的流媒体数据包虽然不能保证所有的流媒体数据包都是有序的,但是大部分的流媒体数据包还是有序的,晚到的数据包在大多数情况下占的比重不会特别大。因此,该优选实施例中的排序方法设置缓冲区包括主缓冲区和辅助缓冲区,采用辅助缓冲区来处理乱序的数据包,所以效率较高,能够很好地解决上述的排序问题。
图5示出了根据本发明实施例的流媒体数据缓冲区结构图;流媒体的音视频分别有属于自己的主缓冲区和辅助缓冲区,主缓冲区用来存储有序的数据,辅助缓冲区用来存储晚到的数据包。并在乱序的情况下,对缓冲区中的数据包进行排序。
在上述的优选实施例中,将从网络上获取的流媒体音视频RTP数据包分别进行缓存,音视频数据的缓冲区分别有主缓冲区和辅助缓冲区组成,两者是相对来说的。将那些从网络上传递过来的有序流媒体RTP数据包缓存在主缓冲区中,那些晚到的流媒体数据包缓存在辅助缓冲区中,在需要的情况下,对辅助缓冲区中的数据包进行排序,将其变为有序缓存。这样无论是主缓冲区还是辅助缓冲区的数据包,均是有序存储。在消费这些流媒体数据包的时候,只需要从缓冲区或者辅助缓冲区中获取最早的流媒体数据包即可,并释放相应的缓冲区空间,实现缓冲区的循环使用。主缓冲区和辅助缓冲区组成一个基本有序的数据缓冲管理机制。
优选的,数据包(例如,在这里流媒体数据包为RTP包)包括指示其在流媒体业务中的顺序的序列号(Sequence Number);判断当前接收的数据包是否为晚到的数据包具体包括:判断当前接收的数据包的序列号是否小于主缓冲区的最后一个数据包的序列号;如果小于,则判定当前接收的数据包是晚到的数据包;否则判定当前接收的数据包不是晚到的数据包。该优选实施例利用序列号来判断接收的数据包是否为错序数据包,简单易行。
优选的,将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:判断当前接收的数据包的序列号是否大于辅助缓冲区的最后一个数据包的序列号;如果大于,则将当前接收的数据包增加到辅助缓冲区的数据队列的队尾;否则,将当前接收的数据包插入到辅助缓冲区的数据队列中其序列号大于当前接收的数据包的序列号的数据包之前。这里采用了队列数据结构中的插入操作,很简单地实现了数据包的排序。
优选的,先进先出地从数据队列中读取数据包具体包括:比较主缓冲区的数据队列队首的数据包的序列号与辅助缓冲区的数据队列队首的数据包的序列号的大小;读取其中序列号较小的数据包作为当前的数据包输出。该读取操作简单易行。
优选的,将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:主缓冲区的空间是连续的,将主缓冲区的数据队列的数据包以序列号的升序方式连续地存储于主缓冲区的空间上;或者采用链表的方式实现主缓冲区的数据队列,其中将主缓冲区的数据队列的数据包以序列号的升序方式进行链接。
优选的,将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:辅助缓冲区的空间是连续的,将辅助缓冲区的数据队列的数据包以序列号的升序方式连续地存储于辅助缓冲区的空间上;或者辅助缓冲区的空间是连续的,将辅助缓冲区的数据队列的数据包存储于空间上,建立映射数据包的索引表,以数据包的序列号的升序方式排列索引表的索引;或者采用链表的方式实现辅助缓冲区的数据队列,其中将辅助缓冲区的数据队列的数据包以序列号的升序方式进行链接。
优选的,链表采用单向链表或者双向链表。
优选的,流媒体业务包括视频业务,设置缓冲区包括主缓冲区和辅助缓冲区具体包括:设置主缓冲区包括视频主缓冲区,设置辅助缓冲区包括视频辅助缓冲区;将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:将当前接收的数据包有序地缓存于视频辅助缓冲区的数据队列中;
将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:将当前接收的数据包增加到视频主缓冲区中的数据队列的队尾。
优选的,流媒体业务包括音频业务,设置缓冲区包括主缓冲区和辅助缓冲区具体包括:设置主缓冲区包括音频主缓冲区,设置辅助缓冲区包括音频辅助缓冲区;将当前接收的数据包有序地缓存于辅助缓冲区的数据队列中具体包括:将当前接收的数据包有序地缓存于音频辅助缓冲区的数据队列中;
将当前接收的数据包增加到主缓冲区中的数据队列的队尾具体包括:将当前接收的数据包增加到音频主缓冲区中的数据队列的队尾。
第一种实施方式,采用主缓冲区和辅助缓冲区的内存空间均分别为连续存储空间连续。图6示出了根据本发明实施例的流媒体数据包缓存结构图一,主缓冲区和辅助缓冲区的内存存储的空间均是连续的,存储的数据包根据sequence number的升序方式进行存储。图6中,Rtp Packet size的内存空间为32位,C为下一个数据节点属是否是连续存放的,占用1位,0表示不连续,1表示连续。
下面进一步进行详细的阐述:
第一步:该业务系统具有业务管理平台、数据存储系统(设备)、流媒体服务器,通信传输系统,终端接收设备;业务管理平台用来管理流媒体业务的各种信息和状态;数据存储系统用来保存管理的信息、通信传输系统用来将相关服务器和终端的信息在两者之间传递,以便形成相互之间的联系;终端接收设备是用户用来发送、接收、显示的设备,用来接收通过网络传输过来的流媒体RTP数据包。
第二步:终端设备根据流媒体片源的信息,如当前的流媒体片源是否同时包含音视频数据。(以下以同时包含音视频数据为实施方法,仅仅包含音频数据或者视频数据的实施方法类似)。如果同时包含音视频数据,则分别为音视频数据创建主缓冲区和辅助缓冲区,主缓冲区和辅助缓冲区的内存空间均分别为连续的内存空间。在这一步骤中分配连续缓冲区可以以一定大小的RTP包大小的单位进行分配一定数量的内存空间,也可以以其他的方式进行分配处理,分配的内存空间应当够使用。
第三步:配置音视频缓冲区的状态信息。比如:音频主缓冲区的大小audio_pri_buf_size,音频主缓冲区的起始位置audio_pri_buf,音频主缓冲区的有效数据的大小audio_pri_data_size,音频的主缓冲区的数据索引位置audio_pri_data_index,音频的空闲主缓冲区的索引位置audio_pri_free_index,音频主缓冲区最后一个数据包的序列号audio_pri_last_seq(在音频主缓冲区中最大的一个序列号);音频的辅助缓冲区的大小audio_sec_buf_size,音频辅助缓冲区的起始位置audio_sec_buf,音频辅助的有效数据的大小audio_sec_data_size,音频的辅助缓冲区的数据索引位置audio_sec_data_index,音频的空闲辅助缓冲区的索引位置audio_sec_free_index,音频辅助缓冲区最后一个数据包的序列号audio_sec_last_seq(在音频辅助缓冲区中最大的一个序列号)。视频的主缓冲区的大小video_pri_buf_size,视频主缓冲区的起始位置video_pri_buf,视频的主缓冲区的数据索引位置video_pri_data_index,视频的空闲主缓冲区的索引位置video_pri_free_index,视频主缓冲区的有效数据的大小video_pri_data_size,视频主缓冲区最后一个数据包的序列号video_pri_last_seq(在视频主缓冲区中最大的一个序列号);视频的辅助缓冲区的大小video_sec_buf_size,视频辅助缓冲区的起始位置video_sec_buf,视频辅助缓冲区的有效数据的大小video_sec_data_size,视频的辅助缓冲区的数据索引位置video_sec_data_index,视频的空闲辅助缓冲区的索引位置video_sec_free_index,视频辅助缓冲区最后一个数据包的序列号video_sec_last_seq(在视频辅助缓冲区中最大的一个序列号);被处理过最近的一个音频数据包的序列号audio_processed_seq,以及被处理过最近的一个视频数据包的序列号video_processed_seq。(其中数据索引位置指的是在缓冲区中下一个有效数据包的位置,空闲缓冲区索引位置指的是缓冲区中可以存放数据的起始位置,以下步骤中沿用这些说法和名称)。
第四步:将从网路中获取的RTP包缓存到缓冲区中,下面以存储音频数据包为准来进行阐述,视频数据包的缓存和处理机制类似。在这一步骤中,对流媒体数据包节点进行缓存的时候可以以同样大小的内存单位进行缓存,也可以以实际大小进行缓存处理,处理过程基本类似。下面以实际大小的方式进行缓存处理。
1)如果当前的数据包为音频数据,且为第一个从网络中获取的音频数据包,则直接将其存储于音频主缓冲区中,在主缓冲区的此节点数据包中,首先是32位的整型数据(用来存放RTP数据包的大小),接着存储RTP包(包含RTP头和payload),然后是1位表示下一个数据包节点是否连续存储的标识位,缺省为1,如果下一个数据包没有紧接此节点进行存放则为0,通常发生在快接近缓冲区尾部的时候;同时更新以下数据。
音频的主缓冲区的数据索引位置audio_pri_data_index=音频主缓冲区的起始位置audio_pri_buf;
音频的空闲主缓冲区的索引位置audio_pri_free_index=(32+RTP包的大小+1)mod音频主缓冲区的大小audio_pri_buf_size;
音频主缓冲区最后一个数据包的序列号audio_pri_last_seq=此音频数据包的序列号;
音频主缓冲区有效数据的大小=32+RTP包的大小+1。
2)如果当前的数据为音频数据,且不为第一个获取的音频数据。则有以下两种情况。
2.1)如果当前音频数据包的序列号大于音频主缓冲区中最后一个数据包的序列号,则将其缓存到主缓冲区,步骤如下:
首先检查条件音频主缓冲区的空闲空间的大小(audio_pri_buf_size-音频的空闲主缓冲区的索引位置audio_pri_free_index)是否满足一个32位整型、当前数据包大小所需要的内存空间和1位标识位所需要的内存空间。
2.1.1)如果满足,则将此音频数据包缓存到最后一个音频数据包之后的主缓冲区空间中,同时更新以下数据:
音频的空闲主缓冲区的索引位置audio_pri_free_index=(32+RTP包的大小+1+存储此数据包之前音频空闲主缓冲区的索引位置audio_pri_free_index)mod音频主缓冲区的大小audio_pri_buf_size;
音频主缓冲区最后一个数据包的序列号audio_pri_last_seq=此音频数据包的序列号。
音频主缓冲区有效数据的大小audio_pri_data_size=32+RTP包的大小+1+缓存此数据包之前的音频主缓冲区有效数据的大小audio_pri_data_size。
2.1.2)如果不满足,则将此音频数据包从主缓冲区起始位置开始进行存储。(对于主缓冲区是循环利用)同时更新以下数据:
此节点的上一个数据节点的最后一个标识位由缺省的1变为0;
音频的空闲主缓冲区的索引位置audio_pri_free_index=(32+RTP包的大小+1)mod音频主缓冲区的大小audio_pri_buf_size;
音频主缓冲区最后一个数据包的序列号audio_pri_last_seq=此音频数据包的序列号;
音频主缓冲区有效数据的大小audio_pri_data_size=32+RTP包的大小+1+缓存此数据包之前的音频主缓冲区有效数据的大小audio_pri_data_size。
2.2)如果当前音频数据包的序列号小于音频主缓冲区中最后一个数据包的序列号,则有以下步骤如下:
首先需要判断条件,即当前的音频数据包是否过时,也就是说对于要处理的数据来说,此音频数据包是否已经没有必要进行缓存了,是否可以直接丢弃。这个条件可以通过此音频数据包的序列号是否大于被处理过的最近的一个音频数据包的序列号audio_processed_seq来判断,如果小于,则表明此数据包已经过时,可以直接丢弃。如果大于则需要将此音频数据包缓存到音频辅助缓冲区中。具体如下:
2.2.1)如果是第一个需要缓存到音频辅助缓冲区的数据包,则直接将其存储于音频辅助缓冲区中,在辅助缓冲区的此节点数据包中,首先是32位的整型数据,RTP包数据(RTP的头和RTP的payload),以及1位标识位,然后缓存此RTP包的数据;同时更新以下数据:
音频的辅助缓冲区的数据索引位置audio_sec_data_index=音频辅助缓冲区的起始位置audio_sec_buf;
音频的空闲辅助缓冲区的索引位置audio_sec_free_index=(32+RTP包的大小+1)mod音频辅助缓冲区的大小audio_sec_buf_size;
音频辅助缓冲区最后一个数据包的序列号audio_sec_last_seq=此音频数据包的序列号;
音频辅助缓冲区有效数据的大小audio_sec_data_size=32+RTP包的大小+1。
2.2.2)如果不是第一个需要缓存到音频辅助缓冲区的音频数据包,则有以下两种情况。
2.2.2.1)如果当前音频数据包的序列号大于音频辅助缓冲区中最后一个数据包的序列号,则将其缓存到辅助缓冲区,步骤如下:
首先检查条件,即音频辅助缓冲区的大小(audio_sec_buf_size-音频的空闲辅助缓冲区的索引位置audio_sec_free_index)是否满足一个32位整型、当前数据包大小所需要的内存空间,以及1位标识位所需要的存储空间。
2.2.2.1.1)如果满足,则将此音频数据包缓存到最后一个音频数据包之后的辅助缓冲区空间中,同时更新以下数据:
音频的空闲辅助缓冲区的索引位置audio_sec_free_index=(32+RTP包的大小+1+此数据包之前音频空闲辅助缓冲区的索引位置audio_sec_free_index)mod音频辅助缓冲区的大小audio_sec_buf_size;
音频辅助缓冲区最后一个数据包的序列号audio_sec_last_seq=此音频数据包的序列号。
音频辅助缓冲区有效数据的大小audio_sec_data_size=32+RTP包的大小+1+此数据包之前的音频辅助缓冲区有效数据的大小audio_sec_data_size。
2.2.2.1.2)如果不满足,则将此音频数据包从辅助缓冲区起始位置开始进行存储。(对于辅助缓冲区是循环利用)同时更新以下数据:
辅助缓冲区中最后一个数据包节点的标识位从1变为0;
音频的空闲辅助缓冲区的索引位置audio_sec_free_index=(32+RTP包的大小+1)mod音频辅助缓冲区的大小audio_sec_buf_size;
音频辅助缓冲区最后一个数据包的序列号audio_sec_last_seq=此音频数据包的序列号;
音频辅助缓冲区有效数据的大小audio_sec_data_size=32+RTP包的大小+1+缓存此数据包之前的音频辅助缓冲区有效数据的大小audio_sec_data_size。
2.2.2.2)如果当前音频数据包的序列号小于音频辅助缓冲区中最后一个数据包的序列号,则需要将其插入到相应的位置(从audio_sec_data_index对数据包进行比较,具体的比较算法不在赘述),为了保证流媒体数据包是有序存放的,需要移动序号在此节点之后的流媒体数据包(具体的移动算法不在这里赘述),同时更新相应的数据,如音频空闲辅助缓冲区的索引位置audio_sec_free_index,音频缓冲区的有效数据的大小,有可能还需要更新其中两个节点的标识位信息。
第五步:从缓冲区中获取数据,下面也以获取音频数据包为准来进行阐述。获取视频数据包的过程类似。
根据被处理过的最近一个音频数据包的序列号audio_processed_seq,从主缓冲区和辅助缓冲区中获取一个离此音频数据包序列号最近的一个数据包。具体的过程如下:
根据音频的主缓冲区的数据索引位置audio_pri_data_index和音频的辅助缓冲区的数据索引位置audio_sec_data_index位置,取出一个音频数据包序列号最靠近被处理过的最近一个音频数据包的序列号audio_processed_seq的数据包。
如果此数据包节点是从音频主缓冲区中取出的,且此节点的标识位信息是1,则音频的主缓冲区的数据索引位置audio_pri_data_index=获取数据节点之前的音频的主缓冲区的数据索引位置audio_pri_data_index+32+1+RTP包的大小。如果此节点的标识位信息是0,则则音频的主缓冲区的数据索引位置audio_pri_data_index=音频主缓冲区的起始位置audio_pri_buf,同时需要更新音频主缓冲的数据大小audio_pri_data_size=获取此数据包之前音频主缓冲的数据大小audio_pri_data_size-(32+1+RTP包的大小)。同理如果此数据包节点是从音频辅助缓冲区中取出,过程类似。
第六步:将数据送解码器等器件进行处理。
第二种实施方式,主缓冲区的内存空间为连续内存的空间,辅助内存空间为Hash表的方式实现。图7示出了根据本发明实施例的流媒体数据包缓存结构图二,主缓冲区的内存存储的空间是连续的,存储的数据包根据sequence number的升序方式进行存储;辅助缓冲区用Hash(哈希)表进行索引,存储数据的内存空间是连续的,数据存储空间中数据包的存放不一定是有序的,辅助缓冲区的有序顺序是通过Hash表来实现的。图7中,Rtp Packet size的内存空间为32位,C为下一个数据节点属是否是连续存放的,占用1位,0表示不连续,1表示连续。Hash表中记录的信息包括:Hash表序号,RTP包的大小,RTP包的序列号,以及当前记录是否有效的一个标识位1标识此记录的信息有效,0标识无效。主缓冲区中流媒体数据包的缓存和读取和第一种实施方式中的类似,在将流媒体数据包缓存到辅助缓冲区的时候,需要先通过计算sequence number mod N(N为Hash表的大小)获取Hash表中的位置,然后将数据缓存到辅助缓冲区的数据空间中,除了获取位置信息这点和相应的存储数据包需要的额外空间节点不同之外,其他的缓存过程基本和第一种实施方式的类似。
第三种实施方式,采用主缓冲区的内存空间为连续存储空间,辅助缓冲区的内存空间为链表的实现方式,有单向链表(附图8)和双向链表之分(附图9)。图8示出了根据本发明实施例的流媒体数据包缓存结构图三,主缓存区的存储空间是连续的,存储的数据包根据sequence number的方式进行存储;辅助存储空间以单向链表的方式进行实现。图9示出了根据本发明实施例的流媒体数据包缓存结构图四,主缓存区的存储空间是连续的,存储的数据包根据sequence number的方式进行存储;辅助存储空间以双向链表的方式进行实现。图8和图9中,Rtp Packet size的内存空间为32位,C为下一个数据节点属是否是连续存放的,占用1位,0表示不连续,1表示连续。采用链表是为了方便插入数据节点,不用进行移动数据的操作。双向链表方便进行查找,不用从起始位置进行遍历,可以从最后一个节点反向进行遍历。这也是流媒体数据的特点,虽然数据包晚到,但是晚到的数据包一般来说距离最后缓存的数据包相对来说比较近。
第四种实施方式,主缓冲区和辅助缓冲区均采用链表的方式实现内存缓存,有单向链表(附图10)和双向链表(附图11)之分。图10和图11示出了根据本发明实施例的流媒体数据包缓存结构图,其中主缓缓冲区和辅助缓冲区的存储空间是分别实现的。图10和图11中,Rtp Packet size的内存空间为32位。具体的实施步骤类似于第一种实施方式,区别在于存储方式可能有所区别,以及存储的数据包节点的所需要的额外内存空间略有不同。
从以上的描述中,可以看出,本发明的方法就是利用这种机制,在不改变大的网络结构、协议结构的前提下,提出了一种在终端接收设备有序缓存流媒体RTP数据包的方法。该缓存处理方法因为对缓存数据包采取了排序,所以克服了缓存数据包不排序导致的多媒体业务错帧和乱帧的问题,能够实现流畅的多媒体业务,给客户带来更好的体验。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种流媒体数据的缓存处理方法,其特征在于,包括以下步骤:
顺序地接收流媒体业务的多个数据包;
将所述数据包按照其在所述流媒体业务中的顺序有序地缓存于缓冲区的数据队列中;
先进先出地从所述数据队列中读取所述数据包,以用于所述流媒体业务的消费。
2.根据权利要求1所述的缓存处理方法,其特征在于,将所述数据包按照其在所述流媒体业务中的顺序有序地缓存于缓冲区中具体包括:
设置所述缓冲区包括主缓冲区和辅助缓冲区;
判断当前接收的所述数据包是否为晚到的数据包;
如果是晚到的,则将当前接收的所述数据包有序地缓存于所述辅助缓冲区的数据队列中;如果不是晚到的,则将当前接收的所述数据包增加到所述主缓冲区中的数据队列的队尾。
3.根据权利要求2所述的缓存处理方法,其特征在于,所述数据包包括指示其在流媒体业务中的顺序的序列号;判断当前接收的所述数据包是否为晚到的数据包具体包括:
判断当前接收的所述数据包的序列号是否小于所述主缓冲区的最后一个数据包的序列号;
如果小于,则判定当前接收的所述数据包是晚到的数据包;否则判定当前接收的所述数据包不是晚到的数据包。
4.根据权利要求3所述的缓存处理方法,其特征在于,将当前接收的所述数据包有序地缓存于所述辅助缓冲区的数据队列中具体包括:
判断当前接收的所述数据包的序列号是否大于所述辅助缓冲区的最后一个数据包的序列号;
如果大于,则将当前接收的所述数据包增加到所述辅助缓冲区的数据队列的队尾;
否则,将当前接收的所述数据包插入到所述辅助缓冲区的数据队列中其序列号大于当前接收的所述数据包的序列号的数据包之前。
5.根据权利要求4所述的缓存处理方法,其特征在于,先进先出地从所述数据队列中读取所述数据包具体包括:
比较所述主缓冲区的数据队列队首的数据包的序列号与所述辅助缓冲区的数据队列队首的数据包的序列号的大小;
读取其中序列号较小的数据包作为当前的数据包输出。
6.根据权利要求2所述的缓存处理方法,其特征在于,将当前接收的所述数据包增加到所述主缓冲区中的数据队列的队尾具体包括:
将所述主缓冲区的数据队列的数据包以序列号的升序方式连续地存储于所述主缓冲区的空间上;或者
采用链表的方式实现所述主缓冲区的数据队列,其中将所述主缓冲区的数据队列的数据包以序列号的升序方式进行链接。
7.根据权利要求2所述的缓存处理方法,其特征在于,将当前接收的所述数据包有序地缓存于所述辅助缓冲区的数据队列中具体包括:
将所述辅助缓冲区的数据队列的数据包以序列号的升序方式连续地存储于所述辅助缓冲区的空间上;或者
将所述辅助缓冲区的数据队列的数据包存储于所述空间上,建立映射所述数据包的索引表,以所述数据包的序列号的升序方式排列所述索引表的索引;或者
采用链表的方式实现所述辅助缓冲区的数据队列,其中将所述辅助缓冲区的数据队列的数据包以序列号的升序方式进行链接。
8.根据权利要求6或7所述的缓存处理方法,其特征在于,所述链表采用单向链表或者双向链表。
9.根据权利要求2所述的缓存处理方法,其特征在于,所述流媒体业务包括视频业务,
设置所述主缓冲区和辅助缓冲区具体包括:设置所述主缓冲区中包括视频主缓冲区,设置所述辅助缓冲区中包括视频辅助缓冲区;
将当前接收的所述数据包有序地缓存于所述辅助缓冲区的数据队列中具体包括:将当前接收的所述数据包有序地缓存于所述视频辅助缓冲区的数据队列中;
将当前接收的所述数据包增加到所述主缓冲区中的数据队列的队尾具体包括:将当前接收的所述数据包增加到所述视频主缓冲区中的数据队列的队尾。
10.根据权利要求2所述的缓存处理方法,其特征在于,所述流媒体业务包括音频业务,
设置所述主缓冲区和辅助缓冲区具体包括:设置所述主缓冲区中包括音频主缓冲区,设置所述辅助缓冲区中包括音频辅助缓冲区;
将当前接收的所述数据包有序地缓存于所述辅助缓冲区的数据队列中具体包括:将当前接收的所述数据包有序地缓存于所述音频辅助缓冲区的数据队列中;
将当前接收的所述数据包增加到所述主缓冲区中的数据队列的队尾具体包括:将当前接收的所述数据包增加到所述音频主缓冲区中的数据队列的队尾。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101447515A CN101330472B (zh) | 2008-07-28 | 2008-07-28 | 流媒体数据的缓存处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101447515A CN101330472B (zh) | 2008-07-28 | 2008-07-28 | 流媒体数据的缓存处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101330472A true CN101330472A (zh) | 2008-12-24 |
CN101330472B CN101330472B (zh) | 2013-01-16 |
Family
ID=40206068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101447515A Active CN101330472B (zh) | 2008-07-28 | 2008-07-28 | 流媒体数据的缓存处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101330472B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102123198A (zh) * | 2011-01-11 | 2011-07-13 | 中国联合网络通信集团有限公司 | 媒体播放器的内存管理方法和内存管理器 |
CN102270207A (zh) * | 2010-06-02 | 2011-12-07 | 中国科学院计算技术研究所 | 一种面向在线多媒体信息挖掘的数据缓存方法和系统 |
CN101771599B (zh) * | 2008-12-26 | 2012-07-04 | 中国移动通信集团公司 | 一种rtp数据包接收处理方法及装置 |
CN102638402A (zh) * | 2012-03-28 | 2012-08-15 | 中兴通讯股份有限公司 | 流媒体双缓存技术中填充数据的方法及装置 |
CN103078811A (zh) * | 2013-01-31 | 2013-05-01 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN106547751A (zh) * | 2015-09-16 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 缓存数据的更新方法及装置 |
WO2017054378A1 (zh) * | 2015-09-28 | 2017-04-06 | 青岛海信电器股份有限公司 | 一种音频数据的处理方法、装置和系统 |
CN107885789A (zh) * | 2017-10-18 | 2018-04-06 | 上海瀚之友信息技术服务有限公司 | 一种数据中转系统及方法 |
CN108494676A (zh) * | 2018-03-21 | 2018-09-04 | 广州多益网络股份有限公司 | 数据传输方法、装置、数据收发设备、系统及存储介质 |
CN108804240A (zh) * | 2018-04-25 | 2018-11-13 | 天津卓易云科技有限公司 | 一种队列数据的分发和处理算法 |
CN109547359A (zh) * | 2018-11-30 | 2019-03-29 | 高新兴科技集团股份有限公司 | Rtp数据包乱序重排方法、装置、存储介质及电子设备 |
CN109918342A (zh) * | 2019-03-06 | 2019-06-21 | 珠海金山网络游戏科技有限公司 | 一种文件系统 |
CN112929702A (zh) * | 2021-04-01 | 2021-06-08 | 北京百家视联科技有限公司 | 一种数据流发送方法、装置、电子设备和存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110247942B (zh) * | 2018-03-09 | 2021-09-07 | 腾讯科技(深圳)有限公司 | 一种数据发送方法、装置和可读介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1271519C (zh) * | 2004-06-30 | 2006-08-23 | 清华大学深圳研究生院 | 流媒体服务器资源的自调节调度方法 |
-
2008
- 2008-07-28 CN CN2008101447515A patent/CN101330472B/zh active Active
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101771599B (zh) * | 2008-12-26 | 2012-07-04 | 中国移动通信集团公司 | 一种rtp数据包接收处理方法及装置 |
CN102270207A (zh) * | 2010-06-02 | 2011-12-07 | 中国科学院计算技术研究所 | 一种面向在线多媒体信息挖掘的数据缓存方法和系统 |
CN102270207B (zh) * | 2010-06-02 | 2014-08-13 | 中国科学院计算技术研究所 | 一种面向在线多媒体信息挖掘的数据缓存方法和系统 |
CN102123198A (zh) * | 2011-01-11 | 2011-07-13 | 中国联合网络通信集团有限公司 | 媒体播放器的内存管理方法和内存管理器 |
CN102638402A (zh) * | 2012-03-28 | 2012-08-15 | 中兴通讯股份有限公司 | 流媒体双缓存技术中填充数据的方法及装置 |
CN102638402B (zh) * | 2012-03-28 | 2015-04-01 | 中兴通讯股份有限公司 | 流媒体双缓存技术中填充数据的方法及装置 |
CN103078811A (zh) * | 2013-01-31 | 2013-05-01 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN103078811B (zh) * | 2013-01-31 | 2015-12-09 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN106547751A (zh) * | 2015-09-16 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 缓存数据的更新方法及装置 |
WO2017054378A1 (zh) * | 2015-09-28 | 2017-04-06 | 青岛海信电器股份有限公司 | 一种音频数据的处理方法、装置和系统 |
CN107885789A (zh) * | 2017-10-18 | 2018-04-06 | 上海瀚之友信息技术服务有限公司 | 一种数据中转系统及方法 |
CN108494676A (zh) * | 2018-03-21 | 2018-09-04 | 广州多益网络股份有限公司 | 数据传输方法、装置、数据收发设备、系统及存储介质 |
CN108494676B (zh) * | 2018-03-21 | 2022-01-11 | 广州多益网络股份有限公司 | 数据传输方法、装置、数据收发设备、系统及存储介质 |
CN108804240A (zh) * | 2018-04-25 | 2018-11-13 | 天津卓易云科技有限公司 | 一种队列数据的分发和处理算法 |
CN108804240B (zh) * | 2018-04-25 | 2021-11-19 | 天津卓盛云科技有限公司 | 一种队列数据的分发和处理算法 |
CN109547359A (zh) * | 2018-11-30 | 2019-03-29 | 高新兴科技集团股份有限公司 | Rtp数据包乱序重排方法、装置、存储介质及电子设备 |
CN109918342A (zh) * | 2019-03-06 | 2019-06-21 | 珠海金山网络游戏科技有限公司 | 一种文件系统 |
CN112929702A (zh) * | 2021-04-01 | 2021-06-08 | 北京百家视联科技有限公司 | 一种数据流发送方法、装置、电子设备和存储介质 |
CN112929702B (zh) * | 2021-04-01 | 2021-08-24 | 北京百家视联科技有限公司 | 一种数据流发送方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101330472B (zh) | 2013-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101330472B (zh) | 流媒体数据的缓存处理方法 | |
CN104995924B (zh) | 实况媒体分发中的基于节目的缓存 | |
CN101155296B (zh) | 数据传输的方法 | |
CN104025521B (zh) | 内容传输系统、优化该系统中网络流量的方法、中央控制装置和本地缓存装置 | |
CN101188477B (zh) | 一种数据包序列接收的方法及设备 | |
CN102694831B (zh) | 移动终端流媒体数据补偿方法与系统、内容分发网络 | |
CN102067617A (zh) | 在内容分发网络中自组织的高速缓存的方法和装置 | |
US7570585B2 (en) | Facilitating DSLAM-hosted traffic management functionality | |
CN101282305B (zh) | 分布式系统中的带宽控制方法及业务板 | |
CN103560848A (zh) | 用于利用空闲带宽的技术 | |
WO2010072122A1 (zh) | 一种传输报文的方法、端口和系统 | |
CN102916902A (zh) | 数据存储方法及装置 | |
CN102270207B (zh) | 一种面向在线多媒体信息挖掘的数据缓存方法和系统 | |
CN104754521A (zh) | 一种报文转发方法、无线接入点、无线控制器和系统 | |
CN101964751B (zh) | 数据包的传输方法及装置 | |
CN106294191B (zh) | 处理表的方法、访问表的方法和装置 | |
CN102868636A (zh) | 多核网络设备报文按流保序方法及系统 | |
CN103442091B (zh) | 一种数据传输方法及装置 | |
US20030007488A1 (en) | Efficient data transmission based on a policy | |
Noh et al. | Progressive caching system for video streaming services over content centric network | |
CN112003644A (zh) | 一种基于卫星网络的文件包组播方法 | |
CN103561013A (zh) | 流媒体的数据分发系统 | |
CN101895470B (zh) | 流控信息传递方法和装置 | |
CN107592361A (zh) | 一种基于双ib网络的数据传输方法、装置、设备 | |
CN1933450A (zh) | 板间通信方法及接口板 |
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 |