1.HLS协议
1.1 简介
HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。它的工作原理是把整个媒体流分成一个个小的基于 HTTP 的媒体分片来下载,每次只下载一些分片。在开始一个流媒体会话时,客户端会下载一个包含媒体分片的索引文件,即 M3U playlist 文件(m3u8),用于寻找可用的媒体分片。
HLS 中,索引文件可以嵌套,一般只有一级索引和二级索引;媒体流封分片装格式只支持 MPEG-2 传输流(ts)、WebVTT [WebVTT]文件或 Packed Audio 文件。HLS 中,索引文件可以嵌套,一般只有一级索引和二级索引;媒体流封分片装格式只支持 MPEG-2 传输流(ts)、WebVTT [WebVTT]文件或 Packed Audio 文件。
下图为HLS总体框架:
1.2 m3u8
M3U8 即播放索引文件,也称为 Playlist,是由多个独立行组成的文本文件,必须通过 URI(.m3u8 或 .m3u) 或者 HTTP Content-Type 来识别 (application/vnd.apple.mpegurl 或 audio/mpegurl)。
每行由用 \n 或者 \r\n 来标识换行。每一行可以是一个 URI、空白行或是一个 以# 号开头的字符串。
以 # 开头的是 tag 或者注释,以 #EXT 开头的是 tag, 其余的为注释, 在解析时应该忽略。URI 表示一个 ts 分片地址或是 Playlist 地址。URI 可以用绝对地址或者相对地址,如果使用相对地址,那么是相对于当前 Playlist 的地址。有些 tag 带有属性值,多个属性用逗号分隔。
1.3 协议规定
视频的封装格式是 TS。视频的编码格式为 H264,音频编码格式为 MP3、AAC 或者 AC-3。除了 TS 视频文件本身,还定义了用来控制播放的 m3u8 文件(文本文件)。
1.4 TS文件
- TS层: ts 包大小固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。 ts header 固定 4 个字节;adaptation field 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充;payload 是 pes 数据。
- PES层:pes 层是在每一个视频/音频帧上加入了时间戳等信息,pes 包内容很多,我们只留下最常用的。
- ES层:es 层指的就是音视频数据。