发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种加速网络视频下载的方法和装置。
依据本发明的一个方面,提供了一种加速网络视频下载的方法,该方法包括:
将待下载网络视频文件码流进行分片并按照播放顺序从前到后放入下载队列中,其中,下载队列中靠前的分片较小,靠后的分片较大;
对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载。
可选地,所述对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载包括:
对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成;
或者,对于所述至少一个分片中的每个分片,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成。
可选地,所述对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载包括:
对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载;或者,对于所述至少一个分片中的每个分片,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载;
当点对点下载的速度大于点对服务器下载的速度且点对点下载的速度达到一定的阈值时,关闭点对服务器的方式,并采用点对点的方式完成剩余部分的下载。
可选地,该方法进一步包括:采用多线程的方式对多个分片同时进行下载。
可选地,所述采用多线程的方式对多个分片同时进行下载包括:
在下载过程中增加线程进行下载;
或者,
在下载过程中,如果下载速度已超过视频码率的预设倍数,则维持线程数量不变或减少线程数量。
可选地,在将待下载的视频文件码流进行分片并按照播放顺序从前到后放入下载队列中之前,该方法进一步包括:
分析浏览器的网络视频下载请求,判断预先保存的多个网络视频下载协议中是否存在支持该网络视频下载请求的协议;
如果存在,则对该网络视频下载请求所对应的待下载网络视频文件执行所述分片及下载的过程,并且根据所支持的网络视频下载协议完成下载。
依据本发明的一个方面,提供了一种加速网络视频下载的装置,该装置包括:
分片单元,适于将待下载网络视频文件码流进行分片并按照播放顺序从前到后放入下载队列中,其中,下载队列中靠前的分片较小,靠后的分片较大;
下载单元,适于对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载。
可选地,所述下载单元,适于对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成;或者,适于对于所述至少一个分片中的每个分片,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成。
可选地,所述下载单元,适于对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,或者,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载;当点对点下载的速度大于点对服务器下载的速度且点对点下载的速度达到一定的阈值时,关闭点对服务器的方式,并采用点对点的方式完成剩余部分的下载。
可选地,所述下载单元,进一步适于采用多线程的方式对多个分片同时进行下载。
可选地,所述下载单元,适于在下载过程中增加线程进行下载,或者,在下载过程中,如果下载速度已超过视频码率的预设倍数,则维持线程数量不变或减少线程数量。
可选地,该装置进一步包括:
下载分析单元,适于分析浏览器的网络视频下载请求,判断预先保存的多个网络视频下载协议中是否存在支持该网络视频下载请求的协议;如果存在,则通知所述分片单元进行分片处理,以及通知所述下载单元根据该支持的网络视频下载协议进行下载。
根据本发明采用的分片方式可以保证的小的分片可以先下载并且能够很快下载完,这样可以保证视频一边播放的同时,去下载队列中的后面的大的视频分片,并且按照预设策略调度点对服务器和点对点的方式进行下载,即使在视频服务器的网络条件较差的情况下,也能由点对点方式进行下载,以达到加速下载的目的。因此本发明的技术方案能够加速在线视频的下载,缓冲足够的视频数据,保证流畅播放。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络连接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
为了方便理解,先对本申请中涉及的两个技术术语进行说明:
点对服务器方式:P2S(Peer to Server),用户对服务器;
点对点方式:P2P(Peer to Peer),对等网络。
现有采用P2P技术下载文件的方法,通常包括如下步骤:
步骤A1、客户端A开始针对某文件资源的下载任务;
步骤A2、客户端A得到P2P服务器的IP(网络之间互连的协议,Internet Protocol)列表;
步骤A3、依据所述P2P服务器的IP列表,客户端A随机选择其中一台P2P服务器进行登陆;
步骤A4、该客户端A向该台P2P服务器发送携带该文件资源信息的查询请求;
步骤A5、该台P2P服务器向客户端A返回该文件资源的种子节点;
步骤A6、客户端A与所述该文件资源的种子节点连接,进行该文件资源的分享。
现有的视频加速器采用的加速方法单一,采用多线程从视频服务器按照上述的下载方式进行加速下载,这种方式在本地与视频服务器之间的网络条件有限的情况下其加速效果比较差。
图1示出了根据本发明一个实施例的一种加速网络视频下载的方法的流程图。如图1所示,该方法包括:
步骤S110,将待下载网络视频文件码流进行分片并按照播放顺序从前到后放入下载队列中,其中,下载队列中靠前的分片较小,靠后的分片较大。
本步骤中,将待下载的网络视频文件码流按照播放顺序从前到后进行分片,在下载队列中靠前的分片较小(例如几十k,依次到上百k,几百k等),靠后的分片较大(1M到2M),这样可以保证的小的分片可以先下载并且能够很快下载完,这样可以保证视频一边播放的同时,去下载队列中的后面的大的视频分片。
具体来说,用一个队列(如采用先进先出FIFO的数据结构)存放分片,然后依次从队列的前端取出分片进行下载。比如一个视频文件被分成如下四块分片:1M、2M、3M和4M,那么用一个队列存放就是先放入1M,再放入2M,再放入3M,最后放入4M,下载的时候则是先放入的先下载,即按照1M、2M、3M和4M的顺序依次进行下载。就分片的大小来说,1M最小,向后依次增大,4M最大。
步骤S120,对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载。在选择了至少一个P2P服务器和P2S服务器后,可获取文件资源的种子信息,例如,该客户端可首先向所选择P2P服务器和P2S服务器发送携带该文件资源信息的种子查询请求,然后,接收所选择P2P服务器和P2S服务器各自返回的文件资源的种子信息。
本步骤中结合点对服务器和点对点的方式进行下载,即使在视频服务器的网络条件较差的情况下,也能由点对点方式进行下载,以达到加速下载的目的。
本发明实施例所示图1所示的方法,能够解决网络条件较差的用户观看在线视频经常缓冲不流畅的问题,加速在线视频的下载,缓冲足够的视频数据,保证流畅播放。
图2示出了根据本发明一个实施例的按照预设策略调度点对服务器的方式和点对点的方式进行下载的网络环境示意图。如图2所示,各个用户的PC形成对等网络,一个PC能以点对点方式从其他PC下载视频资源,且各个PC能够访问视频服务器。
在本发明中,按照预设策略调度P2S和P2P的下载策略进行下载。P2S方式从服务器下载,服务器的数据比较稳定,但是会受限于带宽。P2P是和节点之间交互进行下载,不太稳定,但可以节省带宽,在服务器速度不好的时候,可以作为补充下载,当节点足够多时,速度甚至远超服务器。例如,对于一个大小为100K的分片,使用P2S从第1个字节开始往后下载,使用P2P从100K的最后一个字节开始往前下载,如果两者速度相同,最后会在第50K个字节处相遇,拼成一个完整的100K分片,这样一个分片的下载就完成了。
P2S的下载方式就是用视频请求的url,例如http://1.2.3.4/a.flv这样的链接去向视频服务器请求数据。P2P的具体下载方式如下:本机向P2P资源服务器查询当前视频资源,资源服务器根据在线节点的情况给出一部分节点信息,然后本机一一去连接这些节点请求视频数据。比如,本机向资源服务器查询视频a.flv的资源,资源服务器查到了P1、P2、P3、P4和P5这五个节点都有a.flv的资源,资源服务器随机挑选出P2、P3和P5这三个节点反馈给本机,本机根据反馈分别连接P2、P3和P5这三个节点,请求分片数据。
在接收到客户端的视频请求的url时,可以提供与请求发起客户端处于相同IP地址段和相同网络运营商的资源提供端也即种子节点,该客户端根据自身所属IP地址段,从所述P2P服务器和/或P2S服务器的IP列表中选择网络连接最佳的一个资源服务器。
具体的,从IP地址段信息库中查询客户端所属IP地址段的物理所在地和网络运营商,其中,所述IP地址段信息库包括多个IP地址段以及每个IP地址段对应的物理所在地和网络运营商;
针对所述P2P服务器和/或P2S服务器的IP列表中各P2P服务器和/或P2S服务器的IP地址,该客户端确定相应的所属IP地址段,并从所述IP地址段信息库中查询各所属IP地址段的物理所在地和网络运营商;
依据该客户端所属IP地址段和各P2P服务器和/或P2S服务器和的IP地址的物理所在地和网络运营商,从所述P2P服务器和/或P2S服务器的IP列表中选择物理位置最临近且处于相同网络运营商的一个P2P服务器和/或P2S服务器的IP地址。
在本发明实施例中,在实际下载过程中,P2S的下载速度和P2P的下载速度不可能完全相同,分两种情况:
(a)当检测到网络环境中P2S速度较快,P2P速度较慢的情况下。此时,当下载的视频源较为冷门的时候,P2P的速度不会很好,这样情况下让P2S一直下载,P2P则可以作为次要的下载服务器进行资源下载。
对于一个视频的至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成;或者,对于一个视频的至少一个分片中的每个分片,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成。
仍以100K大小的分片为例,采用P2S方式从起始位置开始下载,采用P2P方式从结尾位置开始下载,则P2S可能会下完前面80K的数据,而后面20K的数据由P2P下载完成,如图3所示。
(b)当检测到在网络环境中P2S速度较慢,P2P速度较快的情况下。当下载的视频源非常热门时,会找到大量的P2P节点,这时P2P的速度会非常好,甚至于超过P2S的速度。当P2P的速度达到一定的阈值时,调整关闭P2S下载,只采用P2P下载,以减少服务器端的压力。
具体地对于一个视频的至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,或者,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载;当点对点下载的速度大于点对服务器下载的速度且点对点下载的速度达到一定的阈值时,关闭点对服务器的方式,并采用点对点的方式完成剩余部分的下载。
在本发明的一个实施例中,P2P下载速度的阈值采用视频的码率作为指标,视频的码率一般用于衡量视频的清晰度,根据经验,当视频的下载速度大于2倍的视频的码率值时,可以保证视频流畅播放,因此P2P下载速度的阈值可采用码率的2倍或者3倍。
例如,采用P2S方式从起始位置开始下载,采用P2P方式从结尾位置开始下载,当P2P的下载速度很好已达到预设阈值时,停止P2S,P2P从P2S已完成的地方开始从前往后下载,保证可以节省服务器的资源。还是以100K的分片为例,P2S从前往后下载了10K,P2P从后往前下载到了20K,这时发现P2P速度已经优于P2S,于是停掉P2S下载,让P2P从10K的位置开始,完成剩下部分的下载,如图4所示。
一个分片的起始位置和结尾位置在进行分片的时候就已经确定好的,例如,某一个分片是从视频的第2M开始,长度为1M,那么该分片的起始位置是该视频的2M位置处,该分片的结束位置就是该视频的3M位置处。
在本发明的一个实施例中,采用多线程的方式对视频的多个分片同时进行下载。即采用多线程的方式进行调度,同时可以创建多个线程让多个分片同时下载。
例如采用两个线程(线程11和线程12)用P2S方式从起始位置开始下载,再采用两个线程(线程21和22)用P2P方式从结尾位置开始下载,其中,初始时线程11下载第一个分片,线程12下载第二个分片,先下载完的线程11或线程12再去下载第三个分片,以此类推;同样线程21下载最后一个分片,线程22下载倒数第二个分片,调度先完成下载的线程21或22接着下载倒数地三个分片,以此类推。还可以根据需要增减线程,如果需要增加一个线程,则开启一个新的线程,并调度其参加下载工作,如果需要减少一个线程,则当该线程完成一个分片的下载后就不再调度其进行新分片的下载,就会少一个工作线程。
但是由于视频码流的时序性要求,并不是线程数越多就越好,在发明的一个实施例中采用动态调整线程数的策略:在下载过程中增加线程进行下载;或者,在下载过程中,如果下载速度已超过视频码率的预设倍数,则维持线程数量不变或减少线程数量。一般根据下载速度与视频码率之间的关系调整线程的数量。视频码率是每秒播放的视频数据量,不同清晰度的视频文件的视频码率不同。
例如,最开始的时候只启动两个线程去下载,让前面的分片能够快速下载完成,当完成多个分片后,开始调整增加线程数,从三线程到四线程甚至到五线程。同时监控了下载速度,当下载速度已经超过视频码率的两三倍之后,再增加线程数就用处不大了,可以维持当前的线程数进行下载。如果下载速度非常好,甚至可以减少线程数,从四线程到三线程到两线程,这样既可以保证视频的流程播放,又不会过多的占用网络资源。
现有的视频网站的视频加速器都是专用的,如爱酷只能加速优酷网站的视频,飞速土豆只能加速土豆网的视频,相互不兼容,因此本申请给出了如下方案:
在本发明的一个实施例中,将待下载的视频文件码流进行分片并按照播放顺序从前到后放入下载队列中之前,该方法进一步包括:分析浏览器的网络视频下载请求,判断预先保存的多个网络视频下载协议中是否存在支持该网络视频下载请求的协议;如果存在,则对该网络视频下载请求所对应的待下载网络视频文件执行所述分片及下载的过程,并且根据所支持的网络视频下载协议完成下载。即在该实施例中,由于不同的视频网站所采用的视频下载协议不同,为了能够支持下载不同视频网站的视频,预先搜集并在服务器中保存这些视频网站所采用的多个不同的网络视频下载协议。
上述的多个网络视频下载协议包括但不限于如下协议:Http下载协议,UDP下载协议。
图5示出了根据本发明一个实施例的一种加速网络视频下载的装置的结构图。如图5所示,该加速网络视频下载的装置500包括:分片单元510和下载单元520。
分片单元510,适于将待下载网络视频文件码流进行分片并按照播放顺序从前到后放入下载队列中,其中,下载队列中靠前的分片较小,靠后的分片较大;
下载单元520,适于对于下载队列中的至少一个分片,按照预设策略调度点对服务器的方式和点对点的方式进行下载。
在本发明的一个实施例中,下载单元520,适于对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成;或者,适于对于所述至少一个分片中的每个分片,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载,直至将该分片的数据全部下载完成。
在本发明的一个实施例中,下载单元520,适于对于所述至少一个分片中的每个分片,采用点对服务器的方式从该分片的起始位置开始向后下载,采用点对点的方式从该分片的结尾位置开始向前下载,或者,采用点对点的方式从该分片的起始位置开始向后下载,采用点对服务器的方式从该分片的结尾位置开始向前下载;当点对点下载的速度大于点对服务器下载的速度且点对点下载的速度达到一定的阈值时,关闭点对服务器的方式,并采用点对点的方式完成剩余部分的下载。
在本发明的一个实施例中,下载单元520,进一步适于采用多线程的方式对多个分片同时进行下载。进一步地,下载单元520适于在下载过程中增加线程进行下载,或者,在下载过程中,如果下载速度已超过视频码率的预设倍数,则维持线程数量不变或减少线程数量。
图5所示的装置所采用的分片方式可以保证的小的分片可以先下载并且能够很快下载完,这样可以保证视频一边播放的同时,去下载队列中的后面的大的视频分片,并且按照预设策略调度点对服务器和点对点的方式进行下载,即使在视频服务器的网络条件较差的情况下,也能由点对点方式进行下载,以达到加速下载的目的。
图6示出了根据本发明一个实施例的一种加速网络视频下载的装置的结构图。如图6所示,该加速网络视频下载的装置600包括:分片单元610、下载单元620和下载分析单元630。其中,分片单元610与图5中的分片单元510相同,下载单元620与图5的中下载单元520相同
下载分析单元630,适于分析浏览器的网络视频下载请求,判断预先保存的多个网络视频下载协议中是否存在支持该网络视频下载请求的协议;如果存在,则通知分片单元610进行分片处理,以及通知下载单元620根据该支持的网络视频下载协议进行下载。
图6所示的装置所采用的分片方式可以保证的小的分片可以先下载并且能够很快下载完,这样可以保证视频一边播放的同时,去下载队列中的后面的大的视频分片,并且按照预设策略调度点对服务器和点对点的方式进行下载,即使在视频服务器的网络条件较差的情况下,也能由点对点方式进行下载,以达到加速下载的目的。并且图6所示的装置能够对采用不同视频下载协议的多个视频网站的视频的下载进行加速。
本发明实施例中,所述下载单元,适于在下载过程中增加线程进行下载,或者,在下载过程中,如果下载速度已超过视频码率的预设倍数,则维持线程数量不变或减少线程数量。
本发明实施例中所述的装置,其中,该装置进一步包括:
下载分析单元,适于分析浏览器的网络视频下载请求,判断预先保存的多个网络视频下载协议中是否存在支持该网络视频下载请求的协议;如果存在,则通知所述分片单元进行分片处理,以及通知所述下载单元根据该支持的网络视频下载协议进行下载。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的加速网络视频下载的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。