目录
- 概述
- 诞生的原因
- 当前的应用场景
- 技术架构
- HLS的技术要点
- 参考阅读
1. 概述
HTTP Live Streaming(HLS)是苹果公司提出的基于HTTP的流媒体协议。
可实现流媒体的点播和直播,采用了动态码率自适应技术。最初是作为QuickTime, Safari, OS X, iOS软件的一部分,目前广泛地应用于点播和直播领域。
2. 诞生的原因
为什么苹果要提出HLS这个协议
- 主要是为了解决RTMP协议存在的一些问题。比如RTMP协议不使用标准的HTTP接口传输数据,RTMP是基于UTP传输的协议。在一些特殊的网络环境下可能被防火墙屏蔽掉。HLS由于使用的HTTP协议,可以方便地透过防火墙或者代理服务器。而且可以地方便地利用CDN进行分发加速,而且客户端实现起来也很方便。
- HLS协议可以实现码率自适应。不同带宽的设备可以自动切换到最适合自己码率的视频播放。
- 另外于负载,RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。
3. 当前的应用场景
其实HLS最大的优势就是他的亲爹是苹果。苹果在自家的IOS设备上只提供对HLS的原生支持,并且放弃了flash。Android也迫于平果的“淫威”原生支持了HLS。
- iOS从3.0开始成为标准功能。
- Adobe Flash Player从11.0开始支持HLS。
- Google的Android自Honeycomb(3.0)开始支持HLS。
- VODOBOX HLS Player (Android,iOS, Adobe Flash Player)。
- JW Player (Adobe Flash player)。
- Windows 10 的 EDGE 浏览器开始支持HLS。
- HTML5。
4. 技术架构
HLS跟MPEG-DASH协议的原理类似。
HLS是一套解决方案,包括三个部分:Sever, CDN, Client。
以下是HLS整体架构图。
HLS_architecture.png
(1) Server
服务器端将视频数据流编码、封装和切割为连续的、时长很短的MPEG-TS格式的文件,通常一个ts分片大概是10s;并提供一个配套的媒体列表文件(m3u8文件)。
- 视频封装格式:MPEG-TS。
- 编码:视频编码为H.264,音频编码为AAC, MP3, AC-3或者EC-3格式。
(2) Distribution
由标准的网络服务器组成,接收客户端的请求和分发所有的资源包括m3u8列表文件和ts分片文件。
(3) Client
客户端先通过下载m3u8文件,再通过m3u8文件的索引地址顺序地拉取ts媒体文件播放。对于直播,它的索引文件一直处于动态变化的,你需要不断的更新索引文件 playlist 然后移除旧的索引文件。
一般为了加快速度,m3u8 放在 web 服务器上,ts 文件放在 cdn 上。
5. HLS的技术要点
- M3U8文件
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
- M3U8文件举例
以下是优酷网页版上抓取的一个点播视频的m3u8文件:
#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-VERSION:3
#EXTINF:5.533,
http://103.41.141.97/69768E58FFA34798E1A2220C0/03000A08005A25052B3FE5315660059AF6445B-C8C2-3AA7-D1BC-7A36EC3CC047.mp4.ts?ccode=0502&duration=2989&expire=18000&psid=5311a61ce438b35bc02d799930ffe6df&ups_client_netip=3a1f7431&ups_ts=1512432537&ups_userid=1313610383&utid=kan7ESyrxRkCATofdp0%2BqUUF&vid=XMzIwNDU5MDgwOA%3D%3D&vkey=A6235f86ca611217b5bab2a1872a3d01b&ts_start=0.0&ts_end=5.433&ts_seg_no=0&ts_keyframe=1
#EXTINF:3.4,
http://103.41.141.97/69768E58FFA34798E1A2220C0/03000A08005A25052B3FE5315660059AF6445B-C8C2-3AA7-D1BC-7A36EC3CC047.mp4.ts?ccode=0502&duration=2989&expire=18000&psid=5311a61ce438b35bc02d799930ffe6df&ups_client_netip=3a1f7431&ups_ts=1512432537&ups_userid=1313610383&utid=kan7ESyrxRkCATofdp0%2BqUUF&vid=XMzIwNDU5MDgwOA%3D%3D&vkey=A6235f86ca611217b5bab2a1872a3d01b&ts_start=5.433&ts_end=8.833&ts_seg_no=1&ts_keyframe=1
#EXTINF:6.0,
http://103.41.141.97/69768E58FFA34798E1A2220C0/03000A08005A25052B3FE5315660059AF6445B-C8C2-3AA7-D1BC-7A36EC3CC047.mp4.ts?ccode=0502&duration=2989&expire=18000&psid=5311a61ce438b35bc02d799930ffe6df&ups_client_netip=3a1f7431&ups_ts=1512432537&ups_userid=1313610383&utid=kan7ESyrxRkCATofdp0%2BqUUF&vid=XMzIwNDU5MDgwOA%3D%3D&vkey=A6235f86ca611217b5bab2a1872a3d01b&ts_start=8.833&ts_end=14.833&ts_seg_no=2&ts_keyframe=1
#EXT-X-DISCONTINUITY
#EXTINF:6.934,
http://103.41.141.143/6775BC8D97C3579BE19F330F2/03000A08015A25052B3FE5315660059AF6445B-C8C2-3AA7-D1BC-7A36EC3CC047.mp4.ts?ccode=0502&duration=2989&expire=18000&psid=5311a61ce438b35bc02d799930ffe6df&ups_client_netip=3a1f7431&ups_ts=1512432537&ups_userid=1313610383&utid=kan7ESyrxRkCATofdp0%2BqUUF&vid=XMzIwNDU5MDgwOA%3D%3D&vkey=A237eb2490a741b352c4ad88aa34b7bcf&ts_start=0.0&ts_end=6.834&ts_seg_no=41&ts_keyframe=1
#EXTINF:11.466,
http://103.41.141.143/6775BC8D97C3579BE19F330F2/03000A08015A25052B3FE5315660059AF6445B-C8C2-3AA7-D1BC-7A36EC3CC047.mp4.ts?ccode=0502&duration=2989&expire=18000&psid=5311a61ce438b35bc02d799930ffe6df&ups_client_netip=3a1f7431&ups_ts=1512432537&ups_userid=1313610383&utid=kan7ESyrxRkCATofdp0%2BqUUF&vid=XMzIwNDU5MDgwOA%3D%3D&vkey=A237eb2490a741b352c4ad88aa34b7bcf&ts_start=6.834&ts_end=18.3&ts_seg_no=42&ts_keyframe=1
#EXT-X-ENDLIST
以下是优酷网页版上抓的一个直播视频的m3u8文件:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:2725
#EXT-X-TARGETDURATION:4
#EXTINF:3.000,
golfeuroch1207_yk720/1512818441_20284.ts?auth_key=1544170706-0-0-08e2dcc3fcab2b922b9db6e769766ba4
#EXTINF:3.000,
golfeuroch1207_yk720/1512818444_20285.ts?auth_key=1544170706-0-0-0999e5b3eb9894217595997614046903
#EXTINF:3.000,
golfeuroch1207_yk720/1512818447_20286.ts?auth_key=1544170706-0-0-47621f58b2d0645b9bd30674195041b2
以上面的m3u8文件作为例子
#EXTM3U 每个M3U文件第一行必须是这个tag
#EXT-X-VERSION:3 版本号
#EXT-X-TARGETDURATION:12 ts分片的最大时长
#EXTINF:5.533, ts的持续时间(秒)
http://103.41.141.97/xxx.mp4.ts? ts文件的下载地址
#EXT-X-ENDLIST 切片终止标记
#EXT-X-MEDIA-SEQUENCE
定义当前m3u8文件中第一个文件的序列号,
每个ts文件在m3u8文件中都有固定唯一的序列号,
该序列号用于在MBR时切换码率进行对齐
- Media Segment:每个Media segment必须包含接着上一个Media segment的尾部内容是连续的,除非明确指明是了是“discontinuities”。
每个Meida segment应该包含足够的内容来初始化一个加密器和解码一个连续的帧序列包含这一片数据的最后一帧。
- Media Initialization Section: 一些媒体格式需要一个通用字节序列来初始解析器。可以在EXT-X-MAP中描述。
网友评论