发明内容
鉴于现有技术中存在的问题,本发明的目的在于提供一种网络视频预览系统,其包括:索引服务器,用于存储包括视频文件地址的视频元数据信息并根据视频标识检索视频元数据信息;内容服务器,用于根据所述视频元数据信息获取存储的相对应的视频内容并分发给播放器;预览图服务器,用于分析所述内容服务器存储的视频内容,提取与每一视频内容相对应的由不同时间点关键帧图像,组合构成预览图进行存储;播放器,其响应用户的视频播放请求,通过视频标识向索引服务器请求下载视频内容,同时通过视频标识从预览图服务器下载与所下载视频内容相对应的预览图,用于在用户发起预览请求时,根据请求时间点通过所下载的预览图快速定位展示距请求时间点最近的关键帧图像。
进一步,所述播放器包括:预览服务组件:用于用户发起视频播放请求时,从预览图服务器下载与视频对应的预览图,并获得构成所下载的预览图的各关键帧图像的时间点信息,在用户发起预览请求时,根据请求时间点通过所下载的预览图以及构成该预览图的各关键帧图像的时间点信息快速定位展示距请求时间点最近的关键帧图像;数据内容服务单元,用于通过视频标识所载的参数向内容服务器请求视频内容,并下载缓存所请求的视频内容;视频编解码组件,读取视频内容数据,并进行编解码,进而展示给用户。
进一步,所述数据内容服务单元包括:Socket下载组件,用于向内容服务器请求视频内容下栽;缓存组件,用于存储并管理下载到的视频内容。
进一步,所述预览图服务器中针对每一个视频内容存储了由M张关键帧图像组成的预览图,其中,M从0开始计数,预览图可以分为n列将关键帧图像拼接。
进一步,假设关键帧图像的尺寸设定为宽为w,高为h,假设距离请求点最近的关键帧是第m帧,按照以下算法截取展示给用户的矩形区域:该矩形左上角的坐标为:x=(m%n)×w,y=(m/n)×h,矩形的尺寸:宽为w高为h,其中以第0帧左上角为原点坐标。
本发明还提供了一种网络视频预览方法,其包括以下步骤:步骤(1)用于分析内容服务器存储的视频内容,提取与每一视频内容相对应的由不同时间点关键帧图像,组合构成预览图进行存储在预览图服务器上;步骤(2)响应用户的视频播放请求,通过视频标识向索引服务器请求下载视频内容;同时通过视频标识从预览图服务器下载与所下载视频内容相对应的预览图;步骤(3)索引服务器根据视频标识检索包括视频文件地址的视频元数据信息;步骤(4)内容服务器用于根据所述视频元数据信息获取存储的相对应的视频内容并分发给播放器;步骤(5)响应用户的预览请求,根据请求时间点通过所下载的预览图快速定位展示距请求时间点最近的关键帧图像。
进一步,从预览图服务器下载与视频对应的预览图时,同时获得构成所下载的预览图的各关键帧图像的时间点信息。
进一步,视频编解码组件读取下载在缓存组件中的视频内容数据,并进行编解码,进而展示给用户。
进一步,所述预览图服务器中针对每一个视频内容存储了由M张关键帧图像组成的预览图,其中,M从0开始计数,预览图可以分为n列将关键帧图像拼接。
进一步,假设关键帧图像的尺寸设定为宽为w,高为h,假设距离请求点最近的关键帧是第m帧,按照以下算法截取展示给用户的矩形区域:该矩形左上角的坐标为:x=(m%n)×w,y=(m/n)×h,矩形的尺寸:宽为w高为h,其中以第0帧左上角为原点坐标。
具体实施方式
为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图1所示,预览服务器在后台分析并存储了视频的整张预览图,当用户发出视频播放请求时,播放器的预览服务组件在后台自动下载视频对应的预览图;这样,当用户发起预览请求时,预览服务组件能根据请求时间点快速定位展示给用户的预览小图(即关键帧图像),达到极短延时的预览效果,大幅提升用户预览体验。索引及内容服务器:索引服务器存储有视频元数据信息并根据视频标识来检索视频元数据信息,视频元数据信息包括视频时长,字节数,视频文件的地址,内容服务器根据检索的视频文件地址获取视频内容并分发给数据内容服务单元的缓存组件;预览服务器在后台的具体分析存储如下:分析内容服务器中的视频内容,提取出视频对应的预览图;分析提取如下:借用开源软件库mplayer提供的功能生成视频文件的关键帧图像,然后再利用开源软件库imagemagick将这一组关键帧图形拼接成一张最多有5列的图形,这样就得到了最终的预览图形。使用如下命令即可以在当前目录生成所有的关键帧图像:
mplayer-sstep1-aonull-vopng<v标识eo_file>
针对视频文件库中的每个视频,可以在后台持续运行该程序,生成视频对应的所有关键帧图像,之后再用imagemagickconvert命令拼接成最终的预览图。具体转换命令如下:
(convert-size102x28xc:#cfcfcf-draw"imageOver0,051,28'D:\testv标识eo\frames\00000001.png’″-draw"imageOver51,051,28'D:\testv标识eo\frames\00000001.png’″D:\testv标识eo\out\out.jpg)
如果在用户请求视频时,预览图还没有生成,那么就即时生成该图像,返回给预览服务组件,同时存储在预览服务器。这样,后续用户请求时,就不用再生成了。预览服务组件:预览服务组件会根据请求的视频时间点,找出距离该时间点最近的预览小图(关键帧图形)的位置,将该部分图形展示给用户;由于事先已经从预览图服务器取到整张图形,该步骤中节省了播放器向内容服务器的网络请求过程,从而做到了极小的延时。
请求的视频时间点通过如下方式来计算:当用户将鼠标放在播放器进度条上某点时,会自动触发MOUSE_OVER事件,被内部的事件监听函数捕获,取到该点对应的坐标值,再根据坐标值,播放器进度条的总长度,以及视频总时间,等比例计算出该点对应的视频时间,再向预览服务组件发出预览请求;预览服务组件会根据请求时间点,将整张预览图的特定部分展示给用户。以ActionScript的实现为例,监听flash.events.MouseEvent.MOUSE_OVER事件就能计算出对应的时间点;利用flash.display.Loader和flash.display.Shape即可以展示图形的特定区域。
Socket下载组件:通过视频标识向索引服务器请求视频文件下载;
缓存组件:存储并管理下载到的视频文件;
视频编解码组件:从缓存组件中读取视频数据文件,并进行编解码,从而展示给用户。该组件一般都是利用大公司的成熟SDK组件,例如AdobeFlash的视频编解码组件。
如图1所示,对标记的说明如下:
1表示预览服务组件向预览图服务器请求视频的预览图,主要参数:v标识eo_标识。
2表示预览图服务器向预览服务组件返回视频的整张预览图,该图是将很多小图拼成一张大图,同时,还返回了每张小图对应的时间点。本发明中,预览图指整张由小图拼接成的大图;预览小图指单个小图。
3表示socket下载组件向索引和内容服务器发送视频标识,获取视频的具体地址和相应内容。
4表示获取来自内容服务器的数据存入缓存组件中。
5表示视频编解码组件取到数据,进行编解码,播放视频。
当用户发起预览请求时,播放器可以得到对应的请求时间点,然后找到距离该点最近的关键帧,之后就可以在预览图中定位该关键帧图像了。由于我们设定了关键帧图像的尺寸,以及预览图最多有5列的约束,那么只要知道是第几幅关键帧,就可以从预览图中截取得到对应的图像了。假设预览图最多有5列,关键帧图像的尺寸设定为<w,h>,假设距离请求点最近的关键帧是第m帧(m从0开始算),那么在预览图上,我们需要展示给用户的矩形区域就是:
矩形左上角的坐标(以第0帧左上角为原点坐标):x=(m%5)*w;y=(m/5)*h
矩形的尺寸:w标识th=w;height=h
其中%为取余数,例如当1%5时,商为0,余数为1,6%5时,商为1,余数与1。
以ActionScript实现方式为例,只需要利用flash.display.Loader类来本地加载整张预览图,并且利用flash.display.Shape类根据上面的算法生成一个矩形的mask区域,就可以实现展示部分小图的目标。示意代码如下:
如图2所示,示出了根据本发明方法的流程图,首先分析内容服务器存储的视频内容,提取与每一视频内容相对应的由不同时间点关键帧图像,组合构成预览图进行存储在预览图服务器上;响应用户的视频播放请求,通过视频标识向索引服务器请求下载视频内容;同时通过视频标识从预览图服务器下载与所下载视频内容相对应的预览图;索引服务器根据视频标识检索包括视频文件地址的视频元数据信息;内容服务器用于根据所述视频元数据信息获取存储的相对应的视频内容并分发给播放器;响应用户的预览请求,根据请求时间点通过所下载的预览图快速定位展示距请求时间点最近的关键帧图像。在从预览图服务器下载与视频对应的预览图时,同时获得构成所下载的预览图的各关键帧图像的时间点信息。
所述预览图服务器中针对每一个视频内容存储了由M张关键帧图像组成的预览图,m从0开始计数,预览图可以分为n列将关键帧图像拼接,优选为5列。
本发明的技术效果是:一旦开始观看视频,就会自动下载整张预览图;当预览图下载完成以后,后续就能实现超低延时的预览体验。也就是说,直接从服务器获取整张预览图(视频一启动,就会从服务器取这个数据),后续用户把鼠标停在进度条上时,就直接显示附近的一张小图给用户。这样的话,是在本地取得预览小图,没有延时,消除等待感。
以上是对本发明的优选实施例进行的详细描述,但本领域的普通技术人员应该意识到,在本发明的范围内和精神指导下,各种改进、添加和替换都是可能的,例如调整接口调用顺序、改变消息格式和内容、使用不同的编程语言(如C、C++、Java等)实现等。这些都在本发明的权利要求所限定的保护范围内。