摘要:提供成人资讯服务,无非是视频、图片、漫画、小说这些内容,而视频毫无疑问是最吸引人的。当前中文视频网站主流有采集播放他站视频和自建视频服务器两种方案,由于采集方案的视频...
提供成人资讯服务,无非是视频、图片、漫画、小说这些内容,而视频毫无疑问是最吸引人的。当前中文视频网站主流有采集播放他站视频和自建视频服务器两种方案,由于采集方案的视频并不在自己服务器上,只要设置好采集源(市面上有不少专门提供视频源的网站,我们称之为资源站),一切都会自动执行,不管是经济成本还是人力成本都很低,所以市面上绝大部分中文视频网站都采取这种模式,当然采集方案也有它的缺点,首先内容不可控,对方提供什么你就得接受什么,一个采集站肯定很多站在采用,大家都内容都千篇一律,没有差异性,其次就是播放质量参差不齐,经常出现卡顿、无法播放等问题,再加上采集站提供的视频码率都不会很高,还都有广告水印,这些都严重影响了用户体验,制约了网站的发展,更严重的很多资源站运营运营一段时间后都会倒闭跑路,这时你的视频无法播放,需要下架失效视频,再找新资源站重新采集,费工夫不说,这些被下架视频辛辛苦苦积累起来的搜索引擎索引记录也付诸流水了,
所以,有高追求的站长就需要自己建视频服务器了,我自己的视频服务器就是自建的,下面就来谈谈在自建服务器时需要注意的一些情况。
1、确定视频服务器配置
如何你的视频服务器和网站/数据库服务器是独立分开的,那么完全可以不关心服务器的 CPU、内存等配置,你只需要关心:
空间大小:假设你的视频以最常见的 720P(1280 x 720)为主,通常一部这样的视频码率在 1Mbps(0.125MiB/秒)左右,最低也要在600kbps(0.075MiB/秒)以上,否则就要严重响画质了。我们取个平均,按 800kbps(0.1MiB/秒)码率计算,那么每小时视频需要的储存空间是 (800 / 8) * 60 * 60 = 360,000KB,约 350MB,那么储存 100 小时的视频就需要 35GB,1,000 小时就是 350GB;
带宽:带宽对视频服务器至关重要,不少站长不是很了解,比如有一次我问一个站长服务器带宽是多少,他告诉我是无限的,这明显是和流量搞混了。流量指在指定时间内(通常一个月),服务器商最多给你多少的数据传输量,单位通常是 GB 或 TB(1000GB),超过这个数字服务器就要被停止访问了,或者要额外付费;而带宽则是指服务器每秒能达到上下行速度,单位通常是 Mbps。对于图片、小说等资源站,在访问数没有达到一个很高的数字(比如每天 50 万PV)前,100Mbps(12.5Mib)的共享带宽通常是够用的,但对视频站来说就不一样了,同样以 720P,码率 800kbps 的视频为主,当前每个正在观看视频的用户就要占用 800kbps(= 0.8Mbps = 0.1MiB/秒),100Mbps 的带宽够 100/0.8 = 125 名用户同时观看,如果超过就要卡顿了;
流量:一定要无限流量的,虽然市面上大部分 VPS 或独立服务器都是无限流量的,但总也有一些例外的,万一买到有流量限制的悲剧了。视频服务器的流量非常巨大,购买时一定要看清楚,是不是 unlimted traffic;
知道了空间和带宽的计算方法,那么根据自己网站的实际情况,选择对应的配置即可,主要有两个原则:
- 计算需要多少带宽,要考虑访问段的高峰和低估,配置要按照高峰期的访问量来计算,一个比较简单的公式是:高峰人数 = 平均人数 * 2,比如你的网站每天视频播放次数 10,000次,折合每小时平均 416 次,那么所需配置就要按照高峰期的每小时 416 * 2 = 832 次计算,然后根据这个数字,假设每个用户平均观看 10 分钟视频(成人视频的行业标准),那么在高峰期平均在线观看视频人数就是 832 * 10 / 60 = 138,你的服务器配置至少要满足这个数字,根据之前计算的 100Mbps 带宽可以满足125 名用户同时观看,再刨除掉一些网站本身需要的带宽,那么你的服务器带宽至少要 120Mbps 以上才能保证在高峰事情不卡顿。
- 配置要预留一些余地,但不要太多,配置是要花钱的,没必要为暂时用不上的东西买单,买服务器不是买房子,通常都是可以升级的,不需要一步到位,等到不够用了再升级;
2、制定技术方案
有了服务器,接下来就是怎么播放服务器上的视频了,这是个非常专业的问题,可绝对不是简单的把下载下来的视频文件朝服务器上一传就解决的,如果你胆敢这样做:
- 用户体验会非常糟糕:你下载的原始视频码率通常都非常大,白白浪费服务器空间和带宽,必须要经过重新编码让码率变得合适,而且原始视频通常并不适合网络播放,比如 mp4 或 avi 格式文件,虽然可以直接在浏览器中播放,但是它们都没有对网络播放进行过优化,文件头异常巨大,导致的结果就是用户在打开网页后需要等待很长时间才能开始播放,每次拖动进度条也需要等很长时间,完全没有在 Youtube 等平台上观看视频时那种拖到哪里播放到哪里的顺畅感;而 rmbv、mkv 等格式的视频,则压根不能直接播放;
- 无法解决盗链问题:你的服务器上的视频文件是公开的,任何人只要打开你的网页源码就能找到原始的视频地址,用不了多久,你的视频就会被一大堆人引用,在他们自己的网站上播放,或者被下载链接直接链到你的视频文件上,而你除了付出服务器带宽,什么也得不到;
所以你需要对源视频进行编码、加密等一系列处理后,才能在服务器上进行公开播放。目前网络视频编码事实上的行业标准是HLS(HTTP Live Streaming),对应的视频文件是 ts 格式,简单的说就是把一个长视频分割成若干个后缀名为 ts 的小片段,每个片段长度通常为 6-10 秒,最后还会生成一个后缀名为 m3u8 的纯文本文件,记录所有这些小片段的信息,播放时引用这个 m3u8 文件即可。编码需要用到的工具是 ffmpeg,有 Windows 和 linux 版,网上有很多详细的帮助,这里就不展开了。
防盗链则分成两部分,一是在使用 ffmpeg 进行视频编码时就需要用密钥文件进行 AES 加密,这样没有密钥 ts 文件就无法播放了,但是光这样还不够,因为密钥文件也是公开的,盗链网站虽然无法直接下载你的视频,但是依然可以直接引用你的 m3u8 文件在他自己的网站播放,所系还需要保护我们的 m3u8 文件,不能让它轻易的被人读取,这就有很多办法了,我采取的方式是把 m3u8 文件放在网站目录外,无法直接访问,播放器不直接引用 m3u8 文件,而引用的一个 php 文件,在 php 文件里读取指定的 m3u8 文件内容并展示出来,这样我们就可以在 php 文件里做一定的防盗链处理,比如对引用进行白名单判断、增加密钥和时间戳等,这里就不详细展开了,对此有兴趣的站长可以留言,如果需要的人多了我会再写一篇如何具体实现。
最后就是播放,HTML 的 <Video> 标签并不能直接播放 m3u8 格式视频(在苹果 IOS 上可以),所以需要使用第三方 js 插件来播放,常见的免费 HLS 播放器有 hls.js,fluidplayer,Video.js 等,功能各有不同,以后我会写一篇文章介绍各自的优缺点。