2009年,Apple推出了HLS(HTTP Live Streaming)——基于HTTP的自适应码率流媒体传输协议。HLS描述了一组通过互联网提供音视频服务的工具和程序。一个视频可以被分割成多个视频切片,这些切片的传送位置和顺序在一组被称为播放列表的XML文件中,该文件以文件扩展名m3u8结尾。人们可以使用兼容了HLS的播放器播放视频。
注:原文说HLS使用了XML文件,是一个错误的说法,为了保留和原文一致,翻译并未去纠正这个错误,实际上,HLS 使用的是M3U8 文件,它是基于M3U扩展的UTF-8文本文件。
在本篇文章中,我们将深入了解实现HLS视频流的程序和工具。
HLS的历史
2009年,Apple在推出iPhone 3时,同时推出了HLS。目的是提升iPhone用户的媒体传输体验,并且使用户不再遇到带宽波动和传输受到干扰等问题。从那时起,Apple便一直定期改进HLS,使它成为可靠、被广泛支持的视频传输协议。
Apple的网站上有大量相关文档,包括创作指南、HLS简介、HTTP实时流媒体等。你也可以参考相关规范,查看HLS的更多细节并对它有更多了解(其中有对各种标签的清晰解释,以及ABR视频流的详尽介绍)。
HLS的架构
HLS并不需要高级的硬件来传输视频,它是一个简单高效的协议。通过HLS,你可以使用常规的Web服务器存储和分发内容。但是它需要将数据存储在适当的格式中,且客户端软件能够获取并处理HLS视频内容。让我们一起来看看HLS视频传输服务的架构是什么样子。
编码器:该编码器可以生成H.264/AVC或者HEVC内容,并遵守Apple创作规范中指定的标准。这些指南非常全面且具体。比如,它们为每个所支持的编解码器指定容器格式。对于H.264来说,你必须使用fMP4或者TS(Transport Stream)。当你在创建自己的HLS流媒体服务器时,请务必阅读指南内容。
打包器(Packager):打包器获取视频后,将其切割成短的视频切片(如10秒长)。比如,一个小时的电影会被切割成360个10秒长的视频切片,然后创建一个被称为播放列表的文件,其中包含视频名字、位置以及切片播放序列(和描述编解码器、分辨率和码率等的元数据一起)。创建这些视频切片的过程被称为视频分片,或者更为人所熟知的打包。
We