HLSHTTP Live Streaming苹果推出的基于 HTTP 的流媒体传输协议核心是把视频切分成小分片 m3u8 索引文件浏览器 / 播放器通过普通 HTTP 请求逐段下载播放无需专用流媒体端口RTMP 用 193580/443 端口通用防火墙、CDN 友好。其实就是音视频直接使用HTTP 进行传输这样天然的满足网元的传输。核心特点基于标准 HTTP穿透性强CDN 完美加速自适应码率多清晰度自动切换延迟偏高标准直播 10~30s低延迟 LL-HLS 可压到 2~5s原生支持Safari、iOS、Android、Chrome、VLC、Video.js、Flv.js封装视频 H.264/H.265音频 AAC分片容器 TS传统/fMP4LL-HLS一、两大核心技术1.1 m3u8 索引文件文本UTF-8后缀.m3u8播放器先拉取这个文件获取分片地址、时长、码率等配置。1.1.1 主索引Master m3u8多清晰度自适应包含多个不同分辨率 / 码率的子流地址播放器根据网速自动切换。 示例#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH800000,RESOLUTION1280x720 720p.m3u8#EXT-X-STREAM-INF:BANDWIDTH400000,RESOLUTION960x540 540p.m3u8#EXT-X-STREAM-INF:BANDWIDTH200000,RESOLUTION640x360 360p.m3u8BANDWIDTH码率 bpsRESOLUTION分辨率1.1.2 分片索引Media m3u8存放 TS 分片列表记录每一段视频分片、单段时长、加密信息、直播序列。#EXTM3U#EXT-X-TARGETDURATION:10 // 单个分片最大时长10s#EXT-X-MEDIA-SEQUENCE:100 // 当前第一个分片序号#EXTINF:9.8, seg-100.ts#EXTINF:9.9, seg-101.ts#EXT-X-ENDLIST // 点播视频才有直播无此行关键标签#EXTINF分片实际时长秒#EXT-X-MEDIA-SEQUENCE直播滚动更新旧分片会被删除#EXT-X-KEY加密信息AES-128 加密 HLS#EXT-X-DISCONTINUITY分片编码切换标记关于m3u8文件的生成可以参考我在CNblog的博文HLSHTTP Live Streaming协议之m3u8文件生成方式 - mediastream - 博客园1.2. TS 分片文件Transport Stream传统 HLS 分片后缀.ts一般 2~10s 一段每片独立可解码不用依赖前后分片网络卡顿只卡当前片段LL-HLS 使用 fMP4碎片化 MP4分片延迟更低二、点播 HLS vs 直播 HLS2.1. VOD 点播m3u8 末尾带#EXT-X-ENDLIST所有分片固定不会新增、不会删除可完整下载整部视频2.2. Live 直播无#EXT-X-ENDLIST服务端持续追加新分片旧分片超时自动清理滑动窗口播放器循环定时重新请求 m3u8 获取最新片段天然存在缓冲延迟HLS的服务搭建可以参考我的博文基于nginx的HLS简单服务器搭建 - mediastream - 博客园三 常见工具与服务3.1推流 / 切片工具FFmpegffmpeg -i rtmp://input -c copy -hls_time 4 output.m3u8Nginx-RTMP-ModuleRTMP 转 HLS 直播SRS、MediaKit、Wowza、Nimble Streamer 流媒体服务器3.2 前端播放Video.js hls.jsChrome/PC 浏览器Safari 原生支持 m3u8无需插件Android ExoPlayer、iOS AVPlayer 原生支持3.3 下载工具ffmpeg、vlc、N_m3u8DL-REm3u8 批量下载解密