第1章:HLS与DASH协议核心差异
HLS(HTTP Live Streaming)和DASH(Dynamic Adaptive Streaming over HTTP)是目前最主流的两种自适应流媒体协议。两者均基于HTTP,但在传输机制、分片封装、加密体系及自适应策略上存在本质区别。理解这些差异是实现协议集成与跨平台部署的前提。
核心差异速查
| 维度 | 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 —— 基于分片的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对字节范围请求支持不完善。
分片格式对比
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:变体播放列表(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配置更为复杂。