流媒体 HLS 协议介绍
HLS(HTTP Live Streaming) 是由 Apple 推出的一种基于 HTTP 的流媒体传输协议。它将音视频文件切片为多个小的 .ts
媒体文件,并通过 .m3u8
播放列表文件进行索引和调度。由于其兼容性好、支持 CDN 加速、可自适应码率,因此广泛用于点播和直播场景中。类似的还有 DASH 协议,相关参数对比如下:
HLS(HTTP Live Streaming) 是由 Apple 推出的一个基于 HTTP 的流媒体传输协议。它将音视频文件切片为多个小的 .ts
媒体文件,并通过 .m3u8
播放列表文件进行索引和调度。由于其兼容性好、支持 CDN 加速、可自适应码率,因此广泛用于点播和直播场景中。类似的还有 DASH 协议,相关参数对比如下:
| 特性维度
| 特性稳定性
|
|
HLS(HTTP Live Streaming)
HLS(HTTP Live Streaming)
|
|
DASH(Dynamic Adaptive Streaming over HTTP)
DASH(Dynamic Adaptive Streaming over HTTP)
Apple 私有协议
Apple 私有协议
|
|
国际标准(MPEG)
国际标准(MPEG)
| | 封装格式 |
| | 封装格式 |
传统使用 MPEG-TS
现代支持 fMP4
传输使用 MPEG-TS
现代支持 fMP4
|
|
主流使用 fMP4
主流使用 fMP4
|
| 播放列表格式 | .m3u8
|
| 播放列表格式 | .m3u8
(M3U8 格式)
(M3U8 格式)
| .mpd
| .mpd
(XML 格式)
(XML 格式)
| | 延迟表现 |
| | 延迟表现 |
相对较高(常见 6~30 秒)
相对较高(常见 6~30 秒)
|
|
相对较低(2~15 秒)
相对较低(2~15 秒)
| | 码率自适应 |
| | 码率自适应 |
支持(多码率播放列表)
支持(多码率播放列表)
|
|
支持(更灵活)
支持(更灵活)
| | 加密方式 |
| | 加密方式 |
支持 AES-128,FairPlay
支持 AES-128,FairPlay
|
|
支持 Widevine、PlayReady、FairPlay 等
支持 Widevine、PlayReady、FairPlay 等
| | 浏览器兼容性 |
| | 浏览器兼容性 |
原生支持 Safari,其他需配合 hls.js
原生支持 Safari,其他需配合 hls.js
|
|
原生支持 Chrome、Edge(支持 MSE)
原生支持 Chrome、Edge(支持 MSE)
| | 跨平台表现 |
| | 跨平台表现 |
Apple 系统兼容性好
Apple 系统兼容性好
|
|
更具通用性、跨平台标准广泛
更具通用性、跨平台标准广泛
| | 播放器支持 |
| | 播放器支持 |
Safari、QuickTime、hls.js
、video.js
Safari、QuickTime、hls.js
、video.js
|
|
Dash.js、Shaka Player、Bitmovin 等
Dash.js、Shaka Player、Bitmovin 等
| | 协议灵活性 |
| | 协商灵活性 |
略低(Apple 控制标准)
流低(Apple 控制标准)
|
|
高(开放标准,扩展性强)
高(开放标准,扩展性强)
|
|
HLS 协议交互流程
HLS 协议交互流程
1. 主播放列表(main.m3u8)
1. 主播放列表(main.m3u8)
客户端基于 hls.js
库向服务端请求主播放列表,服务端返回内容如下:
客户端基于 hls.js
库向服务端请求主播放列表,服务端返回内容如下:
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360 low/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720 mid/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1920x1080 high/index.m3u8
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360 low/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720 mid/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1920x1080 high/index.m3u8