这个公众号会路线图式的遍历分享音视频技术音视频基础(完成) → 音视频工具(完成) → 音视频工程示例(进行中) → 音视频工业实战(准备)关注一下成本不高,错过干货损失不小 ↓↓↓

1、HLS 插片广告(HLS Interstitials)

参见:What’s new in HLS Interstitials[1]
HLS interstitials 是苹果在 2021 年提出的插片广告技术方案,它属于 HLS 技术规范,目标是为了更方便的在直播、点播场景中支持广告内容的部署。在此规范下,无论是在服务器端还是客户端,它不再需要依赖 SSAI 中的特殊标签。服务器可以插入 EXT-X-DATERANGE 标签来告诉客户端安排插片式播放,如下图所示:
EXT-X-DATERANGE
本期 HLS Interstitials 增加了新的特性支持,包括:
1)支持 CUE 属性配置。通过该属性来支持前插广告(PRE)、后插广告(POST);也可以指定是否一次性广告(ONCE)。
下图展示了如何使用 CUE 属性,以及为它设置 PREPOSTONCE 值的用法:
CUE
2)支持 X-SNAP 属性。通过该属性来对齐直播场景中广告插片的时间偏移。
在直播场景,由于封装器给 Playlist 打时间戳用的时钟和驱动编码器工作的时钟是不同的,如果两个时钟的不能严格同步,这时候就可能出现实际视频时长与 Playlist 时间戳标记时长的偏差。比如,下图示例的片段 0 前的时间标记到片段 100 前的时间标记差值有 800s,但是实际的视频时长略少于 800s,因为每个片段都略少于 8s。
时长差异
这种偏差可能会导致插片广告的偏移,无法对齐预期的插播位置,如下图所示:
插片广告偏差
这时候可以使用 X-SNAP 属性,来控制插片广告从最近的原内容切片边缘切入和切出。但是,注意只在直播场景使用这个属性,因为在 VOD 场景,不应该出现时钟偏移问题。
插片广告对齐切片边缘
X-SNAP
3)新增 HLS_start_offset 和 HLS_primary_id 请求参数。HLS_start_offset 用于获取广告已播时长;HLS_primary_id 用于标识播放片段和广告以避免重复播放相同广告。
HLS_start_offset 的一个使用场景是:当一个插片广告已经播了一段时长时,又想在后面的时长切换一个更合适的广告,这时候就需要请求广告已播时长,基于已播时长和之前安排的总广告时长来在后续的时长上安排新的广告。这里的请求地址是由 X-ASSET-LIST 指定。
HLS_start_offset
4)AVFoundation 提供 AVPlayerInterstitialController 和 AVPlayerInterstitialEvent 等 API。用来支持客户端中插广告播放。
主要是增加了对 CUEX-SNAP 属性的相关支持。比如,可以通过 willPlayOnce 设置插片广告直播一次,通过 alignsStartWithPrimarySegmentBoundary 设置 X-SNAP 的 snap out,通过 alignsResumptionWithPrimarySegmentBoundary 设置 X-SNAP 的 snap in。
AVPlayerInterstitialEvent

2、HLS 内容转向(HLS Content Steering)

参见:Deliver reliable streams with HLS Content Steering[2]
HLS Content Steering 是苹果公司为了提高全球性流媒体服务的可用性而提出的技术方案,它可以根据服务端负载和冗余情况来动态地将客户端引导到不同的服务器。
HLS 的内容转向机制比较容易理解。在没有内容转向机制之前,通过不同的 CDN URL 可以指向不同的 CDN 服务网络可以实现一定程度的负载分配,但是各个 URL 之间的优先级是无法被内容提供者所改变的。在内容转向机制下,每个变体流的 URL 多出了一个 PATHWAY-ID 属性,该属性将变体流分组到不同的路径中,其中每个路径通常对应一个 CDN。当客户端选取了一个路径时,只有该路径对应的流才会被选取。在使用流媒体服务期间,客户端会向内容转向服务器定期发出 Steering Manifest 请求,该请求是一个 HTTP GET 请求,转向服务器将会针对当前客户端的情况,向客户端发送一个转向清单,即 CDN 服务的优先级,客户端在收到来自转向服务器的转向清单后,将依据转向清单内容进行评估,以确定是否切换到不同路径。此外在 Steering Manifest 请求的返回内容中还有一个 TTL 字段,该字段表示多少时间内安排下一个 Steering Manifest 请求,转向服务器向每个客户端的 TTL 值注入一些随机性可以使服务器负载不至于过大。可以看到 HLS 内容转向机制的实现方式比较简单,这也使得该机制下的 HLS 服务可以较好地向后兼容。
下图展示了通过转向服务器向客户端下发 Steering Manifest 来调整 CDN 的负载:
HLS Content Steering
下图展示了增加 Content Steering 属性配置的 Playlist:
Steering Playlist
下图展示了 Steering Manifest 配置:
Steering Manifest
本期 HLS Content Steering 增加了新的特性:
1)HLS Content Steering 支持路径克隆功能。
该功能兼容 Content Stering 1.2。通过该功能可以向已有的 CDN 列表中添加新的 CDN 路径。配置文件中添加新的 CDN 路径时无需填写完整 URI,只需填写服务器和参数字段支持灵活的 URI 替换规则。
下图展示了随着数据增长需要扩增新的 CDN 服务的需求:
扩增 CDN
下图展示了扩增新的 CDN 时做 Pathway 的克隆时对应的配置:
扩增 CDN

参考资料

[1]
What’s new in HLS Interstitials: https://developer.apple.com/videos/play/wwdc2022/10145/
[2]
Deliver reliable streams with HLS Content Steering: https://developer.apple.com/videos/play/wwdc2022/10144/

- 完 -

推荐阅读
《iOS 视频处理框架及重点 API 合集》
《iOS 音频处理框架及重点 API 合集》
加我微信,拉你入群
谢谢看完全文,也点一下『赞』和『在看』吧 ↓
继续阅读
阅读原文