一般来讲视频的播放要自建成本相当高,1. CDN分发; 2. 视频处理(如自动转码、自动水印); 3. 视频播放(比如加密、字幕等);4. 视频存储;5 技术支持(比如视频卡顿、CDN网络等各个环节的问题),因此,整体来讲自建的成本都很高,所以,一般都是直接使用外部的视频播放服务。
可以参考下图,一般业务层是应用层,比如课程视频、培训视频、课程管理、章节管理等等,都是应用层要处理的。
再下一层就是PaaS层,处理视频的播放整体方案,就是我们所说的云播放服务,PaaS层一般都是构建在LaaS层也就是云硬件之上的,比如OSS、CDN等。
国内四大厂,菊花、企鹅、百度、阿里都提供了视频点播服务,还有一些中小公司比如保利威视频服务、又拍云视频服务,国外的Vimeo等,本文就阿里云的视频点播服务做为基础IT支持,看看如何对接阿里云的视频点播服务。
选择视频点播服务的优点
为什么选择云平台的视频点播服务呢?我们看一下阿里云视频点播的官网介绍,(其他云服务也是一样的优点)阿里云有一下特点:
全球极速分发网络
以全球2800+个CDN节点、150T带宽储备,覆盖70多个国家和地区、支持数十家运营商。依托阿里云强大的全球音视频通信网(GRTN),为企业提供更具性价比的极速网络。
全方位加密保障
访问限制、播放鉴权、视频加密(阿里云加密、HLS加密、DRM加密)、安全下载等多重安全保障,防止盗链、非法下载等造成的损失,保障视频内容安全。
全流程媒体服务
从视频生产上传、媒资管理、媒体处理、智能生产到分发播放一站式媒体服务,提供高扩展性的平台架构。
接入灵活成本低
控制台简单易用,丰富的SDK及开放API,支持弹性开发。计费价格和方式,灵活价优,大大降低运营成本。
自创的窄带高清
自研S265编码和窄带高清2.0技术,真正实现高画质低码率,边缘动态自适应码流,降本提效,打造丰富的视听体验。
精细的数据分析
视频生产到播放的全流程数据分析,多样的资源用量统计和贴近场景的播放运营分析,开发和运营决策数据化。
智能化视频审核
阿里卓越视频AI技术实现智能审核,准确识别色情、暴恐、涉政等敏感信息,人工审核二次验证,兼顾安全与效率
视频点播的流程
网站的视频点播流程分为6个阶段,包括视频制作、视频上传、视频处理、存储管理、分发播放,分析数据等,可以参考下图
其中第一个视频的制作是有生成者处理,其他的都是跟技术相关,比如上传中的断点续传,视频处理中的转码等,这些都是要视频服务器来承担,并且非常消耗资源,一般的WEB服务器,最好不要做视频用途,即使我们通过FFmpeg等开源解决方案把技术问题解决了,但是带宽、服务器CPU、容错机制(比如解码不成功有没有报错处理)等,导致整个方案的无法落地。
那么云点播可以帮我们解决什么问题?
从上图可以看到,云平台主要帮我们解决视频处理、存储管理这两个。
关于上传,我们可以直接传到视频云服务,但是一般很少这么做,一个原因是不可能给操作人员阿里云账号去上传视频,这是权限管理的问题,另一个是我们一般会有一个网站或者平台管理视频,跟业务逻辑相关,不会直接去管理视频素材。
关于播放,每一个云平台几乎都提供了播放器,不过多有一定问题,不一定能达到自己想要的目标,目前笔者体会,腾讯做得比较好一些,但是是否腾讯跟自己的云平台绑定,能否用到阿里云,又是一个问题。
腾讯的播放器 https://tcplayer.vcube.tencent.com/
综上,播放器的选择方面,我推荐用开源的解决方案,
比如国内的 CKPlayer,https://www.ckplayer.com/
国外Video.js,https://videojs.com/
使用开源的方案有好处就是不被平台绑定,这样可以迁移到任何云平台,并且可以定制功能,比如视频互动,类似于点赞、弹幕、视频测试、视频答题等功能,开源的播放器定制也比较简单,并且没有版权和其他定制问题,因此推荐使用开源的解决方案。
解决方案
因此,我们最终采用云平台的架构就是通过SDK上传内容到云平台,然后使其自动处理我们的视频,包括智能审核、视频转码、封面提取、加水印等操作之后,通过SDK获取到云播放地址,云播放地址(直接获取CDN地址),然后在客户端播放,并且通过Video JS的自定义代码控制字幕、增加互动(视频答题)、适配带宽等。
整体的架构如下图所示
另外,关于字幕,我们其实不需要云服务的支撑,因为字幕通过播放器一般都可以外挂,字幕用SRT格式就可以,我们自建CMS字段存放即可,给播放器一个字幕的地址就可以自动加载字幕。
阿里云的对接方案
具体到阿里云,阿里云提供了云播放服务,涵盖了我们所需的所有需求,阿里云的存储可以直接用视频存储,也可以选择OSS存储,OSS存储通过OSS上传视频,但是如果要调用转码等其他服务,需要触发SDK事件。
我们最终采用,云播放 + OSS + CDN,
- SDK上传(OSS或者云播放)
- 上传之后调用自建的的视频处理模板,进行处理,比如转码、水印等(需要新建一个模板)
- 前端播放器采用开源CKPlayer,调用SDK获取播放地址
- 前端调用CMS的字幕地址加载字幕
更详细的,也可以参考下图: