📡 什么是 HLS 流媒体?M3U8 格式详解

HLS (HTTP Live Streaming) 是目前最流行的视频流媒体协议之一。理解它的工作原理,有助于你更好地下载和处理在线视频。

HLS 协议简介

HLS (HTTP Live Streaming) 是苹果公司在 2009 年开发的流媒体协议。它的核心思想是:

  • 将视频切割成小片段(通常 2-10 秒)
  • 使用标准 HTTP 协议传输
  • 通过播放列表(M3U8)管理分片
  • 支持自适应码率(不同网速播放不同质量)
为什么 HLS 如此流行?
HLS 使用标准 HTTP,可以利用现有的 CDN 基础设施,无需特殊服务器。几乎所有现代浏览器和设备都原生支持 HLS。

HLS 工作流程

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  原始视频   │ →  │   编码器    │ →  │  TS 分片    │
│  (MP4等)    │    │  (FFmpeg)   │    │ (2-10秒/片) │
└─────────────┘    └─────────────┘    └─────────────┘
                                              ↓
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   播放器    │ ←  │  HTTP/CDN   │ ←  │ M3U8 播放列表│
│  (浏览器)   │    │   (传输)    │    │ (索引文件)  │
└─────────────┘    └─────────────┘    └─────────────┘
          

M3U8 文件结构

M3U8 是一个 UTF-8 编码的文本文件,包含元数据和分片 URL 列表:

基本播放列表示例

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:10.0,
segment_0.ts
#EXTINF:10.0,
segment_1.ts
#EXTINF:10.0,
segment_2.ts
#EXTINF:8.5,
segment_3.ts

#EXT-X-ENDLIST

关键标签解释

  • #EXTM3U:文件头,表示这是 M3U8 文件
  • #EXT-X-VERSION:HLS 协议版本
  • #EXT-X-TARGETDURATION:分片最大时长(秒)
  • #EXTINF:下一个分片的实际时长
  • #EXT-X-ENDLIST:表示播放列表结束(VOD)

变体播放列表(多码率)

为了支持自适应码率,HLS 使用主播放列表指向不同质量的子播放列表:

#EXTM3U
#EXT-X-VERSION:3

#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low/playlist.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720
mid/playlist.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1920x1080
high/playlist.m3u8

播放器会根据用户的网络状况自动选择合适的质量流。

TS 分片格式

MPEG-TS (Transport Stream) 是 HLS 使用的容器格式:

  • 为流媒体设计,支持错误恢复
  • 固定 188 字节的数据包
  • 通常包含 H.264 视频和 AAC 音频
  • 每个 .ts 文件是一个独立可播放的片段

加密与 DRM

HLS 支持内容保护:

AES-128 加密

#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/key.bin"

每个分片使用 AES-128 加密,密钥从指定 URL 获取。

FairPlay DRM

苹果的专有 DRM 方案,用于保护付费内容,需要授权才能播放。

HLS vs 其他协议

协议 延迟 兼容性 使用场景
HLS 高 (10-30秒) 极好 点播、直播
DASH 中 (5-15秒) 点播
WebRTC 极低 (<1秒)< /td> 实时通信

如何处理 HLS 视频

了解了 HLS 原理后,处理这类视频就很简单了:

  1. 获取 M3U8 播放列表 URL
  2. 解析播放列表,获取所有 TS 分片 URL
  3. 下载所有 TS 分片
  4. 合并分片并转换为 MP4

我们的 M3U8 Converter 工具自动完成以上所有步骤。