HLS
HLS
优缺点
- 客户端支持简单
, 只需要支持HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可。 - 使用
HTTP 协议网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器, CDN 支持良好。 Apple 的全系列产品支持,不需要安装任何插件就可以原生支持播放HLS, 目前Android 也加入了对HLS 的支持。- 自带多码率自适应机制。
- 相比
RTMP 这类长连接协议, 延时较高, 难以用到互动直播场景。 - 对于点播服务来说
, 由于TS 切片通常较小, 海量碎片在文件分发, 一致性缓存, 存储等方面都有较大挑战。
HLS 协议构成

- 服务器用于接收媒体输入流,对它们进行编码,封装成适合于分发的格式,然后准备进行分发。
- 分发组件为标准的
Web 服务器。它们用于接收客户端请求,传递处理过的媒体,把资源和客户端联系起来。 - 客户端软件决定请求何种合适的媒体,下载这些资源,然后把它们重新组装成用户可以观看的连续流。
m3u8
#EXTM3U m3u文件头
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号
#EXT-X-TARGETDURATION 每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE 是否允许cache
#EXT-X-ENDLIST m3u8文件结束符
#EXTINF 指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效
mystream-12.ts
<video controls autoplay>
<source
src="http://devimages.apple.com/iphone/samples/bipbop/masterplaylist.m3u8"
type="application/vnd.apple.mpegurl"
/>
<p class="warning">Your browser does not support HTML5 video.</p>
</video>
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2855600,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=960x540
live/medium.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5605600,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1280x720
live/high.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1755600,CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=640x360
live/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=545600,CODECS="avc1.42001e,mp4a.40.2",RESOLUTION=416x234
live/cellular.m3u8
以
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:26
#EXTINF:9.901,
http://media.example.com/wifi/segment26.ts
#EXTINF:9.901,
http://media.example.com/wifi/segment27.ts
#EXTINF:9.501,
http://media.example.com/wifi/segment28.ts
该二级
live playlist: 动态列表。顾名思义,该列表是动态变化的,里面的ts 文件会实时更新,并且过期的ts 索引会被删除。默认,情况下都是使用动态列表。event playlist: 静态列表。它和动态列表主要区别就是,原来的ts 文件索引不会被删除,该列表是不断更新,而且文件大小会逐渐增大。它会在文件中,直接添加#EXT-X-PLAYLIST-TYPE:EVENT 作为标识。VOD playlist: 全量列表。它就是将所有的ts 文件都列在list 当中。如果,使用该列表,就和播放一整个视频没有啥区别了。它是使用#EXT-X-ENDLIST 表示文件结尾。
显而易见,