zoukankan      html  css  js  c++  java
  • 流媒体之HLS与DASH

    一、HLS

      HLS(HTTP Live Streaming)协议是由苹果公司实现的基于HTTP的流媒体通信协议,并成为Quick TIme X和IPhone软件系统的一部分。苹果的IPad也有支持HLS的能力。

      HLS传出的视频文件为基于MPEG2文件的切片,每个媒体切片在服务器上单独存放。在一个流媒体文件分片过程中,视频处理程序读取连续的输入流,将其切割为等长的切片,默认长度为10秒。该程序还会生成一个m3u8格式列表文件,其中包含了切片列表和每个切片的具体信息。m3u8是m3u列表格式的扩展,m3u8文件具有两层分级架构,在文件起始处用#EXTM3U标签以示区别。在一级列表中,以#EXT-X-STREAM-INF标签起始提供各比特率的视频列表地址,该地址可以链接到另一个二级m3u8文件上,二级m3u8列表提供了所有同一比特率的视频切片的时长和URL地址。

      HLS协议的流媒体传输过程是首先服务器在资源准备阶段将不同比特率的食品切片并分别存储,同时生成两级或更多级的M3u8文件。传输开始时,客户端首先从服务器上请求并下载m3u8文件,通过解析该文件得到视频切片信息,选择适合当前状况的切片,提取出该切片的URL地址,直接通过该地址向服务器发起请求。因此,服务器端不需要任何额外的处理,任意Web服务器都可以配置成支持HLS协议的服务器。

    二、DASH

      DASH,又叫MPEG DASH,DASH:Dynamic Adaptive Streaming over HTTP ,是一种在互联网上传送动态码率的Video Streaming技术,类似于苹果的HLS,DASH会通过media presentation description (MPD)将视频内容切片成一个很短的文件片段,每个切片都有多个不同的码率,DASH Client可以根据网络的情况选择一个码率进行播放,支持在不同码率之间无缝切换。YouTube采用DASH。其网页端及移动端APP都使用了DASH。DASH的其他采用者包括:Netflix, Hulu。 

      除了HLS,其他的动态自适应流媒体技术还有微软的IIS Smooth Streaming,Adobe公司的Dynamic Streaming等。这些共存的协议采用的技术80%是相同的,但是100%是不相兼容的。为了对业界存在的多种自适应流技术进行规范,MEPG推出MEPG-DASH标准。旨在为动态自适应流媒体技术创造一种同一的协议标准。DASH也得到了许多公司的支持,Apple,Adobe,Microsoft,Netflix,Qualcomm表示只要DASH完成,就会支持这个标准。

    因此HLS和DASH的区别主要如下图:

     DASH基于MEPG-DASH流媒体协议的系统架构如下图:

    三、流媒体技术对比

      以B站为例,15年的B站使用整段的FLV和MP4,这种方案的好处是简单且兼容性高,抖音与今日头条就是用该方案。但缺点也很明显,随着视频时长的增长,整段的MP4的头部过于复杂,体积过于庞大,导致拉取与加载极为缓慢。

      16年的B站为了规避这个问题,使用了分段的FLV来提升加载速度,这种方案的好处是视频头部小,加载速度高。爱奇艺和优酷也使用类似方案。这种方案简单且兼容性高,而且与直播流统一了格式,所以一直沿用至今,中间由于flv.js的出现 ,把这种方案带向了全平台。

      但随着用户的增加,用户的网络种类和情况也变得更加复杂,如果我们需要在各种场景下都需要给用户较好的体验,需要选择一种能在不同网络下都能流畅播放的方案。于是需要引入Dynamic Adaptive Streaming/ Bitrate  技术,以进一步提升用户体验。同时需要对多音轨和多视频轨。

      在评估了一些行业内使用的方案后,B站选中了DASH,DASH也可以更灵活的实现用户与产品的新增需求。 

     四、DASH的优势

    1,观看视频更为流畅,如下图所示,我们会在网速不佳时无缝切换至较低清晰度视频,在网速充足时无缝切换至高清晰度视频,切换过程对于用户无感。 

    2,可以很容易的支持音频模式,满足听相声/音乐的你。

    3,在退到后台后,可以自动切换至只拉取音频,更节省你的流量,播放更加流畅。

    4,可以很容易的支持视频新增多音轨,多视频轨,多字幕轨的任意切换 ,原声,中配,多版本字幕任君选择。 

  • 相关阅读:
    pointnet++之classification/train.py
    pointnet++的pytorch实现
    xavier初始化的简单推导
    z+f数据解析
    ubuntu安装dia
    卷积,reLu,池化的意义
    Split
    .net程序调试一:快速定位异常
    Memcached (第一篇)
    System.Web.Caching.Cache类 缓存 各种缓存依赖
  • 原文地址:https://www.cnblogs.com/guanghe/p/15757678.html
Copyright © 2011-2022 走看看