01_概述

HTTP Live Streaming (HLS) 通过 HTTP 从普通 Web 服务器发送音频和视频,以便在基于 iOS 的设备(包括 iPhone、iPad、iPod touch 和 Apple TV)和台式电脑 (macOS) 上播放。HLS 使用与 Web 相同的协议为 Web 提供支持,使用普通 Web 服务器和内容交付网络部署内容。HLS 旨在提高可靠性,并通过优化有线和无线连接的可用速度的播放来动态适应网络条件。

HLS 支持以下内容:

编码和传输流媒体

下图显示了 HTTP 实时流的三个组件:服务器组件、分发组件和客户端软件。


在典型配置中,硬件编码器接收音频-视频输入,将其编码为 HEVC 视频和 AC-3 音频,并输出分段的 MPEG-4 文件或 MPEG-2 传输流。然后,软件流分割器将流分解为一系列短媒体文件,这些文件放置在 Web 服务器上。分段器还创建并维护包含媒体文件列表的索引文件。索引文件的 URL 发布在 Web 服务器上。客户端软件读取索引,然后按顺序请求列出的媒体文件,并显示它们,片段之间没有任何停顿或间隙。

使用服务器组件准备媒体

服务器组件负责获取媒体的输入流并以数字方式对其进行编码。它以适合交付的格式封装它们,并准备封装的介质进行分发。

对于实时事件,服务器需要一个媒体编码器(可以是现成的硬件),以及一种将编码的媒体分解为片段并将它们另存为文件的方法,这些文件可以是 Apple 提供的媒体流分割器等软件,也可以是集成的第三方解决方案的一部分。

使用分发组件传输文件

分发系统是通过 HTTP 将媒体文件和索引文件传送到客户端的 Web 服务器或 Web 缓存系统。交付内容不需要自定义服务器模块,并且通常只需要在 Web 服务器上进行很少的配置。若要实际部署 HTTP 实时流式处理,需要为浏览器创建 HTML 页面或客户端应用以充当接收器。我们还需要使用 Web 服务器和一种方法将实时流编码为包含 HEVC 或 H.264 视频以及 AAC 或 AC-3 音频的碎片 MPEG-4 媒体文件。

通过客户端软件访问媒体

客户端软件负责确定要请求的适当媒体,下载这些资源,然后重新组装它们,以便媒体可以连续流呈现给用户。

Apple 提供了多个支持 HTTP Live Streaming 的框架,包括 AVKit、AVFoundation 和 WebKit。自 iOS 3.0 和 Safari 4.0 以来一直提供支持,因此无需开发自己的客户端软件。

但是,如果我们确实开发了自己的客户端软件,请首先使用标识流的 URL 提取索引文件。索引文件反过来指定可用媒体文件、解密密钥和任何可用备用流的位置。对于所选流,按顺序下载每个可用的媒体文件。每个文件都包含流的连续段。下载足够数量的数据后,将重新组装的流呈现给用户。

重要
客户端负责获取任何解密密钥、进行身份验证或提供用户界面以允许身份验证,以及根据需要解密媒体文件。

继续此过程,直到客户端在索引文件中遇到 EXT-X-ENDLIST 标记。如果不存在 EXT-X-ENDLIST 标记,则索引文件是正在进行的广播的一部分。在正在进行的广播期间,定期加载索引文件的新版本。在更新的索引中查找新的媒体文件和加密密钥,并将这些 URL 添加到播放队列。