发明内容
鉴于现有技术中存在的问题,本发明的目的在于提供一种基于统计的网络视频分发流量控制系统,其特征在于包括:
位于网络服务提供商端的索引服务器(1)和内容服务器(2),其中:
索引服务器(1),用于存储并分发包括网络视频观看时长分布信息的网络视频元数据信息;
内容服务器(2),用于存储并分发网络视频内容;
安装在用户本地机上的本地播放器(3),其通过互联网来访问索引服务器(1)和内容服务器(2),并包括:索引服务组件(31)、数据内容服务模块(32)和网络视频编解码组件(33);其中
索引服务组件(31),用来与索引服务器(1)进行通信,向索引服务器(1)请求包括网络视频观看时长分布信息的网络视频元数据信息,根据所述网络视频观看时长分布信息确定下载网络视频的时机及下载的网络视频分块范围,然后将确定的结果和相应网络视频的地址传送给数据内容服务模块(32);
数据内容服务模块(32),用于根据确定的结果和相应网络视频的地址向内容服务器(2)请求下载特定范围的网络视频文件分块;
网络视频编解码组件(33),用于从数据内容服务模块(32)读取网络视频数据,并进行编解码,播放网络视频。
进一步,本发明所述的基于统计的网络视频分发流量控制的系统,其特征在于所述数据内容服务模块(32)包括:
Socket下载组件(321),用于根据索引服务组件(31)传送来的确定结果和相应网络视频的地址向内容服务器(2)请求特定范围的网络视频文件分块;
缓存组件(322),用于存储并管理下载到的网络视频数据。
进一步,本发明所述的基于统计的网络视频分发流量控制的系统,其特征在于所述元数据信息还包括网络视频时长、字节数、网络视频文件的地址。
进一步,本发明所述的基于统计的网络视频分发流量控制的系统,其特征在于索引服务组件(3)还定时向索引服务器(1)汇报当前网络视频的观看时长。
此外,本发明还提供一种基于统计的网络视频分发流量控制方法,其特征在于包括如下步骤:
步骤1、将网络视频ID传入本地播放器中的索引服务组件;
步骤2、索引服务组件通过网络视频ID向索引服务器请求网络视频的元数据信息;
步骤3、索引服务器根据网络视频ID,向索引服务组件返回包含网络视频观看时长分布信息的网络视频元数据信息;
步骤4、索引服务组件得到索引服务器返回的网络视频元数据信息之后,根 据所述网络视频观看时长分布信息决定下载网络视频的时机及下载的网络视频分块范围,并将确定的结果和相应网络视频的地址传送给数据内容服务模块的Socket下载组件,以便请求特定范围的网络视频文件分块;
步骤5、Socket下载组件依据获得的文件地址及分块范围从内容服务器下载数据,并将其放入缓存组件进行管理
步骤6、网络视频编解码组件从缓存组件中取得下载的网络视频数据进行编解码,从而实现播放。
进一步,本发明所述的基于统计的网络视频分发流量控制方法,其特征在于在网络视频播放过程中,本地播放器的索引服务组件会定时向索引服务器汇报当前的网络视频播放时长,索引服务器基于该播放时长来生成网络视频观看时长分布数据。
进一步,本发明所述的基于统计的网络视频分发流量控制的方法,其特征在于所述元数据信息还包括网络视频时长、字节数、网络视频文件的地址。
本发明根据统计的网络视频观看时长分布信息确定下载网络视频的时机及下载的网络视频分块范围,实现基于观看时长分布统计信息进行网络视频分发流量进行控制,利用网络视频的观看时长分布信息,合理确定每次下载的区间,从而节省了网络视频服务商的带宽资源和用户自己的带宽资源,大幅度减少网络视频数据的无效下载。
具体实施方式
为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施例对本发明作进一步详细的说明:
图1是本发明基于统计的网络视频分发流量控制的系统的整体架构图;如图1所示,本发明基于统计的网络视频分发流量控制的系统包括:索引服务器1、内容服务器2和本地播放器3;
索引服务器1和内容服务器2位于网络服务提供商端,其中:
索引服务器1,用于存储并分发网络视频元数据信息,通常,元数据信息包括网络视频时长、字节数、网络视频文件的地址等,然而,在本专利中元数据信息特别地设置为还包括网络视频的观看时长分布信息(有关分布信息的生成过程将在后面详细描述);索引服务器1采用JSON格式(todo later)向索引服务组件31返回网络视频的元数据信息,包括网络视频id,时长,字节数;特别地,要求返回观看时长分布信息。JSON规范:(请参见http://www.json.org/JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition-December 1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
内容服务器2,用于存储并分发网络视频内容;
本地播放器3是安装在用户本地机上的播放器,其通过互联网来访问索引服务器1和内容服务器2;其具体包括:索引服务组件31、数据内容服务模块32和网络视频编解码组件33;其中
索引服务组件31,用来与索引服务器1进行通信,通过参数video_id向索引服务器请求网络视频的元数据信息(步骤S1),取回包括相应网络视频的网络视频观看时长分布信息的网络视频元数据信息,并根据所述网络视频观看时长分布信息确定下载网络视频的时机及下载的网络视频分块范围,然后将确定的结果和相应网络视频的地址传送给数据内容服务模块32;所述元数据信息还包括网络视频时长,字节数,网络视频文件地址;此外,索引服务组件3还定时向索引服务器1汇报当前网络视频的观看时长(步骤S2);索引服务组件31向索引服务器1汇报当前会话(session)的观看时长信息,步骤S3中返回的时长分布信息正是基于这里的汇报数据统计得到的。索引服务组件3将获得的网络视频元数据信息传送给数据内容服务,以便socket组件321根据网络视频元数据信息从内容服务器2下载网络视频(步骤S4);
数据内容服务模块32包括Socket下载组件321,用于根据索引服务组件31传送来的确定结果和相应网络视频的地址向内容服务器2请求特定范围的文件分块 (步骤S5),例如利用Http Range Request来获取特定范围文件分块;缓存组件322,用于存储并管理下载到的数据;内容服务器2返回对应的网络视频数据内容,存入缓存组件中(步骤S6)。Http Byte Range的介绍,请参考http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html。
网络视频编解码组件33,用于从缓存组件322读取网络视频数据,并进行编解码,,播放网络视频,从而展示给用户(步骤S7);该组件一般都是利用大公司的成熟SDK组件,例如Adobe Flash的网络视频编解码组件。在架构图列出该组件有助于说明架构的完整性。
本专利中元数据信息特别地设置为还包括网络视频的观看时长分布信息,网络视频的观看时长分布信息可以有多种表达方法,下面的方法中使用一种简便直观的办法:分位数统计。具体过程如下:
索引服务器1中只存储最近N个会话(session)的观看时长信息,把这N个会话按照观看时长逆序排列,则容易得到分位数对应的观看时长。
假设N为10,并且当前已经填满10个会话,时长分别为:
会话ID |
观看时长(min) |
会话ID |
观看时长(min) |
1 |
1 |
6 |
20 |
2 |
4 |
7 |
9 |
3 |
3 |
8 |
45 |
4 |
5 |
9 |
22 |
5 |
10 |
10 |
12 |
按照观看时长逆序排列以后,变成:(会话ID不影响最终统计分布结果,为方便,这里不做改变)
会话ID |
观看时长(min) |
会话ID |
观看时长(min) |
1 |
45 |
6 |
9 |
2 |
22 |
7 |
5 |
3 |
20 |
8 |
4 |
4 |
12 |
9 |
3 |
5 |
10 |
10 |
1 |
[0045] 至此,分位数就很容易得到了,在此例中:10%的用户观看时长小于等于1min,20%的用户观看时长小于等于3min,30%的用户观看时长小于等于4min,其余以此类推。
下面,结合图2所示本发明基于观看时长统计进行网络视频分发流量控制方法的流程图来进行描述本发明的工作过程。本发明执行过程包括如下步骤:
步骤1、将网络视频ID传入本地播放器中的索引服务组件;
步骤2、索引服务组件通过网络视频ID向索引服务器请求网络视频的元数据信息,参数为video_id;
步骤3、索引服务器根据video_id,向索引服务组件返回网络视频的元数据信息,包括时长,字节数,文件地址等;特别地,要包含观看时长分布信息;
步骤4、索引服务组件得到索引服务器返回的网络视频元数据信息之后,根据所述网络视频观看时长分布信息决定下载网络视频的时机及下载的网络视频分块范围,并将确定的结果和相应网络视频的地址传送给数据内容服务模块的Socket下载组件,以便请求特定范围的网络视频文件分块;具体下载的时机及下载的分块范围可由索引服务组件来决定,下载时机和下载分块范围与当前网络视频的观看时长分布信息有关(后面将详细描述如何根据网络视频的观看时长分布信息来决定下载的时机和下载的分片范围);
步骤5、Socket下载组件依据获得的文件地址及分块范围从内容服务器下载数据,并将其放入缓存组件进行管理
步骤6、网络视频编解码组件从缓存组件中取得下载的网络视频数据进行编解码,从而实现播放。
在播放过程中,索引服务组件会定时向索引服务器汇报当前的网络视频播放时长,索引服务器正是基于此来生成观看时长分布数据的。
下面描述如何根据索引服务器返回的观看时长分布信息决定下载时机和下载分片范围的策略。
首先,定义两个基本概念:
当前播放点:一般能从网络视频编解码组件中取到播放时间,然后按比例换算成具体的字节偏移位置
包含当前播放点的连续缓存的区间:由于播放过程中,用户会进行拖拽, 这样就会形成多个连续缓存区间。
图3是表示播放器的本地缓存器保存网络视频内容的示意图:
如图3所示,用户从开头播放,下载组件下载数据区间标记为A段;那么包含当前播放点的连续缓存区间是A段;未播放完成时,用户就拖拽到B段开头播放,这会激发下载,将下载组件下载的数据区间标记为B,那么包含当前播放点的连续缓存区间就是B。
基于上述定义,触发下载的条件为:
当前播放点到当前连续缓存区间右端的剩余字节数小于某阈值(记为δ)
接下来考虑激发下载时,对应的数据区间是多少
例如,图中拖拽到B段时,如何确定要下载的区间就是B呢?
包含当前播放点的连续缓存区间右端对应的字节偏移位置记为cur_range_bytes_pos。如果该缓存区间还不存在,那么该值为播放点本身对应的字节偏移位置,用播放点对应的时间,网络视频总时长,网络视频总字节数,按照比例方法求出。
我们可以用一个定时器来计算当前会话实际的观看时长,记为会话时长session_duration
PT(i*10%)表示分位数i*10%对应的观看时长,其中i∈[0,10],整数;PT(0)=0,PT(100%)=网络视频总时长
要确定i值,使得PT((i-1)*10%)≤session_duration<PT(i*10%)。
在获得i值以后,下载区间对应的时间长度就是download_dur_len=PT(i*10%)-session_duration,利用总时长和总字节数,可以用比例方法把该时间长度转换为对应的字节长度download_byte_len
那么初步求出下载的字节区间是:
init_range=[cur_range_bytes_pos,cur_range_bytes_pos+download_byte_len)
至此,只剩下最后一个问题:如果init_range与之前形成的连续缓存区间叠加时,如何处理?
之前已经说明,由于用户拖拽行为的存在,必然会形成多个连续缓存区间,而init_range很有可能覆盖到某些缓存区间的部分,图4表示下载区间覆盖到缓存区间的部分的示意图:
如图4所示,箭头表示当前播放点,当前连续缓存区间为A,圆角矩形部分表示求出的init_range,而A,B表示之前形成的连续缓存区间。如果我们直接下载init_range的话,会造成部分内容重复下载。如果要求完全没有重复下载的话,可以用B的左端减去init_range的右端,记为final_right_pos,从而形成最终的下载字节区间:
final_range=[cur_range_bytes_pos,final_right_pos)
需要说明的是,即使直接采用init_range,也仅仅会造成少部分叠加内容的重复下载,不影响本专利的核心思想的先进性。
前面已经交代清楚如何生成网络视频的观看时长分布信息,并且说明了触发下载的条件以及每次下载确定区间的方法。这里给出一个索引服务器返回元数据信息的例子:
请求参数:video_id
返回JSON结果:
播放器的索引服务组件取到该json数据以后,就可以按照前述办法来激发下载,并确定具体下载区间了。
本发明基于观看时长分布统计信息进行网络视频分发流量进行控制,利用网络视频的观看时长分布信息,合理确定每次下载的区间,节省网络视频服务商的 带宽资源和用户自己的带宽资源,大幅度减少网络视频数据的无效下载,具有很强的工业实用性。
以上是对本发明的优选实施例进行的详细描述,但本领域的普通技术人员应该意识到,在本发明的范围内和精神指导下,各种改进、添加和替换都是可能的,例如调整接口调用顺序、改变消息格式和内容、使用不同的编程语言(如C、C++、Java等)实现等。这些都在本发明的权利要求所限定的保护范围内。