使用 DASH 直播时一般会有几十秒的直播延迟,对于互动直播这么高的延迟根本互不动。要降低直播延迟一般会减少视频分段时长。
上图中展示了不同时长的视频片段对应的延迟,减小视频片段时长虽然可以降低延迟,但是也会增加资源消耗和视频码率,而且就算使用 1 秒的视频分段,延迟也会比下面介绍的 LLDASH 方案高。
介绍
LLDASH(Low Latency DASH)最早在 2017 年提出并成立工作组,在 2019 年 DVB 发布了 DVB-DASH with low latency 规范,基于 DVB 和 DASH IF 联合开发的这份报告 DVB and DASH-IF in 2017 on Low-Latency DASH 在 2020 年 DASH IF 发布了 Low-latency Modes for DASH 规范。
DVB(Digital Video Broadcasting)数字视频广播,是一系列数字电视国际开放标准,由 DVB Project 维护。DVB Project 是一个由 300 多个成员组成的工业组织,它是由欧洲电信标准化组织、欧洲电子标准化组织和欧洲广播联盟联合组成的联合专家组发起的。
DASH IF(DASH Industry Forum)DASH 行业论坛,它主要由流媒体公司组成,如 Akamai、谷歌、微软等。DASH IF 主要标准化互操作性,促进 MPEG-DASH 发展,并帮助其从规范过渡到真正的业务。
所以目前一共有 DVB 和 DASH IF 两套 LLDASH 规范,这两套低延迟方案非常相似只有一点不同,由于 DASH IF 较晚发布所以在 DASH IF 规范中也说明了与 DVB 不同的部分。而且这两个规范是完全向下兼容普通 DASH 直播的。
CMAF
虽然 MPEG-DASH 规范并没有限制内容格式,但是两种 LLDASH 规范中都是使用 CMAF 格式。这容易让人产生 CMAF 和低延迟划等号的误解,CMAF 本身并不会降低延迟,例如 HLS 支持 MPEG-TS 和 CMAF 两种格式,如果将普通 HLS 直播 MPEG-TS 分片换成 CMAF 分片,这并不会降低直播延迟。CMAF 最大的作用是统一播放格式,从而节省存储空间。不过 CMAF 提供了一些工具使低延迟 DASH 成为可能。
原理
LLDASH 与上篇文章介绍的 LHLS 非常相似,都是将一个分片变成一个个小 Chunk,这些小 Chunk 可以在分片完全生成之前被播放器使用 HTTP/1.1 的 Chunked transfer encoding 功能下载并缓存,从而降低直播延迟。
如上图所示,普通 DASH 直播中一个 MP4 分段只有完全编码后才能输出被请求。LLDASH 中将视频片段分割为一个个小 Chunk,编码器可以每生成一个 Chunk 就输出,传递给播放器缓存播放。
CMAF 中 ftyp 和 moov 盒子组成初始化分段,每一个 Chunk 由 moof 和 mdat 盒子组成。播放器会先请求初始化分段,然后请求最新的媒体分段,服务器会将分段的一个个 Chunk 返回给播放器播放。
播放器请求拉流时,可能如上图所示,一个视频片段被分为 3 个 Chunk。当前播放器发送请求给服务器时,视频片段还没被完全生成,服务器会保持连接不断开,每当生成一个 Chunk 就立马推送给播放器。
规范实现
对于使用 DASH IF 低延迟规范的 MPD,应该添加 http://www.dashif.org/guidelines/low-latency-live-v5 到 MPD@profiles 属性中进行标识,下面是一个符合 DASH IF 低延迟规范的 MPD 例子。
<?xml version="1.0" encoding="utf-8"?>
<MPD
xmlns="urn:mpeg:dash:schema:mpd:2011"
availabilityStartTime="1970-01-01T00:00:00Z"
id="Config part of url maybe?&#