一种缓存流媒体数据的方法

文档序号:7601201阅读:138来源:国知局
专利名称:一种缓存流媒体数据的方法
技术领域
本发明涉及媒体通信技术领域,尤其涉及一种缓存流媒体数据的方法。
背景技术
当前,流媒体已经在网络上得到广泛的使用,人们可以通过流媒体在网络上实时观看或收听节目。流媒体,又称流式媒体,允许浏览者一边下载流媒体文件,一边播放该文件,而不需要等到整个流媒体文件下载完成后再进行播放,从而大大节省了使用者的下载时间。流媒体技术并不是一项单一的技术,在实现流媒体下载和播放的过程中,具体会涉及到流媒体数据的采集、压缩、传输、缓存以及播放等多项技术。本发明所涉及的就是有关流媒体数据的缓存技术。
在现有技术中,流媒体播放器从网络下载流媒体数据,将该数据缓存在自身的播放缓存中,通过该播放缓存播放下载得到的流媒体数据。在此过程中,涉及到两个速度,一个是流媒体数据的下载速度,该速度由网络状况决定,另一个是流媒体数据的本地播放速度,该速度由流媒体播放器自身所决定。由于流媒体数据的播放速度与网络状况无关,因此,会造成流媒体数据的下载速度与播放速度之间存在差异,具体可包括如下两种情况一、流媒体数据的下载速度快于播放速度在此情况下,会造成播放缓存中的媒体数据尚未被播出,而新下载的媒体数据已经到达播放缓存的情况,由此,会导致播放缓存中的部分尚未播出的流媒体数据被新下载的流媒体数据所覆盖,从而造成流媒体数据的损失,产生播放错误;二、流媒体数据的下载速度慢于播放速度
在此情况下,会造成播放缓存已经将全部缓存的流媒体播放数据播放完毕,而新的流媒体数据仍未到达播放缓存的情况,从而会造成流媒体数据播放的不连贯,影响播放质量。
由于流媒体数据的下载速度和播放速度分别由不同的因素所决定,因此,这两个速度之间的大小关系必然难以相等,由此,以上所述由于速度不一致所产生的问题也就必然会出现。在现有技术中,并没有提供解决该问题的方法。

发明内容
有鉴于此,本发明的主要目的在于提供一种缓存流媒体数据流的方法,利用该方法,能够使得流媒体数据的下载速度和播放速度相一致,从而避免由于速度一致所产生的覆盖播放缓存中的数据以及数据播放不连贯的问题。
为实现上述目的,本发明提供了一种缓存流媒体数据的方法,该方法包括在播放缓存接收流媒体数据的一侧,执行以下操作步骤a播放缓存按照下载速度,通过网络下载一块流媒体数据;步骤b判断播放缓存中当前是否还有空闲缓存块,如果是,则从播放缓存中取出一个空闲缓存块,否则,播放缓存停止通过网络下载流媒体数据,返回本步骤,直至播放缓存中出现空闲缓存块;步骤c将步骤a所述的流媒体数据存放到步骤b所取出的空闲缓存块中,并将该保存流媒体数据的缓存块返回给播放缓存,然后,返回步骤a,直至流媒体数据下载完毕;在播放缓存播放流媒体数据的一侧,执行以下操作步骤A判断播放缓存中保存流媒体数据的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤B;否则,播放缓存停止播放缓存块,返回本步骤,直至播放缓存中保存流媒体数据的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;步骤B按照播放速度,从播放缓存中顺序取出一个保存流媒体数据的缓存块并播放,并将进行播放后得到的空闲缓存块返回给播放缓存,然后,返回步骤A,直至流媒体数据播放完毕。
其中,在播放缓存中引入空闲缓存队列和数据缓存队列,其中,空闲缓存队列用于管理播放缓存中所有未被流媒体数据占用的空闲缓存块,数据缓存队列用于管理播放缓存中所有已经被流媒体数据所占用的缓存块;步骤b包括对空闲缓存队列执行取空闲缓存块操作,判断该操作返回值是否为空,如果是,则判断得到播放缓存中当前没有空闲缓存块,播放缓存停止从网络下载流媒体数据块,然后,返回步骤b,否则,判断得到播放缓存中当前有空闲缓存块,执行所述步骤c;步骤c包括将步骤a所述流媒体数据保存到步骤b所取出的空闲缓存块中,然后,通过执行数据队列的存数据缓存块操作,将该保存流媒体数据的缓存块返回到播放缓存的数据缓存队列中,然后,返回步骤a,直至流媒体数据下载结束;步骤A包括步骤A1判断数据缓存队列中的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤A2,否则,停止播放缓存播放保存有流媒体数据的缓存块,然后返回本步骤,直至数据缓存队列中的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;步骤A2播放缓存按照播放速度,对其中的数据缓存队列执行取数据缓存块操作,将从数据缓存队列中所取出的缓存块播放,然后,对空闲缓存队列执行存空闲缓存块操作,将进行播放后所得到的空闲缓存块返回到播放缓存的空闲缓存队列中,返回步骤A1,直至媒体数据播放完毕。
其中,预先设置一个下载缓存,该下载缓存被配置为不能用从网络上下载的流媒体数据覆盖那些仍未被播放缓存取走的流媒体数据;步骤a包括下载缓存通过网络从流媒体服务器获取流媒体数据,播放缓存再从该下载缓存中得到流媒体数据;步骤b所述播放缓存停止通过网络下载流媒体数据为播放缓存停止从下载缓存获取流媒体数据块,下载缓存由于其中的数据未被取走且不能被新下载的数据所覆盖,停止通过网络从流媒体服务器下载流媒体数据。
其中,该方法进一步包括预先计算缓存总时长除以缓存块时间长度的值,将该值作为所述流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数。
其中,所述缓存总时长为6秒,所述缓存块时间长度为2秒。
可见,在本发明中,判断播放缓存中是否有空闲缓存块,以及判断播放缓存中是否已经有足够数量的保存有流媒体数据的缓存块,并根据判断结果确定是否继续下载和播放流媒体数据,从而能够控制流媒体数据的下载速度和播放速度,以避免由于速度不一致而造成的数据被覆盖或者播放不连贯的问题。由此,能够保证数据缓存的和播放过程中不会出现错误,并能保证流媒体数据的播放质量。


图1为本发明一实施例中,播放缓存接收流媒体数据一侧所执行步骤的流程图。
图2为本发明一实施例中,播放缓存播放流媒体数据一侧所执行步骤的流程图。
具体实施例方式
本发明为一种缓存流媒体数据的方法,该方法对流媒体数据的下载和播放速度进行控制,从而使得这两个速度相一致,以避免由于速度不一致而造成的覆盖播放缓存中的数据和数据播放不连贯的问题。
实现本发明,需要执行以下步骤在播放缓存接收流媒体数据的一侧,执行以下步骤步骤a播放缓存按照下载速度,通过网络下载一块流媒体数据;步骤b判断播放缓存中当前是否还有空闲缓存块,如果是,则从播放缓存中取出一个空闲缓存块,否则,播放缓存停止通过网络下载流媒体数据块,返回本步骤,直至播放缓存中出现空闲缓存块;步骤c将步骤a所述的流媒体数据存放到步骤b所取出的空闲缓存块中,并将该保存流媒体数据的缓存块返回给播放缓存,然后,返回步骤a,直至流媒体数据下载完毕;在播放缓存播放流媒体数据的一侧,执行以下步骤步骤A判断播放缓存中保存流媒体数据的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤B;否则,播放缓存停止播放缓存块,返回本步骤,直至播放缓存中保存流媒体数据的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;步骤B按照播放速度,从播放缓存中顺序取出一个保存流媒体数据的缓存块并播放,并将进行播放后得到的空闲缓存块返回给播放缓存,然后,返回步骤A,直至流媒体数据播放完毕。
下面结合具体实施例,并参照附图对本发明进行详细描述。
在进行具体描述之前,首先对本发明实施例中所涉及的几个变量进行描述播放缓存的缓存块总个数,ChunkNum,用于表示流媒体播放器中用于缓存流媒体数据流的缓存块的总个数;缓存块时间长度,ChunkDuration,用于表示每个流媒体数据在一个缓存块中所缓存的时间;缓存总时长,BufferTime,用于表示每个流媒体数据块在播放缓存中的缓存总时长,只有数据块在播放缓存中的缓存时间达到该缓存总时长时,该数据块才被允许从播放缓存中实际播放。
上述三个变量可以在实际测试中进行调节,以选取最优值。在产品的实际测试中,可选取ChunkNum为10,ChunkDuration为2秒,BufferTime为6秒;也可根据实际需要,为以上三个变量分别选取其它值,并不影响本发明的实现。
在本发明实施例中,为了实现对下载速度和播放速度的控制,在播放缓存中引入空闲缓存队列和数据缓存队列,其中,空闲缓存队列用于管理播放缓存中所有未被流媒体数据占用的空闲缓存块,数据缓存队列用于管理播放缓存中所有已经被流媒体数据所占用并等待实际播放的缓存块;针对这两个缓存队列,按照流媒体数据先进先出的原则,分别设计各自的操作,其中,针对空闲缓存队列的操作为取空闲缓存块(GetFreeBuffer)操作,用于从空闲缓存队列中取出一个缓存块,执行该操作的同时,将空闲缓存队列的当前缓存块个数减1;如果执行该操作时,空闲缓存队列中没有空闲缓存块,则该操作返回为空;存空闲缓存块(PutFreeBuffer)操作,用于将播放缓存中的一个空闲缓存块返回给空闲缓存队列,执行该操作的同时,将空闲缓存队列的当前缓存块个数加1;针对数据缓存队列的操作为取数据缓存块(GetMediaBuffer)操作,用于从数据缓存队列中取出一个存放有流媒体数据的缓存块,以使得该缓存块中的流媒体数据能够从播放缓存中被实际播放,执行该操作的同时,将数据缓存队列中的当前缓存块个数减1;如果执行该操作时,数据缓存队列中没有缓存块,则该操作返回空;存数据缓存块(PutMediaBuffer)操作,用于将一个保存有流媒体数据的缓存块存入数据缓存队列,以等待实际播放该流媒体数据,执行该操作的同时,将数据缓存队列的当前缓存块个数加1;其中,在进行流媒体数据缓存之前,播放缓存中的所有缓存块都保存在空闲缓存队列中,也就是,空闲缓存队列的缓存块个数等于ChunkNum,数据缓存队列的缓存块个数等于0。
在进行了如上设置后,在本发明一实施例中,可以通过如下步骤实现以上所述本发明的各个步骤(一)参见图1,播放缓存接收流媒体数据一侧执行以下步骤步骤101判断流媒体数据下载是否已经结束,如果是,则结束本流程,否则,执行步骤102;步骤102播放缓存从网络下载一块流媒体数据;其中,本发明实施例中,为了实现方便,设计一个下载缓存,用于接收并缓存从网络上下载得到的流媒体数据,该下载缓存通过网络从流媒体服务器获取流媒体数据,播放缓存再从该下载缓存中得到流媒体数据;其中,对于所述下载缓进行如下限制不能用从网络上下载的流媒体数据覆盖那些仍未被播放缓存取走的流媒体数据,以通过该限制并结合后续的具体流程,实现对下载速度的控制;在本发明其它实施例中,播放缓存也可直接通过网络从流媒体服务器获取流媒体数据块,并不影响本发明的实现;步骤103~步骤104对空闲缓存队列执行取空闲缓存块操作,判断该操作返回值是否为空,如果是,表明空闲缓存队列中当前没有空闲缓存队列,相应地,也就表明播放缓存中的各个缓存块当前都存有流媒体数据,为了避免当前从网络获取的流媒体数据块覆盖播放缓存中仍未播放的数据,执行步骤105,否则,表明当前播放缓存中还有空闲的缓存块可以保存接收到的流媒体数据,则执行步骤106;步骤105播放缓存停止从网络下载流媒体数据块,然后,返回步骤103,直至对空闲缓存队列执行取空闲缓存块的操作返回值不再为空;
其中,在本发明实施例中,播放缓存停止从下载缓存获取流媒体数据块,根据上述对下载缓存所进行的限制,播放缓存停止从下载缓存获取数据块之后,下载缓存会由于其中的数据未被取走且不能被新下载的数据所覆盖,而停止通过网络从流媒体服务器下载流媒体数据,从而能够达到控制下载速度的目的;在本发明其它实施例中,播放缓存也可直接停止通过网络从流媒体服务器下载流媒体数据,从而控制下载速度,采用此种方式并不影响本发明的实现;步骤106~步骤107将步骤102所下载的流媒体数据保存到步骤103中所取出的空闲缓存块中,然后,通过执行数据队列的存数据缓存块操作,将该保存流媒体数据的缓存块返回到播放缓存的数据缓存队列中,然后,返回步骤101,直至流媒体数据下载结束。
(二)参见图2,播放缓存接收流媒体数据一侧执行以下步骤步骤201播放缓存判断流媒体数据是否已经播放完毕,如果是,则结束本流程,否则,执行步骤202;步骤202播放缓存判断数据缓存队列中的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤203,否则,停止播放缓存播放保存有流媒体数据的缓存块,然后返回本步骤,直至数据缓存队列中的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;其中,在进行流媒体数据缓存之前,该方法预先计算所述流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,该个数等于BufferTime/ChunkDuration;步骤203播放缓存按照播放速度,对其中的数据缓存队列执行取数据缓存块操作;步骤204~步骤205将从数据缓存队列中所取出的缓存块播放,以实现播放流媒体数据,然后,对空闲缓存队列执行存空闲缓存块操作,将进行播放后所得到的空闲缓存块返回到播放缓存的空闲缓存队列中,返回步骤201,直至媒体数据播放完毕。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种缓存流媒体数据的方法,其特征在于,该方法包括在播放缓存接收流媒体数据的一侧,执行以下操作步骤a播放缓存按照下载速度,通过网络下载一块流媒体数据;步骤b判断播放缓存中当前是否还有空闲缓存块,如果是,则从播放缓存中取出一个空闲缓存块,否则,播放缓存停止通过网络下载流媒体数据,返回本步骤,直至播放缓存中出现空闲缓存块;步骤c将步骤a所述的流媒体数据存放到步骤b所取出的空闲缓存块中,并将该保存流媒体数据的缓存块返回给播放缓存,然后,返回步骤a,直至流媒体数据下载完毕;在播放缓存播放流媒体数据的一侧,执行以下操作步骤A判断播放缓存中保存流媒体数据的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤B;否则,播放缓存停止播放缓存块,返回本步骤,直至播放缓存中保存流媒体数据的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;步骤B按照播放速度,从播放缓存中顺序取出一个保存流媒体数据的缓存块并播放,并将进行播放后得到的空闲缓存块返回给播放缓存,然后,返回步骤A,直至流媒体数据播放完毕。
2.根据权利要求1所述的方法,其特征在于,在播放缓存中引入空闲缓存队列和数据缓存队列,其中,空闲缓存队列用于管理播放缓存中所有未被流媒体数据占用的空闲缓存块,数据缓存队列用于管理播放缓存中所有已经被流媒体数据所占用的缓存块;步骤b包括对空闲缓存队列执行取空闲缓存块操作,判断该操作返回值是否为空,如果是,则判断得到播放缓存中当前没有空闲缓存块,播放缓存停止从网络下载流媒体数据块,然后,返回步骤b,否则,判断得到播放缓存中当前有空闲缓存块,执行所述步骤c;步骤c包括将步骤a所述流媒体数据保存到步骤b所取出的空闲缓存块中,然后,通过执行数据队列的存数据缓存块操作,将该保存流媒体数据的缓存块返回到播放缓存的数据缓存队列中,然后,返回步骤a,直至流媒体数据下载结束;步骤A包括步骤A1判断数据缓存队列中的缓存块个数是否大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数,如果是,则执行步骤A2,否则,停止播放缓存播放保存有流媒体数据的缓存块,然后返回本步骤,直至数据缓存队列中的缓存块个数大于等于流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数;步骤A2播放缓存按照播放速度,对其中的数据缓存队列执行取数据缓存块操作,将从数据缓存队列中所取出的缓存块播放,然后,对空闲缓存队列执行存空闲缓存块操作,将进行播放后所得到的空闲缓存块返回到播放缓存的空闲缓存队列中,返回步骤A1,直至媒体数据播放完毕。
3.根据权利要求1或2所述的方法,其特征在于,预先设置一个下载缓存,该下载缓存被配置为不能用从网络上下载的流媒体数据覆盖那些仍未被播放缓存取走的流媒体数据;步骤a包括下载缓存通过网络从流媒体服务器获取流媒体数据,播放缓存再从该下载缓存中得到流媒体数据;步骤b所述播放缓存停止通过网络下载流媒体数据为播放缓存停止从下载缓存获取流媒体数据块,下载缓存由于其中的数据未被取走且不能被新下载的数据所覆盖,停止通过网络从流媒体服务器下载流媒体数据。
4.根据权利要求1所述的方法,其特征在于,该方法进一步包括预先计算缓存总时长除以缓存块时间长度的值,将该值作为所述流媒体数据在播放缓存中所需的缓存时间所对应的缓存块个数。
5.根据权利要求4所述的方法,其特征在于,所述缓存总时长为6秒,所述缓存块时间长度为2秒。
全文摘要
本发明为一种缓存流媒体数据的方法,在该方法中,判断播放缓存中是否有空闲缓存块,如果是,则将从网络下载的流媒体数据缓存到播放缓存中,否则,停止下载;并且,判断播放缓存中是否已经有足够数量的保存有流媒体数据的缓存块,如果是,则播放保存有流媒体数据的缓存块,否则,停止播放缓存块。该方法能够控制流媒体数据的下载速度和播放速度,以避免由于速度不一致而造成的数据被覆盖或者播放不连贯的问题。由此,能够保证数据缓存的和播放过程中不会出现错误,并能保证流媒体数据的播放质量。
文档编号H04L12/56GK1798097SQ20041010285
公开日2006年7月5日 申请日期2004年12月24日 优先权日2004年12月24日
发明者王麒 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1