本发明涉及视频播放技术领域,特别是涉及一种P2P带宽节约比在线调节方法、装置及视频网站。
背景技术:
网络视频客户端应用程序(以下简称视频客户端)内部的数据提供模块分别通过P2P和CDN获取数据,在使用P2P的情况下,带宽节约比和流畅率是视频客户端的两大指标。
从节省带宽的角度来说,带宽节约比越大越好,但是终端用户之间的直接数据连接具有不可控、不稳定、速率低等特点,在数据速率不能保证的情况下保证高带宽节约比会造成播放流畅率下降,影响用户体验。而与CDN的连接可以保证相对稳定的数据速率,因此为了既节省CDN带宽成本,又做到保证播放器的流畅率,需要P2P模块内部制定一种平衡策略来调节带宽节约比和流畅率的关系。
另外一方面,平衡策略的制定需要权衡多方面的因素,包括业务类型、网络状态、视频热度、产品策略等,实际上应该处于动态变化之中。传统的P2P系统在修改相应策略时主要通过以上因素以及一些经验数据,修改客户端重新发布新版本,版本的覆盖周期较长,响应变化的速度较慢,修改策略的成本较高。
对于P2P技术,目前互联网各大视频公司为了节省CDN的带宽成本,无一例外的在视频客户端都使用了P2P技术,而且各家使用的P2P技术都比较接近,例如爱奇艺、新浪、腾讯等视频客户端,但是其调节P2P和CDN使用的逻辑基本是靠经验数据固化在客户端内部。客户端从服务器端获取的控制数据一般只是一些xml、jason、ini等格式的配置,很难在这些配置上实现一些复杂的逻辑。
技术实现要素:
本发明的目的是针对现有技术中存在的技术缺陷,而提供一种P2P带宽节约比在线调节方法。
为实现本发明的目的所采用的技术方案是:
一种P2P带宽节约比在线调节方法,包括,
在客户端启动时自服务器端下载状态机脚本并加载到内存,
根据业务类型通过脚本接口创建对应类型的有限状态机,
周期性调用脚本的状态转换接口,传入当前的下载参数、状态,以计算下一时刻应该采用的下载模式。
所述的脚本为LUA脚本,所述的有限状态机包括播放状态机、下载状态机和预加载状态机。
每次任务开始、状态切换、任务结束,都将当前状态的上下文数据上报给分析服务器。
分析服务器上使用Linux Shell脚本周期性的收集、过滤、分析一段时间内的原始数据,得到这段时间内的各个指标,如果指标异常则分析各个元数据以确定问题。
客户端在运行过程中周期性的检查服务器端的脚本的信息,如果需要更新则及时更新以迅速响应服务器端的变化。
一种P2P带宽节约比在线调节装置,包括,
脚本下载模块,用以在客户端启动时自服务器端下载状态机脚本并加载到内存,
有限状态机创建模块,用以根据业务类型通过脚本接口创建对应类型的有限状态机,
状态机调整模块,用以周期性调用脚本的状态转换接口,传入当前的下载参数、状态,以计算下一时刻应该采用的下载模式。
还包括状态上报模块,用以每次任务开始、状态切换、任务结束,都将当前状态的上下文数据上报给分析服务器。
还包括分析模块,设置在分析服务器上用以使用Linux Shell脚本周期性的收集、过滤、分析一段时间内的原始数据,得到这段时间内的各个指标,如果指标异常则分析各个元数据以确定问题。
还包括监测模块,客户端在运行过程中用以周期性的检查服务器端的脚本的信息,如果需要更新则及时更新以迅速响应服务器端的变化。
一种具有所述的P2P带宽节约比在线调节装置的视频网站。
与现有技术相比,本发明的有益效果是:
本发明公开了一种在线修改平衡策略的方法,能让客户端无需升级尽快更新策略,尽快响应变化,以保证带宽节约比和流畅率达到最优的平衡。将视频客户端内部调节带宽节约比和流畅率的平衡策略中公共的逻辑框架提取出来,以有限状态机描述,并实现调用状态机的统一接口,同时用LUA语言实现成一个有限状态机脚本。由于脚本部署在服务端,这部分逻辑可以在线修正,从而解决了版本迭代、覆盖周期长,策略修改成本高的问题。
附图说明
图1所示为本发明的P2P带宽节约比在线调节方法的流程示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
术语解释
CDN:Content Delivery Network,内容分发网络,由若干存储、控制结点组成的网络,视频、图片等内容存储在CDN中,通过实时监测网络状态,如流量、各结点之间的连接、结点负载、与用户的距离等,计算出向用户提供服务的最优的结点,CDN的机房带宽是内容提供商的主要成本之一。
P2P:Peer To Peer,点到点的数据通信技术,终端用户通过建立点到点的数据连接从其他终端用户处获取其已从CDN下载到本地缓存的数据,从而降低内容提供商的带宽成本。
带宽节约比:从P2P下载的数据量与总下载数据量(P2P+CDN)的比例,作为P2P系统节省带宽效率的一个指标。
流畅率:视频客户端流畅播放的次数与总播放次数的比例,是视频客户端质量的重要指标,如果P2P系统作为数据提供者,流畅率则体现P2P系统提供数据的速率以及连续性,也是P2P系统质量的重要指标,与带宽节约比相互制约。
FSM:Finate State Machine,有限状态机,进程任意时刻都处于确定的、有限的几个状态之内,在发生某个事件后,进程将执行某个操作,根据这个操作的结果,进程将从当前状态切换到指定的状态。基于FSM的程序状态转换更为确定、清晰,有较好的健壮性。
LUA:一种跨平台解释型脚本语言,可以嵌入各种语言内部,特点是体积小,性能高。
如图所示,本发明的P2P带宽节约比在线调节方法,包括,
步骤101,在客户端启动时自服务器端下载状态机LUA脚本并加载到内存,
本发明通过采用嵌入式的脚本语言LUA,解决了需要动态更新的程序逻辑的快速迭代问题。LUA具有引擎体积小、性能高、容易与其他高级语言互相调用等优点,具体的LUA脚本编写时首先定义LUA状态机调用接口,包括,
初始化接口:加载LUA解释器引擎;反初始化接口:卸载LUA解释器引擎;加解密接口:使用xxtea算法加解密,增加安全性;解压缩接口:使用quicklz算法压缩解压缩,减少网络流量;加载LUA脚本接口:加载解密、解压后的LUA串到LUA解释器,同时注册上层回调到LUA层,用于LUA获取上层的参数;创建状态机接口:根据指定业务类型创建播放、下载等类型的LUA状态机;删除状态机接口:删除之前创建的状态机;状态机状态转换接口:输入事件,执行一次状态转换,计算下个状态;状态机查询接口:查询状态机内部指定的参数、状态。
对LUA来说,简单实现3个状态机的方法是实现3个表,对应3种不同的业务类型。每个表添加4个函数对象,分别对应4个状态下的状态转换函数,每种状态机需要实现自己的状态转换函数。函数对象的Key为其当前状态,参数为输入事件。由于输入事件包含多个参数,也实现为一个表,其Key为参数名,Value为参数值。
编写完脚本后压缩、加密LUA脚本并部署到配置服务器,具体地,编写好LUA脚本之后,先用quicklz压缩算法LUA脚本,再用xxtea加密算法加密,保证脚本的安全性和轻量,压缩后的文件之后只有几K字节,保证下载过程迅速。
在本步骤中,使用版本号来控制客户端的LUA脚本的版本,客户端启动后先从配置服务器返回的配置信息中获取LUA脚本的版本号,与本地版本号比较,如果版本需要更新,那么从配置服务器返回的地址直接下载LUA状态机脚本到本地,然后调用LUA加载接口,将脚本加载到内存。
同时,视频客户端在运行过程中周期性的检查服务器端的LUA脚本的版本号,如果需要更新则及时更新,以迅速响应服务器端的变化。
步骤102,根据业务类型通过脚本接口创建对应类型的有限状态机,
本发明有限状态机包含4个状态:1)初始状态、2)单独使用P2P、3)单独使用CDN、4)同时使用P2P和CDN。输入事件的参数包括P2P下载速度、CDN下载速度、已经向播放器推送的数据量、推送给播放器的数据率、视频文件码率、P2P活跃种子数、播放器已经缓存的视频时长、播放准备时间(广告时间)、本状态已经维持的时间等,状态机根据当前的状态、以上参数的值以及设定的阈值进行运算,决定下一个状态是什么,通过控制P2P状态和CDN状态的分布时间,从而达到调节带宽节约比和流畅率的目的。
对视频客户端来说,通常主要有3个业务:播放、下载、预加载,这3个业务对P2P和CDN的使用情况不尽相同,体现在其状态转换动作的不同,因此需要定义三个不同类型的状态机。
播放状态机:需要尽可能保证连续上报播放器的速度,以保证流畅的播放速度和用户体验,可能需要牺牲带宽节约比来换取流畅率;
下载状态机:需要尽可能保证下载速度,带宽节约比是关键指标,在保证一定速度的情况下,优先使用P2P;
预加载状态机:播放当前视频时预加载下一视频,对速度的要求不高,带宽节约比是主要指标,尽量使用P2P。
本步骤中,视频客户端在启动播放或者下载任务时,根据业务类型调用LUA脚本接口创建不同类型的状态机,每种不同的状态机对应不同的状态转换函数,在每个状态转换函数中,将针对输入事件参数的值做出分析来决定下一个状态:
从初始状态可能进入P2P状态、CDN状态或P2P+CDN状态;
从P2P状态可能进入CDN或P2P+CDN状态;
从CDN状态可能进入P2P状态或P2P+CDN状态;
从P2P+CDN状态可能进入P2P状态或者CDN状态。
例如如果当前处于P2P状态,但是活动种子数已经变得极少,那么需要将下个状态置成CDN,避免下载速度降低到阈值以下。在这些状态转换函数中可以针对输入参数进行比较复杂的逻辑,充分利用LUA脚本的灵活性。
步骤103,周期性调用脚本的状态转换接口,传入当前的下载参数、状态,以计算下一时刻应该采用的下载模式。
如果是P2P状态,则只采用P2P下载,如果是CDN模式,则只采用HTTP下载,如果是P2P+CDN,则同时采用两者混合下载,达到控制带宽节约比和流畅率的目的。
本发明将视频客户端内部调节P2P和CDN使用的复杂逻辑脚本化,部署在服务器上,以使这部分逻辑能够像页面播放器一样快速更新,从而实现对带宽节约比和流畅率的在线自动调节。
优选地,还包括上报统计数据步骤104,在无论哪种类型的下载过程中,每次任务开始、状态切换、任务结束,都将当前状态的上下文数据上报给分析服务器,分析服务器将对这些原始数据对状态机调整策略的有效性做出分析。
优选地,还包括分析服务器分析统计数据、反馈步骤,分析服务器上使用Linux Shell脚本周期性的收集、过滤、分析一段时间内的原始数据,得到这段时间内的各个指标,包括带宽节约比、流畅率指标等,如果指标异常,那么分析各个元数据以确定问题。通过不断分析、尝试,反馈到状态机的转换逻辑中,使得带宽节约比和流畅率达到一个最佳平衡。
本发明使用有限状态机定义了调节P2P、CDN使用策略的框架,并定义了统一接口;使用部署在服务端的LUA脚本实现有限状态机,从而达到在线调节的目的;同时通过对上报数据的分析修改LUA状态机脚本,实现了闭环反馈。
同时,本发明还公开了一种P2P带宽节约比在线调节装置,包括,
脚本下载模块,用以在客户端启动时自服务器端下载状态机脚本并加载到内存,
有限状态机创建模块,用以根据业务类型通过脚本接口创建对应类型的有限状态机,当业务类型,如暂停或者播放状态发生改变时,回根据脚本接口接收该改变并调整有限状态机的类型,保证对应的切换函数得以运行,
状态机调整模块,用以周期性调用脚本的状态转换接口,传入当前的下载参数、状态,以计算下一时刻应该采用的下载模式。
括状态上报模块,用以每次任务开始、状态切换、任务结束,都将当前状态的上下文数据上报给分析服务器。
分析模块,设置在分析服务器上用以使用Linux Shell脚本周期性的收集、过滤、分析一段时间内的原始数据,得到这段时间内的各个指标,如果指标异常则分析各个元数据以确定问题。
监测模块,客户端在运行过程中用以周期性的检查服务器端的脚本的信息,如果需要更新则及时更新以迅速响应服务器端的变化。
通过模块化设置,构建便利,而且各模块配合协同,能确保实现脚本下载、根据状态运行并切换有限状态机,保证在每个使用状态下得到最优的切换模式,保证客户端使用感受有效提高宽带节约比。
同时本发明还公开了一种具有所述的P2P带宽节约比在线调节装置的视频网站。通过使用本技术方案,视频客户端可以在线调节视频客户端内部的P2P、CDN的使用策略,而不需要发布新版本,将版本的迭代变成服务端策略的迭代,从而可以更为灵活的调整、控制P2P的使用,达到迅速调节、优化带宽节约比、流畅率的目的。服务器端可实时接收到客户端反馈,为进一步在线优化提供条件。
以上所述仅是本发明的优选实施方式,应当指出的是,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。