1. 什么是自适应码流
自适应码流,是一种将视频内容制作成多种分辨率版本,然后终端播放器自动选择版本播放的技术。
如图所示,内容服务器在提供视频内容之前,预先将视频转成了流畅、标清、高清等多种分辨率的版本。播放器播放视频时,将首先播放分辨率最低的视频,随后播放器根据当前网络的带宽情况,在播放过程中切换到其他分辨率的版本,当网络带宽充足时使用高分辨率版本,而当网络较差时,使用低分辨率的版本。
自适应码流技术的应用,为视频播放带来了如下高质量的体验:
- 秒开:视频从低分辨率的视频开始播放,因此加载出首帧画面消耗的时间较少,达到秒开;
- 高清:自适应码流通常包含不同分辨率的规格,在网络条件好的播放器会选择清晰度更高的规格播放。
- 无卡顿:播放器会根据网络条件,向上或向下切换不同清晰度的规格,防止弱网络环境播放高清视频产生的卡顿;同时,不同分辨率规格的视频因为做了 IDR 帧对齐,切换过程中也不会产生卡顿。
2. 自适应码流技术分析
自适应码流技术,关键主要在于两点:
1. 如何描述一个视频有哪些分辨率的版本,每种版本所需要的网络条件是什么;
2. 播放器如何根据当前的网络条件,决定是否切换,以及切换到哪个分辨率的版本。
复制代码
- 以 HLS 为例,使用 master playlist 索引一个视频不同分辨率的版本。如上图所示,视频一共包含了3种不同的版本,分辨率分别是 426×240,852×480 和 1280×720。BANDWIDTH 表示了该版本对应的码率,分辨率越高的的版本,码率也越大。
- 播放器在切换不同分辨率规格的策略,依赖于其采取的码率自适应算法。主要的码率自适应算法有:基于带宽预测的算法、基于 buffer 的算法,以及混合带宽预测和 buffer 的算法。
2.1. 基于带宽预测的算法,可以获得一个预测的视频码率,播放器选择一个不高于预测带宽的视频进行播放。预测的方法是:以当前时间之前的固定时间段的样本(k1,k2)作为参考,计算调和平均值(倒数的平均的倒数),作为预测的视频码率(p1)。该算法仅基于历史的样本预测带宽,准确性不佳。
2.1. 基于 buffer 的算法,则放弃直接的带宽预测,用 buffer 驱动码率选择,buffer 大则选择高码率,否则选择低码率。但是这里潜在的问题是,当播放器的 buffer 发生变化时,可能造成不同分辨率规格的视频频繁切换。
2.3. 目前主流的码率自适应算法,是混合带宽预测和 buffer 的算法,即以带宽预测为主,buffer 为辅,该算法结合了带宽预测和 buffer 两种算法的优势。
行业中的几种主要的自适应码流协议,除了 Apple 的 HLS 之外,还有 Google 的 DASH,Adobe 的 HDS,以及 Microsoft 的 Smooth(后两种实际上已经逐渐被 DASH 替代,即 HLS 和 DASH 成为自适应码流协议的两大阵营)。对比 HLS 和 DASH:
HLS(apple 私有):视频格式为 ts,索引文件为 m3u8,单码率采用一级索引,多码率采用二级索引;
DASH(ISO标准):视频格式为 fmp4(也宣称支持ts),索引文件为 mpd,只包含一级索引。
3. 短视频多清晰多方案
- 由于短视频时长较短,最长为60s,大部分视频为30s左右,所以对短视频分片的意义不大。
- 在视频数据下发时,下发视频的多码率版本列表(对应简化版的m3u8文件)。
- 基于混合带宽预测和buffer的算法,切换不同清晰度视频。