2.3.2 HLS协议
HTTP Live Streaming(HLS)是苹果的技术,用于将实时和按需的音频/视频内容流到iPhone、iPad、iPod touch、Apple TV和Mac上。HTTP允许您使用普通的web服务器(而不是专门的流媒体服务器)轻松地将媒体内容部署到流中。HLS流的行为类似于常规的web流量。它们使用现有的缓存基础设施,如内容传递网络(CDNS),并可靠地通过典型的防火墙和路由器。HLS适应可变的网络条件,动态调整回放,以匹配有线和无线连接的可用速度。
除了可靠性和易于部署外,HLS还支持交付商业内容的重要功能:关闭字幕、快速转发和反向播放、备用音频和视频、后备选项、定时元数据、广告插入和内容保护。在典型的HLS工作流中,支持HLS的视频编码器解决方案接收一个实时视频提要或分发的媒体文件。编码器在不同的比特率、分辨率和质量级别上创建了多个版本(称为变体)的音频/视频。编码器然后将这些变体分割成一系列的小文件,称为媒体段。与此同时,编码器为每个变量创建一个媒体播放列表文件,其中包含指向该变体的媒体段的url列表。编码器还创建了一个主播放列表文件,其中包含了对可变媒体播放列表的url列表,以及控制流播放行为的描述性标记。在生成播放列表和片段时,编码器或自动脚本将文件上载到web服务器或CDN。通过在web页面中嵌入到主播放列表文件的链接,或者创建自己的自定义应用程序来下载主播放列表文件,您可以提供对内容的访问。
关键特性
HLS技术允许您通过HTTP传输内容,并允许在网络环境变化时自动切换流。这些属性使得HLS成为媒体发行的一个很好的解决方案。此外,该技术还包括可用性、可用性、广告和安全性等特性。您可以使用以下可扩展的解决方案来构建质量。
M3U8
编码器将媒体播放列表作为保存在M3U格式的文本文件(.m3u8)。媒体播放列表包含媒体段的url和播放所需的其他信息。播放列表类型的实时、事件或视频点播(VOD)决定了如何导航流。
实时播放列表让观众在有限的时间范围内快速前进和反向播放。在活动结束之前,该程序的范围会一直向前推进。事件播放列表让观看者返回到流的开始,即使它继续流。VOD播放列表表示一个以前完成的程序,可以从头到尾完全导航。
当新创建的媒体段在服务器上可用时,实时和事件类型的程序都需要对媒体播放列表进行更新。编码器将新媒体段引用添加到播放列表的末尾,并将更新后的播放列表上传至服务器。
在live播放列表中,如图1所示,可以从媒体播放列表中删除对旧媒体段的引用,并将一个滑动窗口提供给连续流。
一个简单的m3u8文件
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:26
#EXTINF:9.901,
http://xx.easy.com/a/segment1.ts
#EXTINF:9.901,
http://xx.easy.com/a/segment2.ts
#EXTINF:9.501,
http://xx.easy.com/a/segment3.ts
播放列表中#EXT-X-PLAYLIST-TYPE:EVENT。这个名称提醒媒体播放器,这个播放列表的行为将与一个实时媒体播放列表不同。事件播放列表保留对旧媒体的引用,同时获得新的引用。这个过程会产生一个扩展的媒体播放列表。这种类型的播放列表允许玩家从程序的开始自由地(向后和向前)导航。由于所有媒体片段的引用都保留在活动列表的播放列表中,所以事件播放列表很容易被转换为VOD播放列表。
一个媒体播放列表
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:EVENT <-----
#EXTINF:9.901,
http://xx.easy.com/a/segment1.ts
#EXTINF:9.901,
http://xx.easy.com/a/segment2.ts
#EXTINF:9.501,
http://xx.easy.com/a/segment3.ts
VOD播放列表包含了对所有可用媒体段的引用,以完成完整的表示,并开始结束。这种播放列表允许玩家游览整个程序。一个VOD #EXT-X-ENDLIST标签标志着可下载媒体片段的结束。
一个完整的VOD播放列表
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.9001,
http://media.example.com/wifi/segment0.ts
#EXTINF:9.9001,
http://media.example.com/wifi/segment1.ts
#EXTINF:9.9001,
http://media.example.com/wifi/segment2.ts
#EXT-X-ENDLIST
主播放列表
主播放列表为流中的每个媒体播放列表提供一个地址。主播放列表还提供了重要的细节,如带宽、分辨率和编解码器。玩家使用这些信息来决定设备的最合适的变体和当前测量的可用带宽。
主播放列表显示了四个变体。在主播放列表中,媒体播放列表的顺序无关紧要,除非您启动了流。玩家开始下载它可以播放的第一个版本。如果条件允许,玩家切换到另一个媒体播放列表中流。
播放列表与切片关系
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2855600,CODECS="avc1.4d001f,mp4a.40.2",RESOLUTION=960x540
live/medium.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5605600,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1280x720
live/high.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1755600,CODECS="avc1.42001f,mp4a.40.2",RESOLUTION=640x360
live/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=545600,CODECS="avc1.42001e,mp4a.40.2",RESOLUTION=416x234
live/cellular.m3u8
只下载一次主播放列表。然而,媒体播放列表的下载数量随播放列表类型而异。对于实时和事件广播,播放器在每个段持续时间后下载媒体播放列表文件,因为播放列表可能随着新段的更新或随着流的进展而丢失旧段。对于VOD,玩家只下载一次媒体播放列表,如图2-2所示。
图2-2
快速向前和反向播放
HLS支持快速向前和反向回放,通过使用I-frame播放列表。I-frame播放列表指向已经存在的媒体段内的一个字节范围。快进和反向回放不需要特殊的媒体段。
交替音频和视频播放
HLS主播放列表提供了多种音频渲染,这是本地化的一个很有价值的特性。例如,您的主播放列表可能包括多种语言音轨,如法语、德语、西班牙语和英语。音轨中包含未被屏蔽的(信号未被组合)音频片段。主播放列表文件控制回放。
HLS还支持多个视频流;例如,体育赛事的多个视频角度。同样,主播放列表文件控制回放。
回退和流交替
在你的主播放列表中,替代媒体播放列表不仅可以作为带宽或设备的替代品,还可以作为失败的后备。如果播放器不能重新加载媒体播放列表文件——由于诸如404错误、服务器崩溃或内容分发服务器节点问题——试图切换到另一个服务器上提供的兼容媒体播放列表。提供具有相同带宽的多个媒体播放列表,播放器切换到相同的播放列表,提供一致的流性能。
定时的元数据
您可以向媒体流段添加各种元数据。这些数据在回放期间为应用程序提供了额外的信息。例如,将专辑的艺术、艺术家的名字和歌曲的标题添加到音频流中,或者将当前目标人物名字和统计数字添加到视频中。
在给定的时间偏移量中插入额外的数据,称为定时元数据。(可选地,在给定的时间之后将定时元数据插入到所有片段中)。
广告插入
HLS通过间断标记可以将广告。播放列表中的标记平滑地在不同内容之间转换。
内容保护
媒体段可以使用采样级加密进行单独加密。在播放列表文件中显示相应的关键文件,这样用户就可以获取解密的密钥。
HLS支持与您选择的方法进行密钥交换。静态键、编码器生成的键和频繁更新的键只是其中的几种可能。
iOS应用程序要求
以下要求适用于提交给App Store的iOS应用,供苹果产品使用。根据苹果公司的决定,不兼容的应用程序可能会被拒绝或删除。
- 如果你的应用程序通过蜂窝网络传输视频,并且视频在5分钟内超过10分钟或5 MB,你就必须使用HLS。您可以使用渐进式下载的小片段。
- 如果你的应用程序在蜂窝网络上使用HLS,你必须至少提供一个192 Kbps或需求更低带宽的流。低带宽的流可以是音频的,也可以是带有静态图像的音频。