第1章:HLS与DASH协议核心差异

HLS(HTTP Live Streaming)和DASH(Dynamic Adaptive Streaming over HTTP)是目前最主流的两种自适应流媒体协议。两者均基于HTTP,但在传输机制、分片封装、加密体系及自适应策略上存在本质区别。理解这些差异是实现协议集成与跨平台部署的前提。

章节导览:本章从四个维度逐一剖析HLS与DASH的设计哲学,并给出对比速查表。后续章节将围绕具体集成技术展开。

核心差异速查

维度 HLS (Apple) DASH (MPEG)
传输机制 基于HTTP/1.1短连接,每次请求独立获取分片;支持HTTP/2的keep-alive可选 原生支持HTTP/1.1长连接与HTTP/2多路复用;协议层允许分段请求(byte-range)
分片格式 传统为MPEG-2 TS;HLS v7+支持fMP4(Fragmented MP4) 主流使用fMP4;也可使用WebM用于VP9编码
加密方式 AES-128 CBC或SAMPLE-AES(CTR模式);密钥通过EXT-X-KEY标签分发 通用加密(CENC)标准,支持ISO/IEC 23001-7;可集成多种DRM(Widevine、PlayReady等)
自适应码率策略 基于变体播放列表(Variant Playlist);客户端在列表内切换不同分辨率/码率的流 通过MPD文件中Period、AdaptationSet、Representation三级层次实现精细自适应;支持SVC空间/时间层级
HLS 与 DASH 协议栈核心差异 HLS 协议栈 DASH 协议栈 传输机制 HTTP/1.1 短连接 · HTTP/2 Keep-Alive 传输机制 HTTP/1.1 长连接 · HTTP/2 多路复用 分片格式 MPEG-2 TS / fMP4(v7+) 分片格式 fMP4 / WebM(VP9) 加密方式 AES-128 CBC/CTR + EXT-X-KEY 加密方式 CENC 通用加密(Widevine/PlayReady) 自适应码率 变体播放列表 · 客户端切换 自适应码率 MPD 三级层次 · SVC 层级 说明:各层独立对比,具体实现中可能存在子版本差异(如HLS v7+ 支持 fMP4 和加密改进)

传输机制详解

HLS —— 基于分片的HTTP短连接

HLS由Apple于2009年提出,将连续音视频流切割为若干持续时间固定的TS/fMP4文件(通常2–10秒)。客户端通过解析.m3u8播放列表依次请求每个分片。每个分片使用独立的HTTP GET请求,连接关闭后释放TCP资源。

  • 优点:部署简单,CDN友好,兼容性好(几乎所有浏览器/播放器都原生支持或可通过扩展实现)。
  • 缺点:短连接导致TCP握手开销;低延迟场景(<2秒)需要额外优化(如LL-HLS)。

DASH —— 面向HTTP/2的长连接与字节范围请求

DASH由ISO与MPEG联合制定,核心是Media Presentation Description (MPD) 文件。客户端通过MPD获取所有可用表示(Representation)的元信息,然后通过HTTP Range请求按需获取分片内容。HTTP/2多路复用允许同时请求多个分片,降低延迟。

  • 优点:带宽利用率高,支持更精细的自适应控制;服务器可推送segments。
  • 缺点:MPD解析复杂度较高;部分老旧CDN对字节范围请求支持不完善。
集成要点:当将HLS转为DASH时,需要额外处理分片边界对齐和时间戳映射。建议使用同一分段器(如FFmpeg的dash muxer)同时生成两种协议的索引文件。

分片格式对比

MPEG-2 TS(HLS传统格式)

TS分片包含完整的音频、视频和字幕PES包,且自带PCR时钟校正。每个TS段可以独立解码,但容器开销较大(约5%~10%)。适合直播场景,因为无需等待moov box即可播放。

fMP4(碎片化MP4)

HLS从v7开始支持fMP4,DASH则默认使用fMP4。fMP4将MP4文件进一步拆分为moof(movie fragment) + mdat 单元,每个分片只有一小段moof元数据,整体开销比TS低。但fMP4要求播放器具备fragment-aware解析能力。

WebM(DASH可选)

WebM基于MKV容器,支持VP8/VP9和Opus编码。在需要免专利费编码的环境中,DASH可选用WebM格式。但WebM对MPD的SegmentBase模式支持较弱。

加密方式差异

HLS加密体系

HLS使用EXT-X-KEY标签指定加密方法。支持两种模式:

  • AES-128 CBC:每个分片使用相同的KEY和IV(可由EXT-X-KEY:IV=…覆盖或分片序号推导)。
  • SAMPLE-AES:仅加密NAL单元中的原始数据,兼容部分硬件解码器。
#EXTM3U
#EXT-X-KEY:METHOD=AES-128,URI="https://keys.example.com/segment.key",IV=0x1234567890ABCDEF…
#EXTINF:10.000,
segment_001.ts

DASH加密体系:CENC

DASH遵循ISO/IEC 23001-7通用加密(CENC),将加密方案(如AES-CTR)和密钥管理系统(如Widevine、PlayReady)分离。MPD中通过ContentProtection描述符声明:

<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
  <cenc:pssh>AAACH3Bzc2gAAAAA…</cenc:pssh>
</ContentProtection>
部署警示:HLS和DASH的加密在密钥轮换、IV生成规则上完全不同。集成时需实现统一密钥接口层,确保同一内容在两种协议下使用相同的密钥材料,但IV递进策略不同。

自适应码率策略对比

HLS:变体播放列表(Variant Playlist)

HLS将不同码率/分辨率的流分别封装为独立的子播放列表(#EXT-X-STREAM-INF),客户端根据带宽和缓冲区状态在子列表间切换。常见的切换算法包括基于吞吐量的Bandwidth-Aware和基于缓存的Buffer-Based。

DASH:MPD层级结构

DASH的MPD包含多级描述:

  • Period:时间段的集合(如广告、章节)
  • AdaptationSet:同一类型的媒体集合(视频、音频、字幕)
  • Representation:具体的码率/分辨率/编解码器设置

客户端可在一个Period内灵活切换不同Representation,甚至跨Period无缝衔接。

<MPD type="dynamic" minBufferTime="PT2.00S">
  <Period id="1" start="PT0S">
    <AdaptationSet mimeType="video/mp4">
      <Representation id="v720" bandwidth="2800000" width="1280" height="720" codecs="avc1.64001F">
        <SegmentTemplate duration="2000" timescale="1000" media="seg-$Number$.m4s" startNumber="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

HLS的主要不足在于切换时需重新加载新的.m3u8索引,而DASH的MPD可一次性提供所有表示信息,切换延迟更低。但在多DRM场景下,DASH的ContentProtection配置更为复杂。

实践结论:协议选择不应非此即彼。在很多混合交付场景中(如Apple设备上走HLS,Android上走DASH),集成工程师需要维护并行协议栈,利用复用分片和统一加密实现源站输出一致性。