HLS协议介绍

2018-11-27  本文已影响25人  smallest_one

目录

  1. 概述
  2. 诞生的原因
  3. 当前的应用场景
  4. 技术架构
  5. HLS的技术要点
  6. 参考阅读

1. 概述

HTTP Live Streaming(HLS)是苹果公司提出的基于HTTP的流媒体协议。

可实现流媒体的点播和直播,采用了动态码率自适应技术。最初是作为QuickTime, Safari, OS X, iOS软件的一部分,目前广泛地应用于点播和直播领域。

2. 诞生的原因

为什么苹果要提出HLS这个协议

3. 当前的应用场景

其实HLS最大的优势就是他的亲爹是苹果。苹果在自家的IOS设备上只提供对HLS的原生支持,并且放弃了flash。Android也迫于平果的“淫威”原生支持了HLS。

4. 技术架构

HLS跟MPEG-DASH协议的原理类似。

HLS是一套解决方案,包括三个部分:Sever, CDN, Client。

以下是HLS整体架构图。


HLS_architecture.png

(1) Server

服务器端将视频数据流编码、封装和切割为连续的、时长很短的MPEG-TS格式的文件,通常一个ts分片大概是10s;并提供一个配套的媒体列表文件(m3u8文件)。

(2) Distribution

由标准的网络服务器组成,接收客户端的请求和分发所有的资源包括m3u8列表文件和ts分片文件。

(3) Client

客户端先通过下载m3u8文件,再通过m3u8文件的索引地址顺序地拉取ts媒体文件播放。对于直播,它的索引文件一直处于动态变化的,你需要不断的更新索引文件 playlist 然后移除旧的索引文件。

一般为了加快速度,m3u8 放在 web 服务器上,ts 文件放在 cdn 上。

5. HLS的技术要点

  1. M3U8文件

M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

  1. 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时切换码率进行对齐

每个Meida segment应该包含足够的内容来初始化一个加密器和解码一个连续的帧序列包含这一片数据的最后一帧。

6. 参考阅读

上一篇下一篇

猜你喜欢

热点阅读