网络流媒体播放中的多线程下载方法、装置及下载设备的制作方法

文档序号:7824447阅读:383来源:国知局
网络流媒体播放中的多线程下载方法、装置及下载设备的制作方法
【专利摘要】本发明公开了一种网络流媒体播放中的多线程下载方法、装置及下载设备,所述方法当客户端点击可播放链接,根据该链接的源URL向服务器发送连接请求,在请求成功并接收响应头域后,从响应头域获取对应的需要下载的文件的下载信息,从下载信息中判断该文件的下载是否支持断点续传,若不支持,则直接创建单个线程下载数据,否则,根据该文件的长度,将该文件划分为相同大小的文件片段,同时,创建对应用于下载的多个线程,对该文件进行分段分别下载。本发明可有效利用带宽,提高下载速度,从而提高流媒体播放的流畅性。
【专利说明】网络流媒体播放中的多线程下载方法、装置及下载设备

【技术领域】
[0001]本发明涉及网络通信【技术领域】,特别是一种网络流媒体播放中的多线程下载方法、装置及下载设备。

【背景技术】
[0002]随着网络多媒体技术、互联网视频业务的发展,在线浏览观看网络视频已变得非常普遍。无论是智能手机,还是网络机顶盒,流媒体播放极大地丰富了人们的日常生活。在网络条件较好的情况下,通常可以流畅的观看视频,而现实的网络条件往往较慢或者经常出现不稳定的情况,直接影响就是造成播放网络视频卡顿、无法播放高清内容以及切台速度慢,极大地影响用户体验。因此,为了在网络条件较差的环境流畅播放网络视频甚至播放较清晰的视频内容,必须采用一种有效的数据下载方法,充分利用网络资源以快速下载,以改善用户观看体验。
[0003]现有的流媒体数据下载方案中,多为单线程下载。在网络带宽限制时,常会有上面所述的播放卡顿、无法播放高清内容的问题,原因在于单线程不能够最大程度的利用多核CPU,也不能充分利用网络带宽。多线程下载能够有效的利用CPU调度,提高数据下载速度和效率,更大限度的使用网络带宽。常见的流媒体服务器多为HTTP服务器,而且大多支持断点续传,这也为多线程的下载提供了技术依据。多线程下载的原理是将所需下载的源(URL)指定的文件分块,对每一块单独开辟一个线程完成数据的读取、暂存,最终将文件按顺序连接便得到完整文件。而网络流媒体播放由于其特性,需要一边下载一边播放,要求有一种稳定、快速的下载方法以提高用户观看体验。


【发明内容】

[0004]为解决上述问题,本发明的目的在于提供一种网络流媒体播放中的多线程下载方法、装置及下载设备,有效利用带宽,提高下载速度,从而提高流媒体播放的流畅性。
[0005]本发明解决其问题所采用的技术方案是:
一种网络流媒体播放中的多线程下载方法,包括当客户端点击可播放链接,根据该链接的源URL向服务器发送连接请求,在请求成功并接收响应头域后,从响应头域获取对应的需要下载的文件的下载信息,从下载信息中判断该文件的下载是否支持断点续传,若不支持,则直接创建单个线程下载数据,否则,根据该文件的长度,将该文件划分为相同大小的文件片段,同时,创建对应用于下载的多个线程,对该文件进行分段分别下载。
[0006]优选的,所述将该文件划分为相同大小的文件片段时,根据预先设置的文件片段的大小对该文件进行划分,且被划分后的文件片段均具有依次对应的段号。
[0007]优选的,所述创建对应用于下载的多个线程时,分别为每个线程分配对应的缓存空间,对该文件进行分段分别下载时,多个线程按照段号依次分配下载对应的文件片段,并将下载的文件片段的数据存储至对应的缓存空间。
[0008]优选的,所述每个线程的缓存空间的大小与设置的文件片段的大小相同,且所述为每个线程分配的缓存空间通过一个缓存区队列进行管理,且缓存区队列按照段号为每个缓存空间分配对应的存储地址。
[0009]优选的,所述缓存区队列对外提供有统一的接口,用于在播放时通过该接口从缓存区队列读取数据供解封装及解码播放。
[0010]优选的,所述多线程下载方法还包括:
当需要播放视频时,则根据存储地址依次从缓存区队列中读取缓存空间存储的文件片段,从读指针指向第一个缓存空间开始,首先判断该缓存空间是否可以读取,若可以,则不断从该缓存空间读取对应的文件片段数据,当该存储空间存储满且其中的数据被读取完时,该存储空间对应的线程在判断整个文件没有下载完时,则从服务器中下载该文件的另外一个文件片段,与此同时,读指针指向下一个缓存空间并开始读取对应的数据。
[0011]一种网络流媒体播放中的多线程下载装置,所述多线程下载装置采用以上所述的多线程下载方法,具体包括:
检测模块,用于检测所要连接的URL源是否支持断点续传,若支持则采用多线程下载,否则采用单线程下载;
配置模块,用于配置多线程下载时的固定参数,包括创建的用于下载的线程个数、用于对下载的文件进行段号划分的对应文件片段的大小、为每个线程分配的缓存空间的大小以及启动多线程下载时允许的最小文件的大小,其中,对下载的文件进行段号划分的对应文件片段的大小、为每个线程分配的缓存空间的大小以及启动多线程下载时允许的最小文件的大小中,二者的大小相等;
缓存区管理模块,用于通过一个缓存区队列管理多线程的每个缓存空间;
全局管理模块,用于调用以上各模块对需要下载的文件进行下载,并在需要播放视频时,根据播放进度记录对应的播放信息。
[0012]一种下载设备,所述下载设备安装有以上所述的多线程下载装置。
[0013]本发明的有益效果是:
本发明采用一种一种网络流媒体播放中的多线程下载方法、装置及下载设备,通过有效管理多线程下载流媒体数据,更大限度的利用网络带宽,极大地提高下载速度,使流媒体播放在网络状态不佳时尽可能流畅播放,而且提高切台速度,从而改善用户体验。

【专利附图】

【附图说明】
[0014]下面结合附图和实例对本发明作进一步说明。
[0015]图1是本发明所述多线程下载方法的整体流程示意图;
图2是本发明所述多线程下载方法中多个线程下载时的示意图;
图3是本发明所述多线程下载方法中对应单个线程下载时的流程示意图。

【具体实施方式】
[0016]为便于描述本发明,网络流媒体播放、多线程下载在客户端实现,服务器端存放客户端所要下载播放的文件。
[0017]本发明在多线程下载时,首先根据所需下载的源URL发出连接请求,请求成功后接收响应,根据响应头域获得是否支持断点续传、文件大小等信息。对于不支持断点续传的文件,创建单个线程下载数据;对于支持断点续传的文件,则创建多个线程,对文件进行分段分别下载。其中,每个线程分配一块缓存,用于储存本线程下载的数据。所有的缓存通过一个缓存区队列管理,缓存区队列对外提供一套接口,用于从缓存区队列读取数据供解封装、解码播放,并记录当前读指针。该读指针每次被读走一块(缓存)数据时,相应读指针增加,并在读完该缓存区的数据时,记录读完标记,读指针指向下一块缓存区,同时该线程开始下载剩余未下载的第一个分段。每个线程记录当前正在下载的文件分段号,当某个线程下载完当前文件分段后,线程停止下载数据的操作,等到被读走后,开始下载剩余未下载的第一个分段。如此往复直到下载播放完整个文件。
[0018]实施例1:
参照图1所示,本发明为实现以上所述内容,提供了一种网络流媒体播放中的多线程下载方法,包括当客户端点击可播放链接,根据该链接的源URL向服务器发送连接请求,在请求成功并接收响应头域后,从响应头域获取对应的需要下载的文件的下载信息,从下载信息中判断该文件的下载是否支持断点续传,若不支持,则直接创建单个线程下载数据,否贝1J,根据该文件的长度,将该文件划分为相同大小的文件片段,同时,创建对应用于下载的多个线程,对该文件进行分段分别下载。下载播放结束,释放资源即可。
[0019]响应头域包含要下载文件的长度L、是否支持断点续传的信息等下载信息,因此,从断点续传的信息可以判断该文件的下载是采用单线程或者多线程,而根据该文件的长度L则可以对该文件进行划分。其中,对文件进行划分时,预先设置文件片段的大小S,则整个文件所需的片段数M = L/S,若有余数则片段数加1,且被划分后的文件片段均具有依次对应的段号。
[0020]参照图2所示,本发明在创建对应用于下载的多个线程时,分别为每个线程分配对应的缓存空间,对该文件进行分段分别下载时,多个线程按照段号依次分配下载对应的文件片段,并将下载的文件片段的数据存储至对应的缓存空间。对应的,第一个线程下载文件片段范围是[0,S),第二个线程下载文件片段范围是[S,2*S),以此类推,最后一个线程下载文件片段范围是[M*S,L)。若文件长度L大于N乘以S,则N个线程下载完后,还需继续下载剩余文件片段。
[0021]需要说明的是,本发明中,每个线程的缓存空间的大小与设置的文件片段的大小相同。如果缓存空间大于文件片段,则浪费存储空间,且会对后续的读取造成时间上的浪费;如果缓存空间小于文件片段,则单个线程无法一次性下载单个文件片段,也不利于后续数据的存储和读取。除此之外,为每个线程分配的缓存空间通过一个缓存区队列进行管理,且缓存区队列按照段号为每个缓存空间分配对应的存储地址。通过缓存区队列管理缓存空间,可以方便地对缓存空间进行管理,且缓存区队列中的缓存区间均为连续存储的区间,可有效提升后续的查找及读取效率,节约时间,使后续的播放更加流畅。
[0022]为便于后续视频数据的读取和播放,所述缓存区队列对外提供有统一的接口,用于在播放时通过该接口从缓存区队列读取数据供解封装及解码播放。
[0023]其中,多个线程在下载时,用户有可能已经开始播放对应的视频,这时就需要从缓存区队列中读取数据,具体采用如下方法:
当需要播放视频时,则根据存储地址依次从缓存区队列中读取缓存空间存储的文件片段,从读指针指向第一个缓存空间开始,首先判断该缓存空间是否可以读取,若可以,则不断从该缓存空间读取对应的文件片段数据,当该存储空间存储满且其中的数据被读取完时,该存储空间对应的线程在判断整个文件没有下载完时,则从服务器中下载该文件的另外一个文件片段,与此同时,读指针指向下一个缓存空间并开始读取对应的数据。
[0024]为具体的对本发明进行说明,参照图3所示,本发明提供多线程下载中的具体每个线程下载的流程图,首先判断要下载的文件是否下载完毕,若下载完毕,则退出,否则,为当前下载线程分配内存(即缓存空间)以缓存下载的媒体数据;之后,将成功分配的内存地址放入缓存区队列,即将该内存的指针放入缓存区队列,以便读取媒体数据播放时取出;之后,获取当前线程需要下载的文件片段对应的段号;之后,该线程构造合适的请求头域,向服务器发送连接请求,连接成功,则不断从服务器下载数据到本线程对应的内存中,同时,循环判断当前文件片段是否下载完毕;若本线程负责下载的文件片段下载完毕,判断当前文件片段的数据是否被读完,若尚未被读完,则线程进入等待状态;若当前文件片段的数据被读完,可以继续下载其他片段,重新开始图3中所述流程。
[0025]本发明中,下载的文件片段大小可自动配置,一般不宜过大,否则当播放到该片段且该片段尚未下载完时会出现数据不足,等待数据的情况。同时下载线程数量也可自行配置,可以根据终端硬件配置适当调整。相对单线程下载的方式,本发明可以提高流媒体文件的下载速度,进而避免播放过程的频繁卡顿、甚至播放失败,适用于解决网络状态不佳时造成的播放卡顿、切台缓慢等缺点。
[0026]由以上可知,本发明根据自行配置的下载线程数量,可实现在线视频下载和离线视频下载,离线下载时,只要分配的下载线程足够多,对应的缓存空间可完全存储对应的文件大小即可。本发明可应用于不同的领域,包括各种智能设备、固定计算终端等具有运算处理功能的设备。
[0027]本发明还提供了一种网络流媒体播放中的多线程下载装置,所述多线程下载装置采用以上所述的多线程下载方法,具体包括:
检测模块,用于检测所要连接的URL源是否支持断点续传,若支持则采用多线程下载,否则采用单线程下载;
配置模块,用于配置多线程下载时的固定参数,包括创建的用于下载的线程个数N、用于对下载的文件进行段号划分的对应文件片段的大小S、为每个线程分配的缓存空间的大小S以及启动多线程下载时允许的最小文件的大小S,其中,对下载的文件进行段号划分的对应文件片段的大小、为每个线程分配的缓存空间的大小以及启动多线程下载时允许的最小文件的大小中,三者的大小相等,均为S ;
缓存区管理模块,用于通过一个缓存区队列管理多线程的每个缓存空间,包括缓存空间入列、出列、删除等,同时记缓存空间的信息,如对应大小、有效数据等;
全局管理模块,用于调用以上各模块对需要下载的文件进行下载,并在需要播放视频时,根据播放进度记录对应的播放信息。
[0028]全局管理模块可记录、更新一些全局信息,包括读指针、当前正被读取的分段的段号以及还未开始下载的分段段号等,负责调用各模块,使各模块协调有效运作下载数据。读指针指向某块缓存空间,每读取一块数据,读指针相应增加,直至读完便指向下一块缓存空间。若当前缓存空间的有效数据不足,则读取操作阻塞直至有足够数据可读。
[0029]通过以上四个模块的协调运作,确定支持断点续传后启动N个下载线程,在每个线程内分配S大小的缓存空间,通过系统调度并发下载所需的媒体数据。对外的接口通过缓存区管理模块按顺序得到要播放的流媒体数据,同时缓存区管理模块维护管理当前的缓存空间,无需等到每个片段下载完才可被读走播放。
[0030]读取数据播放时,首先从缓存区队列取出一个缓存空间,通过缓存区管理模块维护的信息判断数据是否足够,若足够则读取,相应读指针增加,否则等待数据达到所需大小。读完该缓存空间的数据时,记录被读完的片段信息,如片段号等。然后继续从缓存区队列取出下一个缓存空间读取媒体数据操作,直至播放完毕。
[0031]本发明还提供了一种下载设备,所述下载设备安装有以上所述的多线程下载装置。
[0032]实施例2:
以下通过具体的例子对本发明进行说明。
[0033]假设:流媒体文件大小为L=302 M Bytes,开辟线程数量N=1个,每个线程下载片段的大小S=3M Bytes,每个线程分配的下载缓存区大小也为3MB,启动多线程下载的最小文件大小也为3MB,则下载完整个文件所需的片段数M =101片。第一个线程下载文件片段范围是[0,3M),第二个线程下载文件片段范围是[3M,6M),以此类推,最后一个线程下载文件片段范围是[300M,302M)。
[0034]对照图1所示,获得流媒体大小等相关信息后,保存文件大小信息302M,配置线程数量10,线程下载片段大小3M,启动10个线程开始下载文件的前十个分段,分段号分别为0-9。对照图3所示,每个线程分配3M内存存储数据,并将其按照片段顺序放入缓存区队列。假设对应的地址分别是PO,pi,..., p9,然后分别开始下载数据。此时要播放视频,开始从缓冲区读数据,则首先从缓冲区队列取出PO,读指针pRead指向p0,然后不断从p0读取数据;当PO存储满且被读完时,线程I开始下载第11个片段,片段号为10 ;同时从缓存区队列取出Pl,读指针PRead指向pi。如此循环往复,不断从服务器下载分段数据,同时客户端不断从缓存区队列读取媒体数据播放,直到下载播放完毕整个媒体文件。
[0035]以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。
【权利要求】
1.一种网络流媒体播放中的多线程下载方法,包括当客户端点击可播放链接,根据该链接的源URL向服务器发送连接请求,在请求成功并接收响应头域后,其特征在于,所述多线程下载方法还包括: 从响应头域获取对应的需要下载的文件的下载信息,从下载信息中判断该文件的下载是否支持断点续传,若不支持,则直接创建单个线程下载数据,否则,根据该文件的长度,将该文件划分为相同大小的文件片段,同时,创建对应用于下载的多个线程,对该文件进行分段分别下载。
2.根据权利要求1所述的多线程下载方法,其特征在于,所述将该文件划分为相同大小的文件片段时,根据预先设置的文件片段的大小对该文件进行划分,且被划分后的文件片段均具有依次对应的段号。
3.根据权利要求2所述的多线程下载方法,其特征在于,所述创建对应用于下载的多个线程时,分别为每个线程分配对应的缓存空间,对该文件进行分段分别下载时,多个线程按照段号依次分配下载对应的文件片段,并将下载的文件片段的数据存储至对应的缓存空间。
4.根据权利要求3所述的多线程下载方法,其特征在于,所述每个线程的缓存空间的大小与设置的文件片段的大小相同,且所述为每个线程分配的缓存空间通过一个缓存区队列进行管理,且缓存区队列按照段号为每个缓存空间分配对应的存储地址。
5.根据权利要求4所述的多线程下载方法,其特征在于,所述缓存区队列对外提供有统一的接口,用于在播放时通过该接口从缓存区队列读取数据供解封装及解码播放。
6.根据权利要求4或5所述的多线程下载方法,其特征在于,所述多线程下载方法还包括: 当需要播放视频时,则根据存储地址依次从缓存区队列中读取缓存空间存储的文件片段,从读指针指向第一个缓存空间开始,首先判断该缓存空间是否可以读取,若可以,则不断从该缓存空间读取对应的文件片段数据,当该存储空间存储满且其中的数据被读取完时,该存储空间对应的线程在判断整个文件没有下载完时,则从服务器中下载该文件的另外一个文件片段,与此同时,读指针指向下一个缓存空间并开始读取对应的数据。
7.—种网络流媒体播放中的多线程下载装置,其特征在于,所述多线程下载装置采用权利要求6所述的多线程下载方法,具体包括: 检测模块,用于检测所要连接的URL源是否支持断点续传,若支持则采用多线程下载,否则采用单线程下载; 配置模块,用于配置多线程下载时的固定参数,包括创建的用于下载的线程个数、用于对下载的文件进行段号划分的对应文件片段的大小、为每个线程分配的缓存空间的大小以及启动多线程下载时允许的最小文件的大小,其中,对下载的文件进行段号划分的对应文件片段的大小、为每个线程分配的缓存空间的大小以及启动多线程下载时允许的最小文件的大小中,二者的大小相等; 缓存区管理模块,用于通过一个缓存区队列管理多线程的每个缓存空间; 全局管理模块,用于调用以上各模块对需要下载的文件进行下载,并在需要播放视频时,根据播放进度记录对应的播放信息。
8.一种下载设备,其特征在于,所述下载设备安装有权利要求7所述的多线程下载装 置。
【文档编号】H04N21/433GK104506950SQ201410853542
【公开日】2015年4月8日 申请日期:2014年12月29日 优先权日:2014年12月29日
【发明者】林北洪, 陈小川 申请人:珠海全志科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1