HLS

什么是HLS:HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

HLS协议是苹果推出的解决方案,将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10-30s左右)。
相比于FLV,HLS在iPhone和大部分android手机浏览器上的支持非常给力。
HLS协议客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可,而且网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器。
但是相比RTMP 这类长连接协议, 用到互动直播场景延时较高。

HLS(HTTP Live Streaming)是苹果公司推出的流媒体协议, 用于直播或点播场景, 应该算是当前平台兼容性最好的流媒体协议了. 其他主流的流媒体协议还有RTP(内容传输使用UDP)和Adobe的RTMP(基于TCP).

工作原理:是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。
三大部分:

1.Server :
服务器组件负责获取的媒体输入流 , 然后Media编码后 MPEG-4(H.264 video 和 AAC audio)格式
​然后用硬件打包到 MPEG-2 (MPEG-2 transport stream)的传输流中。
​图中显示,传输流会经过stream segmenter, 这里的工作是MPEG-2传输流会被分散为小片段然后保存为一个或多个系列的 .ts 格式的媒体文件。
​这个过程需要借助编码工具来完成,比如 Apple stream segmenter。
(视频类是.ts文件,纯音频会被编码为一些音频小片段,通常为 ADTS头的AAC、MP3、或者 AC-3格式。)
服务端可以采用硬件编码和软件编码两种形式,其功能都是按照上文描述的规则对现有的媒体文件进行切片并使用索引文件进行管理。
​而软件切片通常会使用 Apple 公司提供的工具或者第三方的集成工具。

 2. Distribution :
同时上面提到的那个切片器(segmenter)也会创建一个索引文件,通常会包含这些媒体文件的一个列表,也能包含元数据。
​他一般都是一个.M3U8的列表。列表元素会关联一个 URL 用于客户端访问。然后按序去请求这些 URL。

分布式系统是一个网络服务或者一个网络缓存系统,用于通过 HTTP 向客户端发送媒体文件和索引文件。
​不用自定义模块发送内容。通常仅仅需要很简单的网络配置即可使用。
​而且这种配置一般就是限制指定 .M38U 文件和 .ts 文件的 MIME 类型。

 3. client :
分配组件由标准的网络服务器。他们负责接受Client客户端请求并提供相关联的资源给客户端。

客户端开始时回去抓取 索引文件(.m3u8/.m3u),其中用URL来标记不同的流。
​索引文件可以指定可用媒体文件的位置,解密的密钥,以及任何可以切换的流。
​对于选中的流,客户端会有序的下载每一个可获得的文件。
​每一个文件都包含流中的连环碎片。一旦下载到足够量的数据,客户端会开始向用户展示重新装配好的媒体资源。
客户端负责抓取任何解密密钥,认证或者展示一个用于认证的界面,之后再解密需要的文件。
特点:
    平台兼容性好

    基于HTTP嘛, 站在这么高的网络层上, 网络兼容性肯定强, 穿个防火墙当然没问题; 通杀当今主流浏览器, 一也是HTTP嘛, 与浏览器天然兼容, 二是现代H5浏览器的提供的MSE(Media Source Extensions)媒体源扩展接口的支持, 使得在用户浏览器端实现音视频数据的自定义组装与编码转换得到了应用, 从而支持了无第三方插件的支持下的自定制音视频源的播放. 非H5浏览器那只能依靠第三方插件了, 如flash

    当前除苹果的Safari浏览器原生支持HLS外, 其他H5浏览器都未支持, 但都可以使用MSE和flash技术实现, 如videojs-contrib-hs

    媒体内容数据分块管理与分块传输

    内容数据会被切分为小块, 多为10秒左右一小块. 每块可以有自己的属性, 如不同的加密密钥或向量

    支持多码率自适应

    可根据当前数据传输的质量自动选择相应的码率的流媒体数据源, 这需要服务端准备好多份不同码率的数据源. 当然也可以手动选择, 播放端实现支持即可

    直播应用时延较大

    是相对RTP和RTMP这些而言. RTMP通常为3秒左右, HLS通常为10秒以上. 主要是因为分块大小通常为10秒的原因, 相当于当前录制的内容要10秒后才会生成一个完整的分块文件让客户端下载. 当然也可以缩小分块大小来增加实时性, 但又会造成文件过小, 形成碎片文件, 造成存储空间的浪费

    不支持组播

    HTTP基于TCP, 自然就不支持组播技术了, 这是UDP的’专利’. 这自然就导致服务器流量和运算都会随用户数据增长而增长明显了

会话模式:

通常包含 Live 和 VOD (点播)两种:

1.点播VOD:

特点就是可以获取到一个静态的索引文件,其中那个包含一套完整的资源文件地址。

这种模式允许客户端访问全部节目。
​VOD点播拥有先进的下载技术,包括加密认证技术和动态切换文件传输速率的功能(通常用于不同分辨率视频之间的切换)。

2.Live 会话:

就是实时事件的录制展示。它的索引文件一直处于动态变化的,你需要不断的更新索引文件 playlist 然后移除旧的索引文件。

3.Live转VOD:

这种类型通过向索引文件添加媒体地址可以很容易的转化为VOD类型。

在转化时不要移除原来旧的源,而是通过添加一个 #ET-X-ENDLIST
标记来终止实时事件。

转化时如果你的索引文件中包含 EXT-X-PLAYLIST-TYPE标签,你需要将值从 EVENT改为 VOD。

HLS协议规定:

. 视频的封装格式是TS。

. 视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。

. 除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。

你可能感兴趣的:(HLS)