一种传输视频流的视频服务器
技术领域
本发明涉及服务器技术领域,特别是涉及一种传输视频流的视频服务器。
背景技术
随着网络技术和视频技术的不断发展,视频网站得到广泛普及,网络视频已经越来越受到人们的欢迎和喜爱,例如影视作品视频、新闻节目视频、体育赛事视频以及各种文艺活动视频等。
视频服务器是视频网站的重要硬件依托,目前视频服务器的带宽主要有3M、5M、10M、20M,当用户播放量较低时,视频服务器的带宽完全能够满足视频播放需求,但是达到一定数量的用户同时观看视频时,由于带宽的限制,部分用户有可能会出现播放不流畅,甚至无法加载视频的情况,导致用户获取信息效率降低,而且对于用户而言是非常差的视频播放体验,将严重影响视频网站的访问量。
为了解决视频服务器带宽无法满足高用户量的视频播放需求的问题,现有技术中先采用一种分片技术对视频进行分片,然后再利用终端的视频播放器对分片后的视频进行逐段的加载和播放,从而解决了在视频播放器播放视频时从一开始就加载整个视频文件而导致的带宽被严重占用的问题。但是目前的视频服务器需要对多个视频文件进行分片时仍存在硬件资源压力较大的问题,容易崩溃,最终导致视频播放失败,影响用户的视频播放体验。
发明内容
为解决现有技术中视频服务器需要对多个视频文件进行分片时仍存在硬件资源压力较大的问题,容易崩溃,最终导致视频播放失败,影响用户的视频播放体验,本发明提供一种传输视频流的视频服务器。
为解决上述问题,本发明采取如下的技术方案:
一种传输视频流的视频服务器,包括:
获取模块,用于获取视频播放终端发送的视频播放请求,所述视频播放请求携带有所述视频播放终端的用户标识;
下载模块,用于根据所述视频播放请求从云存储服务器下载对应的预先上传的视频文件;
分片模块,用于调用分片命令对下载的视频文件进行分片处理,得到若干个视频分片文件;
传输模块,用于将若干个所述视频分片文件按照顺序合并成视频流,并根据所述用户标识将所述视频流传输至对应的视频播放终端,使所述视频播放终端上安装的视频播放器显示合并后的视频流。
与现有技术相比,本发明具有以下有益效果:
本发明所提出的一种传输视频流的视频服务器利用云存储服务器存储预先上传的视频文件,当视频服务器获取到视频播放终端发送的视频播放请求后,根据视频播放请求从云存储服务器下载对应的视频文件,当视频服务器需要对多个视频文件进行分片时,有效减轻了视频服务器自身的硬件资源的压力,同时采用分片技术提高了视频播放效果以及资源利用率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明其中一个实施例提供的一种传输视频流的视频服务器的结构示意图;
图2为本发明另一个实施例中视频地址列表的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及较佳实施例对本发明的技术方案进行详细描述,描述过程中所举实施例只用于解释本发明,并非用于限定本发明的范围。
在其中一个实施例中,如图1所示,本发明提供一种传输视频流的视频服务器,该视频服务器包括:
获取模块100,用于获取视频播放终端发送的视频播放请求,视频播放请求携带有视频播放终端的用户标识;
下载模块200,用于根据视频播放请求从云存储服务器下载对应的预先上传的视频文件;
分片模块300,用于调用分片命令对下载的视频文件进行分片处理,得到若干个视频分片文件;
传输模块400,用于将若干个视频分片文件按照顺序合并成视频流,并根据用户标识将视频流传输至对应的视频播放终端,使视频播放终端上安装的视频播放器显示合并后的视频流。
具体地,在本实施例中,获取模块100用于获取视频播放终端发送的视频播放请求,该视频播放请求携带有视频播放终端的用户标识,如由后台系统分配的标识或者用户在视频播放终端自行注册后获得的标识等,用户标识可用于唯一确定视频播放终端设备,因此根据不同的用户标识可以确定对应的视频播放终端。
下载模块200用于根据视频播放请求从云存储服务器下载对应的视频文件,该视频文件由上传模块预先上传存储至云存储服务器中。本实施例的视频服务器利用云存储服务器来存储上传的视频文件,降低了对视频服务器存储空间的要求,有利于缓解视频服务器的内存占用压力。云存储服务器可以采用现有的华为云服务器、腾讯云服务器等云端存储技术实现,此处不再赘述。
分片模块300用于调用分片命令对下载的视频文件进行分片处理,得到若干个视频分片文件。对视频文件进行分片处理,将一个较大的视频文件分成若干个相对较小的分片文件,使在视频播放器播放第n个分片文件时,会预加载第n+1个分片文件,但不会加载第n+2个分片文件,实现对分片后的视频文件进行逐段的加载和播放,从而解决了在视频播放器播放视频时从一开始就加载整个视频文件而导致的带宽被严重占用的问题,有效减小了视频服务器的带宽和硬件资源的浪费,减轻视频服务器的压力,让视频播放更加流畅,给用户带来更好的体验。
最后,传输模块400用于将若干个视频分片文件按照顺序合并成视频流,并根据用户标识将视频流传输至对应的视频播放终端,使视频播放终端上安装的视频播放器显示合并后的视频流。
本实施例所提出的传输视频流的视频服务器利用云存储服务器存储预先上传的视频文件,当视频服务器获取到视频播放终端发送的视频播放请求后,根据视频播放请求从云存储服务器下载对应的视频文件,当视频服务器需要对多个视频文件进行分片时,有效减轻了视频服务器自身的硬件资源的压力,同时采用分片技术提高了视频播放效果以及资源利用率。
作为一种具体的实施方式,视频服务器还包括上传模块,该上传模块用于将视频文件预先上传至云存储服务器;上传模块先利用上传视频工具类中的saveas函数将待上传的视频文件另存为m3u8格式,再将另存后的视频文件上传存储至云存储服务器中。由于待上传的视频文件可能是由不同的多媒体系统所生成的,因此视频文件的格式也不尽相同,例如,待上传的视频文件的格式可能为mkv格式、rmvb格式、mp4格式、avi格式、flv格式、wmv格式中的任意一种。当视频文件的格式不同时,如果上传模块不做任何处理而将任意格式的视频文件都上传存储至云存储服务器中,云存储服务器会以视频文件原有的格式进行存储,那么当分片模块300调用分片命令对不同格式的视频文件进行分片处理时,可能会出现视频播放器能够正常播放某些格式的视频文件,而某些格式的视频文件视频播放器则无法正常播放的情况,因此,为了避免出现调用同一个分片命令对不同的视频文件进行分片处理时,最终视频播放器可能会出现不同播放效果的现象,本实施方式的上传模块先利用上传视频工具类中的saveas函数将待上传的视频文件另存为m3u8格式,然后再将另存后的视频文件上传存储至云存储服务器中。
视频播放终端不仅用于播放本地视频,而且还用于播放跨域视频,即视频播放器通过访问连接来播放跨域视频。更进一步地,上传模块还用于将跨域策略文件(crossdomian.xml文件)上传至云存储服务器;当视频播放器通过访问连接(文件的外链)播放跨域视频时,视频播放器先加载云存储服务器中存储的跨域策略文件,并判断跨域策略文件是否被允许加载,如果跨域策略文件被允许加载,则视频播放终端发送视频播放请求至获取模块100,并且视频播放终端上安装的视频播放器对传输模块400发送的视频流进行显示。通过跨域策略文件的配置,可以实现视频播放器例如flash视频播放器的跨域数据传输,避免视频播放终端通过访问链接播放视频时出现跨域拒绝的问题,进一步提高视频播放终端的实用性和功能性。
作为一种具体的实施方式,传输模块400在将若干个视频分片文件按照顺序合并成视频流时,将各个视频分片文件的大小和时长写入xml列表中;视频播放器读取xml列表中的视频信息后再读取视频流并进行显示。xml列表也称为分片列表,其中存储有各个视频分片文件的大小和时长等视频信息,当传输模块400根据用户标识将包括xml列表的视频流发送至对应的视频播放终端后,视频播放器首先读取xml列表中的视频信息,由于xml列表的大小往往为几k,因此视频播放器在极短的时间(例如1秒钟)内就能读取完毕视频信息,随即读取相应的视频分片文件并开始播放,而不必加载全部视频可达几百k的头部信息,进一步缩短了视频播放前加载的时间,提高了视频播放的速度,从而给用户带来视频快速播放的良好体验。
作为一种具体的实施方式,采用配置文件video.properties来加载分片模块300的配置信息,配置文件video.properties的配置内容包括设置分片操作参数。本实施方式提供了一种具体的用于加载分片模块300的配置信息的方式,通过配置文件video.properties来加载分片模块300的配置信息,包括设置分片操作参数以及设置转码队列等,实现分片接口的设计,完成对视频文件高效的分片处理。
本发明所提出的一种传输视频流的视频服务器不仅适用于视频点播,而且同时适用于视频直播,可以用于完成对于实时性要求不高的各种视频直播,例如视频聊天、电商直播等等。可选地,预先上传的视频文件为转码机实时输出的直播视频文件,其中转码机可以为HLS转码机或者HTTP-FLV转码机等。当传输视频流的视频服务器包括上传模块时,转码机实时输出的直播视频文件由上传模块上传至云存储服务器。
进一步地,传输模块400根据用户标识将视频流传输至对应的视频播放终端时,先将视频流打包成若干个数据包,再将每一个数据包分发到与视频播放终端保持连接的内容分发网络(Content DeliveryNetwork,CDN)上,视频播放终端从内容分发网络加载相应的数据包。这种利用内容分发网络进行视频播放的方式对于实时性要求不高的视频直播的负载能力更好,可以有效提高维护连接的效率,同时大大提高了视频直播的效率和稳定性。
更进一步地,视频服务器还包括用于提供视频地址列表的地址模块,地址模块将视频分片文件对应的视频分片地址按照时间顺序存储在视频地址列表中,视频播放终端轮询视频地址列表,并从视频地址列表中取出最老的视频分片地址,根据最老的视频分片地址从内容分发网络加载对应的数据包,完成相应视频分片文件的播放;当视频地址列表的队列长度大于阈值时,地址模块将视频地址列表清空到只剩一个最新的视频分片地址,当且仅当所剩的最新的视频分片地址被视频播放终端取出后,地址模块才允许视频地址列表的队列变长。
如图2所示,地址模块维护一个视频地址列表,例如{视频分片地址1,视频分片地址2,…,视频分片地址N},该视频地址列表中存储有视频分片文件对应的视频分片地址,视频播放终端轮询该视频地址列表,并且从视频地址列表中取出最老的视频分片地址,然后根据取出的最老的视频分片地址从内容分发网络加载对应的数据包,根据加载的数据包进行视频播放;当最老的视频分片地址被视频播放终端取出后,地址模块会将视频地址列表中该最老的视频分片地址清零,同时当最老的视频分片地址被取出后,地址模块根据分片模块300进行分片处理的结果,将最新的视频分片文件所对应的视频分片地址添加到视频地址列表中,从而始终维护视频地址列表中包括最新的视频分片地址。
特别地,如果用户的网络环境较差,就会导致视频播放终端出现播放卡顿,视频播放终端从视频地址列表中取出视频分片地址的频率降低,进而导致视频地址列表的队列越来越长,而队列越长则表示视频播放的延迟就越大,使得视频直播逐步失真。为了避免视频直播的延迟不断增大,尽量保持视频播放终端与直播保持同步,地址模块在维护视频地址列表的同时,给视频地址列表设定一个队列长度阈值,当视频地址列表的队列长度大于该阈值时,地址模块就将视频地址列表清空到只剩一个最新的视频分片地址,当且仅当所剩的最新的视频分片地址被视频播放终端取出后,地址模块才允许视频地址列表的队列变长。通过给视频地址列表设定队列长度阈值,并在视频地址列表的队列长度大于该阈值时将视频地址列表清空到只剩一个最新的视频分片地址,这些操作起到了对因视频播放终端取出视频分片地址频率降低而引起的延迟进行校正的作用,尽量降低了延迟,保证视频播放终端的直播效果。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。