HLS 与 DASH:流媒体协议是如何工作的

在流媒体出现之前,看网络视频只有一种方式:把整个文件下载完再播放。一个 500 MB 的视频,哪怕你只想看前 30 秒,也得等完整文件到手。流媒体协议解决的就是这个问题:把视频切成一小段一小段,边下边播。

切片:流媒体的基本单位

以最常见的 HLS(HTTP Live Streaming,苹果提出)为例,服务端会把一个完整视频按 2~10 秒的长度切成大量小文件,称为“分片”(segment),通常采用 MPEG-TS 或 fMP4 封装。同时生成一份播放列表文件(.m3u8),里面记录了分片的顺序和地址。播放器先拉取播放列表,再按需下载分片,播完一个再取下一个,几乎不需要等待。

在线视频播放器

自适应码率:网络变差为什么不卡顿

HLS 和 DASH(Dynamic Adaptive Streaming over HTTP,微软等提出)都会为同一个视频准备多套不同清晰度、不同码率的分片,比如 1080p / 720p / 480p 各一套,全部列在主播放列表里。播放器实时监测下载速度和缓冲区余量:网络好就切高码率,网络变差就降级,从而保证播放连续。这就是“自适应码率”(ABR),也是你在地铁里视频会自动变糊的原因。

为什么下载 m3u8 链接经常失败

直接下载一个 .m3u8 文件只会得到几 KB 的文本播放列表,而不是视频本身。要真正保存视频,需要解析播放列表、逐个下载分片再按顺序拼接。这也是为什么很多下载工具对 HLS 视频要么不支持,要么需要专门的“合并分片”步骤。TakeVid 内置了分片嗅探与自动拼接,下载完成即是完整文件。

M3U8 下载器

  • HLS:苹果出品,.m3u8 播放列表,iOS/Safari 原生支持,直播点播通吃
  • DASH:开放标准,.mpd 清单,YouTube、Netflix 等大规模使用
  • 两者都基于普通 HTTP,CDN 友好,是当前绝对主流

DASH 下载器

返回文章列表