时间: 2017/11/20
  • 技术文章
  • 解决方案
  • 博客/文章

       

       由于安卓系统在其蜂巢版本中开始支持HTTP Live Streaming(HLS),因此HLS直播迅速在世界各地流行起来。虽然HLS大行其道,但我们仍然听到很多用户对减少延迟的抱怨。大多数都说:“HLS直播延迟很糟糕!”。

可是不能因为一个缺点就否定一切。 HLS有很多优点,它是您使用直播技术不可忽略选择,并且此决策极为可行!

        首先,HLS提供卓越的运作质量。还记得以前使用流媒体糟糕的体验吗?它总是得先缓冲、缓冲再缓冲! HLS通过使用区块(Chunks)载入来解决缓冲这个问题,以确保您的数据流可以高质量地无缝播放而不用死等。

        其次,HLS降低了传送内容的成本。使用大家能接受HTTP协议,内容所有者可以很轻易地将其内容提供给网络在线观众,并扩大潜在的收视率。 HLS普及率也是很高的,支持和提供给更多的设备与玩家,这意味着观众无需专门的设备就可以随意观看HLS输出内容。无论您是使用iOS,Android,HTML5播放器甚至是某些机顶盒都可以使用HLS流媒体。

        最后,HLS表现良好。与MPEG-DASH(Dynamic Adaptive Streaming over HTTP基于HTTP的动态自适应流媒体)标准一样,基于清单式(Manifest)HLS使用分组内容分发模型(.m3u8)文件剪切并重新组合视频块。同时它还为CDN(内容分发网络)和编码/转码软件提供商提供了一个相对通用的平台,以在其基础架构中进行标准化,并允许基于边缘式(edge-based)的自适应比特率(ABR)转码。

        但是与其他优秀的技术一样,HLS强大的同时在延迟方面也存在缺陷。延迟最可能的原因为:ABR的传输,包括编码、转码、分发和HLS的默认回放缓冲区的要求等。

         在HLS中改变自适应流时,需要建立一个新的缓冲区。在撰写本文章当前,苹果公司默认使用10秒的内容区块和一定数量的数据包来创建播放缓冲区。这导致从捕获到最终数据包组装的新玻壳(glass-to-glass)延迟约30秒。但是,当您引入CDN以获得更高的可扩展性时,您会注入另外15-30秒的延迟时间以便服务器可以缓存正在进行的内容。其他更不用提,这就是HLS延迟的最大问题。

         在最近一些使用HLS的事件中,比如Twitter体育赛事和总统辩论等,观众在他们的移动设备上观看直播时,延迟竟然达到了90秒。当交互性或类似广播的速度很重要时,HLS不是一个可行的选择,没有人希望把直播当点播看。

那么,如果延迟和用户体验很重要,该如何调整HLS来发挥作用呢?

        通过多青流媒体技术,您可以流畅地传输低延迟的HLS内容,经过测试多青已经达到了2秒的低延迟直播服务。这个过程需要对多青管理区块(Chunks)和打包的方式进行几次定制,但是作为多青企业客户有四个简单的步骤可以帮助您调整流程,以提供低延迟的HLS直播:

减少区块大小

        目前,在HLS默认设置中,苹果公司建议每个片段持续时间的长度至少为6秒。我们已经看到成功操纵大小到半秒。为了减少这种情况,请将区块时长目标修改为所需的长度(以毫秒为单位)。 HLS区块只能在关键帧边界上创建,因此需要确保它是关键帧间隔的倍数或调整关键帧间隔合适。

增加区块的数量

        多青服务存储区块可以建立一个重要的缓冲区,如果连接性降低的话。默认值是10,但是对于延迟降低的数据流,我们建议存储50秒的数据块。对于一秒钟的区块,将最大数值设置为50; 如果你使用的是半秒的区块,那么值应该是100。

修改播放列表区块数

         HLS播放列表中的项目数量默认为三个,但对于较低延迟的情况,我们建议将12秒的数据发送给播放器。这可以防止播放列表请求之间的区块丢失。对于一秒的区块,将区块播放列表值设置为12; 如果您使用的是半秒的区块,那么值应该加倍(24)。

设置最小数量的区块

         您要调整的最后一件事是在播放开始之前必须设置接收多少个区块。我们建议至少6秒。