HTTP Live Streaming(HLS)协议详解
HTTP Live Streaming(HLS)协议详解
HTTP Live Streaming(HLS)是由苹果公司提出的一种基于HTTP的流媒体网络传输协议。它通过将媒体流分割成多个小的TS文件,并使用M3U8索引文件进行管理,实现了在不同网络环境下的自适应流媒体传输。本文将详细介绍HLS协议的工作原理、技术细节及其优劣势。
HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。
在开始一个流媒体会话,客户端会下载一个包含元数据的 extended M3U (m3u8)playlist 文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
在服务器端,流媒体文件被切割成一个一个的小分片,这些小分片有着相同的时长(常用 10s),每一个小分片是一个ts文件。同时 产生一个索引文件(m3u8),索引文件里存放了 ts文件的URL。
客户端请求方式分两种,一种是点播(vod),一种是直播(live)
Video on demand:视频点播,有求才播放
vod:客户端一次获取整个m3u8文件,按照里面的URL获取ts文件,采用HTTP协议。
live:由于M3u8文件时实时更新的,所以客户端每隔一段时间获取m3u8文件,再根据里面的 URL获取ts文件,采用HTTP协议。
HLS总体架构
1、 服务器将媒体文件转换为m3u8及ts分片;对于直播源,服务器需要实时动态更新。
2、 客户端请求m3u8文件,根据索引获取ts分片;点播与直播服务器不同的地方是, 直播的 m3u8文件会不断更新,而点播的m3u8文件是不会变的,只需要客户端在开始时请求一次即可。
HLS优劣势
优势:
客户端支持简单,只需要支持HTTP请求即可,HTTP协议无状态,只需要按顺序下载媒体片段即可。使用 HTTP协议网络兼容性好,HTTP数据包也可以方便地通过防火墙或者代理服务器。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样资源(多码流自适应),允许流媒体会话适应不同的数据速率。
劣势:
因其自身的实现方式,HLS存在延迟(最少有一个分片),对于直播等实时敏感的场景,
体验不好。
M3U8 详解
HLS协议很大一部分内容即是对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带有属性值,多个属性用逗号分隔。常见的 m3u8文件如下所示:
一级M3U8:
二级M3U8:
详解
HLS 是提供一个m3u8地址。
Apple的Safari浏览器直接就能打开m3u8地址,譬如:
http://demo.srs.com/live/livestream.m3u8
Android不能直接打开,需要使用html5的video标签,然后在浏览器中打开这个页面即可,
譬如:
<video width="640" height="360"
autoplay controls autobuffer
src="http://demo.srs.com/live/livestream.m3u8"
type="application/vnd.apple.mpegurl">
HLS协议规定
视频的封装格式是TS。
视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。
除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。
点播 VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有 ts文件的地址。这种模式允许客户端访问全部内容。上面的例子中就是一个点播模式下的 m3u8的结构。
Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级 index文件,以获得最新生成的ts文件播放视频。如果一个二级index 文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。
TS文件
ts 文件为传输流文件(MPEG2 - tranport stream),视频编码主要格式 h264/mpeg4,音频为acc/MP3。
ts文件分为三层:
ts层Transport Stream、pes层Packet Elemental Stream、es层Elementary Stream。
es层就是音视频压缩数据,pes层是在音视频数据es上加了时间戳(pts,dts)等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息。