一句话定义:HLS(HTTP Live Streaming)和 DASH(Dynamic Adaptive Streaming over HTTP)是两种把视频拆成一个个小文件、用普通网页下载的方式逐段播放的流媒体协议。前者由苹果推动,后者是开放的 MPEG 标准。
打个比方,点播就像读一本已经出版的书,你可以随便翻到第几页;直播则像追连载小说,作者写一章发一章,读者读一章等一章。HLS 和 DASH 干的就是“分章发布”这件事。
原理拆开看:转码器先把同一路视频压成好几档清晰度(1080p、720p、480p……),每档再按固定时长切成切片(segment,常见 2~10 秒),同时生成一份“目录”文件:HLS 里叫 playlist,通常是 .m3u8;DASH 里叫 MPD。播放器先拉目录,知道有哪些档位、每个切片在哪,然后一片一片地下载、解码、播放。
关键机制叫自适应码率(ABR,Adaptive Bitrate):播完一片就测一下刚才的下载速度,快了下一片换高清,慢了就换低清。所以网速抖动时你看到的是“画面变糊一下”,而不是转圈卡死。切片和目录都是普通 HTTP 文件,可以直接躺在 CDN 上,穿过防火墙和公司网络毫无压力——这是它取代早期专用流媒体服务器的根本原因。
为什么直播总比点播慢几秒:延迟主要来自三处。一是编码器必须攒满一个完整切片才能发布;二是播放器要拿到完整切片才能开始解码;三是为了防卡顿,播放器通常还要预存两三个切片。于是延迟大致等于“切片时长 × 缓冲片数 + 编码耗时 + 网络往返”。点播没有这个约束,多缓冲三十秒也无所谓。
切片长度在权衡什么:切长了,每个切片内画面变化小、压缩效率高、请求数少、播放稳,但延迟高、码率切换迟钝;切短了,延迟低、反应快,但每个切片都要带独立的关键帧和文件头,开销比例上升,请求数暴增,压缩率下降。点播常用 4~6 秒,普通直播 2~6 秒,低延迟方案(LL-HLS、LL-DASH)能压到 1 秒以下甚至几百毫秒,代价是协议更复杂、对 CDN 要求更高。
| 协议 | 目录文件 | 典型延迟 | 强项 |
|---|---|---|---|
| HLS | m3u8 | 直播数秒起 | 兼容性最好,苹果设备原生支持 |
| DASH | MPD | 与 HLS 相当 | 开放标准,可定制空间大 |
| RTMP | 无 | 亚秒到数秒 | 主播推流这一段仍常用 |
| WebRTC | 无 | 通常 1 秒内 | 双向互动、视频通话 |
两者如今都用 fMP4 切片,格式上高度趋同,很多平台干脆一套切片同时输出两份目录。具体支持情况以官方页面为准。
对你的意义:作为观众,卡顿和清晰度突变背后是 ABR 在替你决策;作为从业者,切片长度是“延迟、画质、带宽成本”三者之间的一个旋钮,做直播连麦、云游戏这类场景时它往往是第一个要动的参数。做多模态数据也一样:视频切片和关键帧的概念,直接对应抽帧、时间戳对齐和长视频分片处理的做法。
