HLS
HLS介绍
HLS(HTTP Live Streaming)全称为http直播流,是一个由Apple公司提出的基于HTTP的媒体流传输协议,用来实现实时音视频流的传输。
1. 原理
服务器将码流切割成一个个小的(通常是10秒一个)可以通过HTTP下载的媒体分片(segment),并提供一个配套的媒体列表文件(M3U8文件);客户端下载媒体列表文件,并按照规范解析文件,获取每个媒体分片的地址并按顺序下载,从而实现看起来播放一个码流的效果。
这其中,HTTP是网络协议,媒体播放列表为Apple官方定义的M3U8文件,媒体文件格式为TS或fMP4。
2. HLS多媒体系统
该系统结构如下图:
主要由四个部分组成:
- 媒体资料输入源
采集音视频数据 - 媒体编码封装服务器
对裸流进行编码,封装,切割,使之成为连续的、时长很短的媒体文件。 - 分发服务器
标准的网络服务器组成,接收客户端的请求和分发资源(M3U8文件和媒体文件) - 客户端
拉流播放
3. HLS的优势和不足:
- 优势:
- 使用HTTP协议传输数据,不会被防火墙屏蔽掉,易于分发。
- 码率自适应,提高播放流畅度。
- 无状态协议,便于负载均衡。
- 浏览器支持好,无需安装插件。
- 不足:
实时性差,延迟高,两个原因:
1>采用切片式的多媒体文件,因为切片需要时间编码,所以一个切片的延时不可避免。
2>使用http短连接,需要不断的与server建立连接,且基于tcp,需要三次握手,四次挥手,交互耗时长。
媒体描述文件
M3U8文件,HLS的媒体描述文件,UTF-8编码。
可以是一个主列表(Master Playlist),也可以是一个媒体列表(Media Playlist)。
如下图为列表和媒体文件的关系,共两级列表。
1. 主播放列表(Master Playlist)
用来表示多个不同码率码流的媒体播放列表url及相关信息。
如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000,CODECS="avc1.640028,mp4a.40.2"
http: //example.com/hi.m3u8
TAG以及形式 | 意义 |
---|---|
#EXTM3U | 表示该文件一个拓展的M3U8文件,必须放在第一行。 |
#EXT-X-STREAM-INF: | 用于指定一个Variants Stream,指定一个包含多媒体信息的Media URI作为playlist 一般做M3U8的嵌套使用,它只对紧跟后面的URI有效。 attribute-list有以下参数: · BANDWIDTH: 要求的带宽,该参数必须有,实现码率自适应的关键参数。 · PROGRAM-ID: 十进 |