QoE驱动的自适应流媒体传输

avatar
web前端开发

背景

随着科技技术发展以及人们生活娱乐方式转变,视频消费成为日常生活不可获取的一部分。在当下社会,用户可能随时随地都会观看视频,用户的网络环境会变复杂。为解决在复杂场景比如网络速度不足、弱网以及网络频繁抖动等情况下,用户观看视频不流畅的问题,自适应流媒体应运而生。自适应流媒体是一种思想,一种技术实现,能够在复杂的网络状况下为用户提供更好的播放体验。

举个🌰,下面是一个简单的场景,通过模拟网速变化,来观察自动挡清晰度选择的变化。限制网速情况下,播放清晰度会从1080P下调为360P清晰度,降低发生卡顿的几率,尽可能保证视频能够流畅播放;当放开网速限制后,清晰度会逐步上调,为用户播放更高清晰度的视频,提升视频观看体验。

自适应流媒体传输

QoE

体验质量(Quality of Experience,QoE)是指用户对设备,网络和系统,应用或业务的质量和性能的综合主观感受。在视频播放场景下,衡量用户播放体验的指标分为首开,清晰度以及流畅度。自适应码率策略追求的QoE 指标一般包括,最小化卡顿次数以及卡顿频率,最大化视频平均播放码率,最小化码率切换频率以及码率切换幅值,最小化启动延迟等。

流媒体传输技术

流媒体

流媒体是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。

流媒体实际指的是一种新的媒体传送方式,有声音流、视频流、文本流、图像流、动画流等,而非一种新的媒体。流媒体最主要的技术特征就是流式传输,它使得数据可以像流水一样传输。流式传输是指通过网络传送媒体技术的总称。

自适应码率

什么是ABR(Adaptive Bit-Rate)

为了适应不同用户网络带宽的变化,防止用户播放过程产生卡顿,保证用户观看质量,大部分视频相关产品采用了基于HTTP的自适应码率(ABR,Adaptive Bit-Rate)策略(如:B站、优酷、YouTube等),不同产品有不同的自适应码率(ABR)方案。简单而言,就是给用户提供「自动」档位,参考用户端播放情况,给用户实时选择最适合的播放档位。

流式传输实现

实现流式传输主要有两种方式:实时流式传输(Real Time Streaming)和渐进式流式传输(Progressive Streaming)

  • 实时流媒体 代表:RTSP (Real Time Streaming Protocol ),RTMP (Real Time Messaging Protocol)

实时流媒体协议优点是 延迟低,稳定性高,编码兼容性高,安全性高等,缺点是需要额外部署流媒体服务器,存在被防火墙拦截的风险

  • 渐进式HTTP流媒体传输

基于HTTP协议,从服务端向客户端传输媒体数据。用户无需等到所有媒体数据下载完成,只需要获取到meta数据以及部分音视频数据,即可播放,即通常说的"边下边播"。

优点:不需要额外部署服务器,缺点启动延迟相对高,安全性低

在线视频播放逻辑发展历程

自适应HTTP流媒体传输

自适应多码率方案的核心,依据网络状态、播放状态等信息,动态调整请求视频流的清晰度(码率),从而在流畅度、清晰度和平滑性上取得平衡,最大化用户体验。基于HTTP的自适应工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

关键名词

多码率:基于同一个视频源,会生成多种清晰度的视频
分片:按照固定长度对视频进行切割,生成多个小分片视频
分片对齐:不同清晰度对应的同一时间的分片,内容相同

自适应的直观效果如下图所示:


图片来自 https://mp.weixin.qq.com/s/thnhhbw2ieFywCFSCHXyGQ

流程

流程图 (1).jpg

  1. 主播直播流上传/用户视频源
  2. 服务器的编解码封装
  3. 流媒体分发器
    • 描述文件
    • 切割后的媒体文件
  4. 客户端
    • 客户端加载并解析描述文件,组成文件下载链接
    • 当前的网速和支持的编码加载相应的视频片段进行播放

基于HTTP的自适应协议对比

现有的自适应协议有以下几种,HLS协议最先出现,由苹果公司提出,主要是为了解决RTMP协议存在的一些问题。比如 RTMP 协议不使用标准的 HTTP 接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。HLS基于HTTP,容易通过 CDN(内容分发网络)来传输媒体流。后来陆续出现HDS、MSS以及DASH,其中MPEG-DASH为国际化标准。不同协议之间,基准思路相同,实现细节上有差异。

Apple HTTP Live Streaming (HLS)
Adobe HTTP Dynamic Streaming (HDS)
Microsoft Smooth Streaming (MSS)
MPEG Dynamic Adaptive Streaming over HTTP (MPEG-DASH)

image.png

DASH协议示例

DASH协议中描述分片的描述文件,描述音视频时长,编码,清晰度,加密等信息。可以通过解析描述文件,获取音视频集合信息,获取地址规则,解析出具体的音视频地址。

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:cenc="urn:mpeg:cenc:2013" minBufferTime="PT5.00S" type="static" mediaPresentationDuration="PT1H22M27.000S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
    <Title>Merged MPD</Title>
  </ProgramInformation>
  <Period>
    <AdaptationSet segmentAlignment="true" bitstreamSwitching="true" maxWidth="688" maxHeight="382" mimeType="video/mp4">
      <Representation id="1" codecs="avc1.640015" width="572" height="320" frameRate="25" bandwidth="1371070" scanType="progressive">
        <BaseURL>tos-cn-vd-0026/abd43ed9655c493ab9fa7a51ef696a92/</BaseURL>
        <SegmentTemplate timescale="1000" media="1_$Number%04d$" startNumber="1" duration="5000" initialization="1_init"></SegmentTemplate>
        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5ef57228-d0bb-309b-c310-b6670002043b"></ContentProtection>
      </Representation>
      <Representation id="2" codecs="avc1.640015" width="430" height="240" frameRate="25" bandwidth="864691" scanType="progressive">
        <BaseURL>tos-cn-vd-0026/8970023cc97246c8861313657dd9d028/</BaseURL>
        <SegmentTemplate timescale="1000" media="1_$Number%04d$" startNumber="1" duration="5000" initialization="1_init"></SegmentTemplate>
        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5ef57228-d0bb-309b-c310-b6670002043b"></ContentProtection>
      </Representation>
      <Representation id="3" codecs="avc1.64001E" width="688" height="382" frameRate="25" bandwidth="1973187" scanType="progressive">
        <BaseURL>tos-cn-vd-0026/23f05dc6987c46b69c92fc21636ca748/</BaseURL>
        <SegmentTemplate timescale="1000" media="1_$Number%04d$" startNumber="1" duration="5000" initialization="1_init"></SegmentTemplate>
        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5ef57228-d0bb-309b-c310-b6670002043b"></ContentProtection>
      </Representation>
    </AdaptationSet>
    <AdaptationSet segmentAlignment="true" mimeType="audio/mp4">
      <Representation id="4" codecs="mp4a.40.2" bandwidth="70947">
        <BaseURL>tos-cn-vd-0026/abd43ed9655c493ab9fa7a51ef696a92/</BaseURL>
        <SegmentTemplate timescale="1000" media="2_$Number%04d$" startNumber="1" duration="5000" initialization="2_init"></SegmentTemplate>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
      </Representation>
      <Representation id="5" codecs="mp4a.40.2" bandwidth="70947">
        <BaseURL>tos-cn-vd-0026/8970023cc97246c8861313657dd9d028/</BaseURL>
        <SegmentTemplate timescale="1000" media="2_$Number%04d$" startNumber="1" duration="5000" initialization="2_init"></SegmentTemplate>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
      </Representation>
      <Representation id="6" codecs="mp4a.40.2" bandwidth="102853">
        <BaseURL>tos-cn-vd-0026/23f05dc6987c46b69c92fc21636ca748/</BaseURL>
        <SegmentTemplate timescale="1000" media="2_$Number%04d$" startNumber="1" duration="5000" initialization="2_init"></SegmentTemplate>
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

码率自适应策略

目前基于HTTP的动态自适应流媒体传输技术已经成为了网络视频传输的主要技术,从系统的角度来讲,自适应码率策略基本可以分为几类:

  1. 基于客户端的自适应码率策略
  2. 基于服务端的自适应码率策略
  3. 基于网络信息的自适应码率策略(考虑网络相关的信息)
  4. 混合模式的自适应码率策略(可能是基于客户端、基于服务端、基于网络信息的自适应码率策略中,一种或者多种策略的组合) 具体分类如下图所示:

image.png

基于客户端的码率自适应策略

基于客户端的自适应码率策略一般通过监测客户端可用带宽、播放器缓冲区大小等信息,来切换合适的视频码率片段,以达到适应网络带宽波动性的目的,从而提升用户QoE。

基于客户端的自适应码率策略也可以分为以下几类:

  1. 基于带宽预测,该类方法通过预测客户端的可用带宽,来作为下一个视频片段码率选择的依据。然而,由于带宽预测的不准确性,一般而言,基于带宽预测的方法难以提供较高的QoE,并会导致较为频繁的视播放器缓冲区抖动,从而使得用户视频观看质量不佳。通常有以下三种方式来计算客户端的可用带宽。

    • 基于上一片段有效带宽(LSB)
    • 基于 会话带宽平均 (SAB)
    • 基于滑动窗口平均 (WAB) 在点播下,可以通过描述文件获取到不同清晰度的码率信息。当预测带宽高时选择高码率视频,预测带宽低时选择低码率视频。
  2. 基于播放器缓冲区的自适应码率方法,在该类方法中,客户端使用播放缓冲区占用多少作为标准,来选择下一特定码率的视频片段来进行播放。

基于双阈值缓冲区大小的方案,将缓冲区分为多段。当buffer数据大于Qb_max阈值,则增加码率等级,选择比当前清晰度高的一个清晰度;当数据增加至Qmax时,参考预测带宽增加码率;当数据减少至Qmin时,根据预测带宽降低码率;数据降低至Qb_min时,根据buffer降低码率。
  1. 混合模式的自适应码率方法,在该类方法中,通过综合考虑可用带宽,播放器缓冲区大小,播放速度,播放器视觉窗口大小等因素,来进行自适应码率算法决策。

图片来自https://zhuanlan.zhihu.com/p/160774505
  1. 基于机器学习的自适应码率方法,利用大数据以及强化学习,深度学习等,计算出数据模型,通过数据模型来进行决策。相比上述通过建立各种模型或规则来控制码率选择的启发式的策略,机器学习的方式,可以“自主地”学习出一个适应当前网络状态的ABR算法。

基于服务端的码率自适应策略

基于服务端的自适应码率策略采用服务端码率主动调整策略,不需要客户端的额外支持便可以完成自适应码率。服务端驱动方法由负责媒体内容分发的HTTP服务器作出码率选择决策,根据服务器端发送缓冲区大小或客户端反馈的播放缓冲区大小,测量服务器端与客户端之间链路的网络吞吐量及客户端分辨率、处理能力等,由服务端选择特定码率媒体分片进行发送。 服务端驱动的码率自适应选择方法是一种“瘦客户端,胖服务端”的方法,该方法降低了客户端软件开发的复杂度,简化了客户端软件更新过程。然而,该类方法由于需要服务端单独控制每个客户端的发送缓冲区状态信息,收集服务端与客户端之间的网络连接状态信息等确定待发送的媒体分片码率,增大了服务器的处理负载,导致系统可扩展性较差。同时,服务端驱动的码率自适应方法需要修改Web服务器功能,需要得到网络服务提供商的支持,增大了系统部署难度。因此,当前主流的流媒体分发系统主要采用基于客户端驱动的码率自适应选择方法。

image.png

基于网络信息的码率自适应策略

基于网络信息的自适应码率策略允许客户端利用网络层相关的信息来做码率选择决策。这种策略一般是在收集一些测量的网络状态信息后,通知客户端来做出合适的码率选择,但是,网络信息的收集和处理需要一些特殊的模块来完成(比如网络代理等),该方法可以通过充分利用网络信息来完成更好的码率选择决策。

image.png

混合模式的码率自适应策略

混合模式的自适应码率策略可以通过收集很多网络相关的信息、客户端相关的信息、以及服务端相关的信息来帮助客户端做出更好的码率选择决策。

总结

自适应流媒体技术本身可以带来更好的用户体验,在实际播放场景下,产品会对QoE有不同侧重,比如有这种场景,需要在控制卡顿次数情况下,尽可能保证用户观看高清视频,这种场景反过来会驱动自适应算法的调整来满足需求。