# HLS 协议简介
全称 HTTP Live Streaming,是由苹果公司开发的用于支持在线音视频播放的流媒体协议,该协议是基于 HTTP 协议实现的。
HLS 是由 m3u8 配置文件和 TS 分片文件组成的。
# m3u8
m3u8 是 m3u 文件的一种,是 HLS 定义的配置文件,客户端从该文件中解析出播放所需的元数据后,从中寻找可用的媒体流的地址,然后下载媒体流进行播放。
m3u8 其实是一个播放列表文件 playlist,里面记录了可用的媒体片段信息,m3u8 文件支持嵌套。
m3u8 文件结构:
- EXTM3U 文件第一行配置指定这是一个 M3u8 文件
- EXT-X-MEDIA-SEQUENCE 第一个 TS 分片起始位置序号;直播时则为直播段起始位置
- EXT-X-TARGETDURATION 每个分片最大时长
- EXT-X-ALLOW-CACHE 是否运行缓存
- EXT-X-ENDLIST 文件结束符,如果是直播流,则没有文件结束符
- EXTINF 附加信息,分片的时长,带宽等
- EXT-X-VERSION m3u8 版本号
- EXT-X-DISCONTINUITY 分片中断
- EXT-X-PLAYLIST-TYPE 流媒体类型
- 类型: VOD 表明是点播源,文件中应该也有 ENDLIST 标签
- 类型: EVENT 表明是直播源,文件中应该没有 ENDLIST 标签,不允许服务器修改已有的数据,但是可以在文件结尾添加新数据。
- EXT-X-KEY 是否加密解析
# 广告插入
可以在 m3u8 中插入广告的 ts,实现广告的播放,但是有个问题是广告的视频编码格式与原视频可能不一样,所以需要在广告的 TS 分片前后加上 DISCONTINUITY 这个标签,表明视频前后中断,需要客户端去处理该情况。
# MPEG-2 Transport Stream
更有弹性避免包丢失和损坏
ts 流的数据包固定大小为 188 字节,由 4 个字节的头和 184 字节组成,