基于HLS实现实时流式转码、多码率自适应支持
如今,随着互联网带宽的不断提升,视频内容的分发与播放,在新闻娱乐、在线教育、社交网络和自媒体场景下越来越普遍。在满足成本预算的情况下、保证视频的快速分发与播放,也成了各家视频内容提供商不断优化的方向。如何节省带宽、快速分发视频内容、保证在网络不好的情况下流畅播放?
实时流式转码
- 01
目前国内外主流的基础音视频云服务,都是使用的异步转码模式,而异步转码有很多的问题。
- 02
异步转码通常要经过上传-转码-分发-播放的流程。使用异步转码,往往会给开发者和终端用户带来一定的局限性。
- 03
首先,视频转码需要一定时间,片源清晰度越高转码耗费的时间越是长久。异步转码方案决定了视频内容生产者必须要等待视频完全转码完毕后才能进行内容分发播放,这会为视频内容的生产和消费之间带来一定延迟效应。
- 04
其次,无论是开发者使用视频服务SDK轮询,或者自建回调服务接受回调结果,还是直接通过人工方式定期查询转码结果,都会给开发者带来一定的心智负担。同时,基础视频服务与上层业务产生了一定的耦合,任何使用变动都会影响上层业务。
- 05
再次,开发者需要预先设定转码参数,分辨率码率等相对固定。任何对转码参数的修改,都需要重新请求转码才能完成,无法由终端用户设置参数或者自适应用户请求场景。
- 06
此外,从业务上看,视频生产者无法预测视频播放情况,会有视频转码完却没有终端用户播发的情况,为此开发者需要付出多余的视频服务和存储花费。
- 07
针对上述异步转码的局限性,七牛推出了实时转码服务。与异步转码相比,实时转码仅需上传-分发-播放的流程,将转码和播放合二为一,即边转边播,按需转码。实时转码使用流媒体协议(目前支持HLS协议)进行网络分发,使用七牛多媒体处理服务进行分布式转码,使用七牛对象存储服务作为基础存储,结合七牛CDN服务进行网络加速,构建了完整的转码播放方案。
- 08
云端收到用户播放请求,读取源视频,根据播放参数将源视频快速分割成子视频分块,向多媒体处理集群分发任务,并生成相应的播放索引(如m3u8)返回给用户。并发执行的转码任务结果将缓存在云端,或者按用户需求进行持久化存储。通常,用户按照索引依次请求视频分块,按序播放;而当遇到快捷或者拖拽时间轴时,云端会相应进行实时加速转码和任务二次调度,降低用户播放卡顿。
- 09
七牛实时流式转码服务有如下优点: 视频生产者无须理解转码过程,无须等待转码任务完成,上传完视频后仅需按约定API协议编辑URL即可进行内容分发,转码参数直接包含在链接中。 开发者解耦视频转码服务和自身业务开发,降低心智负担,加速业务开发。 转码请求和播放请求合二为一。终端用户能够按需发起请求,所见即所得;视频生产者,仅需为热播视频付费,无需额外付出冷视频转码和存储成本。 音视频分段并行转码,使用大规模多媒体计算集群进行计算,让转码任务在云端可任意调度、迁移、扩展收缩,提高计算资源利用效率,降低成本。 实时转码播放请求延迟低,首屏快速打开,减少播放缓冲。
多码率自适应转码
- 01
在视频分发之前,由于各个终端(iOS、Android、PC端)的网络带宽、屏幕分辨率的不同,内容提供者会为不同的客户端生成固定码率的视频文件,这一定程度上保证了视频的流畅性,但是这会带来一定的问题。
- 02
由于端上播放的是某种码率的视频,在网络带宽、屏幕分辨率满足的情况下,用户无法选择更高清晰度的码率,没法为用户提供更好的播放体验。反之,如果网络质量不好,用户也无法切换到更低码率的视频,从而导致播放卡顿。
- 03
七牛多码率自适应转码 单码率视频无法应对客户端网络带宽环境的变化,提供给客户优质的播放体验,但是HLS多码率自适应特性正好解决了这一问题。
- 04
HLS(全称 HTTP Live Streaming),是由苹果公司提出的基于HTTP的流媒体网络传输协议。利用该协议,客户端可以接收持续的多媒体流来自于一个普通的web服务器。并且支持客户端在不同的网络带宽环境下,播放不同码率、分辨率的视频。
- 05
HLS的实现原理是把整个多媒体文件切成一个个小的基于HTTP的资源(MPEG-2 Transport Stream格式的文件),生成一个包含元数据的扩展 M3U (M3U8) Playlist 文件,每次只下载列表中的一些资源,客户端根据带宽环境可以选择不同的的资源。M3U8是一种播放多媒体列表的文件格式,可以指定一个或多个多媒体资源的位置,并且M3U8 Playlist 中可以包含多个子M3U8文件。
- 06
七牛官方提供的HLS多码率自适应功能,帮助客户从单一原视频,一步生成多码率自适应的多媒体文件,只需要提供原始资源和操作命令。实现原理如下图所示: