HLS

19-03-24 了解HLS

HLS

Posted by Wangchenchen on 2019-03-24

​ HLS 是由苹果公司提出并且进行推广的,我们直接引用一段维基百科的内容:

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP流媒体网络传输协议。是苹果公司QuickTime XiPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
苹果公司把HLS协议作为一个互联网草案(逐步提交),在第一阶段中已作为一个非正式的标准提交到IETF。但是,即使苹果偶尔地提交一些小的更新,IETF却没有关于制定此标准的有关进一步的动作。

协议内容:

​ HLS协议规定:

  1. 首先,整个视屏都是TS格式的,一部影片并不是只有一个下载链接,而是有许多的ts文件地址组成;

  2. 视频的编码格式是H264,音频编码格式是MP3,ACC或者AC-3

  3. 其次在整个HLS的格式中有个很重要的文件 M3U8(文本文件),主要是用来控制和记录播放的每个ts地址;

    ​ 苹果研究这个协议的主要原因:

    1. 不被频闭:正常的视屏传输都是基于TCP协议的进行传输,这就要求双方都要实时在线,而且在一些特殊网络环境中会将TCP的端口禁掉这就会使是视屏无法播放;
    2. 负载,面对这个问题,HLS因为是基于Http请求的所以就不需要实时在线,服务端需要内容时就直接通过Http协议向server端进行请求下载就可以了;
    3. 码率,又叫比特率,首先对于码率是越高,说明他每秒的传送数据就越多,画质就会越清晰;在回到HLS中,在HLS中对于码率是自适应的,不同带宽的设备可以自动切换到最合适自己的码率的视频播放上。
    4. 缺点:前面说了那么多好处是不是就感觉他完美了呢?其实并不是,在他兼顾了前面的哪些之后在面对实时性这个问题上就不是那么完美了,在和其他协议(例如 RTMP协议)进行比较时在视频延迟方面是有无法跨越的沟,HLS直播的视屏延迟无法到10秒以下,但是RTMP 最低的延迟能够降到 3 4 秒左右;

HLS的index文件—M3U8文件:

  1. 如果你下了一个M3U8文件,这是你的同事也下了一个但是你发现你们两个人的文件内容不一样如图:

    A1

m3u8一级文件

A2:

m3u8二级文件

上面的内容就用A1,和A2表示,A1的格式属于一级文件;A2的格式属于二级文件;

什么是一级文件,什么是二级文件?

​ 一级文件:如A1在进入页面中直接能够看到以ts结尾的文件路劲名;

​ 二级文件:如A2在进入文件中时并不能直接看到以ts结尾的文件名而是.m3u8的文件名这时候就需要进行一个文件拼接将A1的路劲+A2中所能看到的一级路径,就能得到二级路径,里面就是ts的链接段;

​ 总结: 一级文件能够直接得到ts的文件,但是在二级文件中不能直接得到ts下载连接,只有通过地址拼接才能从一级连接中获得二级连接文件,在二级文件中得到ts下载连接;

关于播放模式:

1. 点播VOD:这个是直接得到当前所有的一级文件和二级文件,以及所有的ts文件,这种模式允许服务端访问所有的内容;
2. Live 实时生成M3U8和ts文件。它的索引文件一直动态变化,播的时候需要不断下载二级index如果末尾没有#EXT-X-ENDLST,说明他是一个live视屏流;

以上就是关于HLS总结,如果不足之处希望批评指针;欢迎留言,邮箱如下:

jsntwangchenchen@outlook.com;