码率自适应算法深入浅出

写在前面

0、 直播相关

直播大家都不陌生了,目前主流的直播协议 RTMP、HLS、httpflv、dash,这里先简单介绍一下。

协议 RTMP HLS httpflv dash
封装格式 flvtag ts flv mp4
传输方式 tcp流 http http流 http
延迟
H5播放支持 flash hls.js\苹果\安卓 flv.js dash.js

0.1、RTMP

RTMP(Real Time Message Protocol),是由Adobe公司提出的一种应用层的协议。

特点:

  • 播放器: 使用 Flash player 作为播放器
  • 延迟: 延迟较低 3s

0.2、HTTPFLV

HTTPFLV(http + flash video)
特点:

  • 延迟:延迟较低,3s
  • 和 rtmp 传输同样的数据,比 rtmp 有更好地穿透性

0.3、 HLS

HLS (HTTP Live Streaming), 是由 Apple 公司实现的基于 HTTP 的媒体流传输协议。
HLS 直播的基本原理就是:将直播流信息每缓存一段时间就封包成一个 ts 文件,同时产生一个索引(m3u8)文件来维护最新几个 ts 片段的索引。当播放器请求时,首先需要请求m3u8文件,然后从 m3u8 索引文件获取最新的 ts 视频文件片段来播放。
特点:

  • 延迟:通常情况下HLS延迟较高 20s ~ 30s
  • 码率:码率之间无缝切换

0.4、MPEG DASH

DASH(Dynamic Adaptive Streaming over HTTP)
DASH 原理类似 HLS。
特点:

  • 延迟:延迟较高
  • 码率:码率之间无缝切换

对于 HLS、DASH 的延迟问题,虽然我们可以通过缩小切片大小来降低延迟,但是,会受到索引文件、GOP等因素的限制。

1、码率自适应算法

前面说了很多基础的介绍,目的是为了更好地理解自适应码率算法。

1.1、码率切换

当我们的网络波动的时候,我们可以做什么?
1、上层降低码率。如:丢帧。
2、调整分辨率。例如:当我网络状况不佳的时候,我就降低码率。当网速充足的时候,就升高码率。

码率自适应算法深入浅出_第1张图片
HLS、DASH 这两种协议都是支持码率无缝切换的。
这里我们要考虑两个问题,1、码率切换的目的是什么?2、什么情况下进行码率切换?

1.1.1、码率切换的目的

码率切换的目的:提高用户在线观看视频的观看体验

那么,影响用户观看体验的因素有哪些?我们列举一下:视频码率、卡顿率、码率切换频率等等。所以很难量化,也就很难决策。

1.1.2、码率切换策略

在这种目的不明朗的情况下,出现了一种技术。
码率自适应技术 (Adaptive Bitrate Streaming,ABR),一种视频码率可以根据网络状况或客户端播放buffer情况自动调整的视频传输技术。这是近年来的一个研究热点。

1.2、码率自适应算法的类别

码率自适应算法的类别:

  • Buffer-based: 基于客户端的播放缓冲区buffer情况决策下一片段的码率档位
  • Rate-based: 基于预测的带宽去决策下一片段的码率档位
  • 同时考虑预测吞吐量和buffer信息决策下一片段的码率档位

1.2.1、Buffer-based

基于客户端播放缓冲区情况来决策下一片段的码率档位,这个实现相对简单。
设置保护窗口,当buffer小于保护窗的时候,降低码率;
设置缓存限制:当buffer长度大于该限制的时候,提高码率;
评价:

  • 能够有效降低卡顿率
  • 但是在直播中,buffer长度有上限,具有一定的局限性

单独使用该类别可能导致用户码率一直处于较低码率。

1.2.2、Rate-based

基于预测的带宽去决策下一片段的码率档位,该方案的关键在于如何预测带宽。
HLS用到了指数加权移动平均法(EWMA)算法:
在这里插入图片描述
HLS是切片式下载,所以它根据每片数据的下载速度和下载时长对该算法进行了优化,具体可以看一下代码。

DASH中用到了平滑流(sf)算法:
在这里插入图片描述
这里也是做了一些优化。比如δ为带宽变化系数,根据带宽动态变化。
评价:

  • 算法原理:通过对之前下载的视频切片的带宽进行收集处理, 进而预测下载下一个切片的网络带宽
  • 该类别受限于带宽预测算法
  • 在带宽预测准确的情况下,可以充分利用用户带宽
  • 如果不考虑当前buffer长度,可能会带来卡顿而影响观看体验。

结合了两者信息的算法可以获得相对较好的效果,例如模型预测控制(MPC)算法。

2、思考

2.1、机器学习

前面讲到码率自适应算法是学术界近年来的一个研究热点。

  • 腾讯音视频实验室在点播码率自适应方法上进行了尝试和实践,取得了一定的成果。
  • “Pensieve”系统使用机器学习根据网络条件选择不同的算法,已经被证明了能够比现有的系统提供更高质量的视频观看体验。

2.2、主观感知体验

我在搜集材料的时候,看到一个有意思的观点。
首先我们先回顾码率切换的目的:提高用户在线观看视频的观看体验。
那么,在不考虑卡顿的情况下,码率提升真的能带来观看体验的提升吗?
举个例子:很多游戏直播平台会推流畅、高清、超清、4M、8M码率的直播流,但是很多手机游戏,它从4M升高到8M,观看体验的提升几乎可以忽略。

  • 当码率较高时,码率变化带来的主观感受会比较低
  • 不敏感的视频,码率变化带来的主观感受会比较低

所以是否有必要根据实际直播内容,对码率进行调整呢?

2.3、总结

所以,想要设计合理的码率切换算法,既要考虑带宽缓冲区长度,又要考虑码率切换频率切换幅度,最后可能还要考虑直播内容

你可能感兴趣的:(音视频学习)