Highlight
Low-Latency HLS 的服务器侧广告插入要把广告也按 Partial Segment 发布,并为广告和节目内容同时提供 Blocking Playlist Reload 与 preload hints,才能在广告切换时维持低延迟播放模型。
核心内容
普通直播 HLS 的广告插入靠 segment 边界工作。节目源带着可插入广告的 marker,packager 在广告开始前补一个短节目 segment,把边界对齐到 segment,再用 discontinuity tag 切到广告。广告结束后,它再补一个短广告 segment,然后切回节目。
低延迟直播把这个模型变细了。客户端不再等完整 segment 出现,而是贴着 live edge 读取更短的 Partial Segment。一个 6 秒 parent segment 可以拆成多个 2 秒 partial,客户端两秒后就能拿到第一段媒体,不必等完整 6 秒。
广告插入因此不能只发布完整广告 segment。广告开始后,packager 也要每隔一个 partial duration 发布广告 Partial Segment。parent segment 仍然存在,discontinuity、边界对齐、key rotation 的位置也不变。变化在 live edge:播放器看到的是更频繁出现的广告 partial。
还有一个直播里常见的麻烦:early return。赛事直播中,制作方可能在广告尚未播完时切回现场。此时服务器要停止广告 partial,补出一个到当前点为止的短 parent segment,更新 preload hint,让客户端转向下一段节目 partial。
详细内容
Partial Segment 改变广告插入的节奏
(01:51)Low-Latency HLS 在 live edge 使用 Partial Segment。演讲用 6 秒 segment 与 2 秒 partial 举例:客户端两秒后可以拿到 segment 的第一部分,四秒后拿到更多内容,六秒后拿到最后一个 partial 和 parent segment。
这个节奏直接影响广告。packager 不能等完整广告 segment 都准备好才更新 playlist。它要在 parent segment 生成过程中持续发布广告 partial,让客户端在广告段落也能按照同一套 live edge 规则播放。
关键点:
parent segment是完整的常规 HLS segment。Partial Segment承载同一段媒体,但更早出现在 playlist。- 客户端用 Partial Segment 贴近 live edge 播放,避免等待完整 segment 的发布延迟。
- 广告内容也要先按 partial duration 发布,parent segment 随后出现,否则切到广告时会退回普通 HLS 的延迟模型。
广告边界仍然靠短 segment 和 discontinuity 对齐
(02:54)普通 HLS 的服务器侧广告插入先处理边界。marker 不一定落在常规 segment 边界上,packager 可能要生成一个短节目 segment,让广告开始点刚好落在 segment 边界。切换广告时,用 discontinuity tag 分隔节目和广告。
典型顺序是:节目源给出可插入广告的 marker,decisioning engine 选择广告,packager 用短节目 segment 对齐广告开始点,然后用 ad segment 替换后续节目 segment。广告结束点也可能不在常规 segment 边界上,所以 packager 还要生成短广告 segment,再回到节目内容。
关键点:
- marker 来自节目源,表示哪里可以插入广告。
- 短节目 segment 让广告开始点变成明确边界。
- discontinuity tag 标记节目内容与广告内容的切换。
- 广告结束点也可能不在 segment 边界上,所以需要短广告 segment。
广告也要先以 Partial Segment 发布
(04:20)低延迟场景继续使用同一套广告边界,但发布顺序更细。广告开始后,packager 先按 partial duration 发布广告 partial;当一个 parent segment 的所有 partial 都到齐,再发布完整广告 parent segment。
演讲里的时间线是:节目 partial 正常推进,广告边界前出现一个短节目 partial 与 parent segment。进入广告后,packager 每两个秒级 partial duration 增加一个广告 partial。凑齐一个完整广告 segment 后,parent segment 跟着出现。广告结束时,再用短广告 partial 对齐边界,然后恢复节目 partial 和 parent segment。
关键点:
- ad boundary、discontinuity 和 key rotation 的位置保持在同一条时间线上。
- 低延迟差异发生在发布粒度:广告 segment 先拆成 Partial Segment 出现在 live edge。
- packager 必须为节目和广告都维持同一个 low-latency timing model。
- 如果广告只按完整 segment 发布,播放器会在广告段落失去低延迟优势。
Blocking Playlist Reload 也覆盖广告段落
(05:48)演讲明确要求 origin 对广告也实现 Blocking Playlist Reload。客户端请求下一个 playlist 版本时,服务器不要立即返回旧 playlist,而是等到新的 partial 或 segment 可用后返回。
这个要求不只适用于节目内容。广告 partial 进入 playlist 前,origin 也要维持同样的等待语义。这样客户端拿到的 playlist 才会继续贴近 live edge,而不是在广告段落反复收到过时版本。
关键点:
- Blocking Playlist Reload 是 HLS Origin API 的组成部分。
- 它保护的是 playlist 更新时机,不只适用于节目内容。
- 广告段落若立即返回旧 playlist,客户端会拿到 stale playlist,低延迟播放会被拖慢。
- 广告和节目共用同一套等待与发布节奏,播放器才不用在切换处改策略。
Preload hints 要提示广告 MAP 和广告 partial
(06:08)Preload hinting 要求 playlist 写出下一个预计出现的资源 URL。广告切换时,playlist 可以先提示新的 media initialization section,再提示广告的第一个 Partial Segment。
演讲示例里,segment 7 是当时最后可用的节目内容。playlist 末尾先给出两个 preload hints:一个提示客户端加载广告需要的新 media initialization section,一个提示广告的第一个 partial。两秒后,playlist 更新出 discontinuity、广告 map tag 和广告第一个 part tag,新的 preload hint 再指向广告第二个 partial。
关键点:
TYPE=MAP提示即将用于广告内容的新初始化信息。TYPE=PART提示下一个广告 Partial Segment。- 广告是预录内容,ad origin 不需要像实时节目源那样等待编码完成。
- playlist 仍然要持续更新 hint,让客户端一直知道下一个要请求的广告资源。
Early return 时更新 hint,直接切回节目
(07:55)early return 指直播制作方提前结束广告,立刻切回节目。服务器可以停止发布后续广告 partial,补出一个到当前已发布 partial 为止的短 parent segment,随后用 discontinuity 切回节目。
关键处理点是 hint。服务器之前可能已经提示了下一段广告 partial。等它知道要提前回到节目后,就要把 hint 改到下一个节目 partial。客户端看到新的 hint 后,会切回节目内容的加载路径。
关键点:
- 已经发出的旧 hint 可能指向下一段广告 partial。
- 服务器知道要提前返回节目后,把 hint 改成下一段节目 partial。
- 客户端看到新的 hint,就停止沿着广告库存继续加载。
- 这个处理让突发直播内容可以立刻回到节目,同时保留低延迟加载路径。
核心启发
-
做什么:给低延迟直播 packager 增加广告 partial 发布链路。 为什么值得做:演讲明确指出广告在 LL-HLS 中要先以 Partial Segment 出现在 live edge。 怎么开始:复用节目内容的 partial duration,把广告素材切成同样节奏的 partial,并在完整 parent segment 可用时一并发布。
-
做什么:把广告切换点做成可观测的 playlist 校验项。 为什么值得做:广告开始和结束都依赖短 segment、discontinuity 与边界对齐。 怎么开始:在自动化检查里扫描广告 marker 附近的 playlist,确认短 segment、discontinuity tag、广告 map tag 和广告 partial 的顺序正确。
-
做什么:为 SSAI(Server-Side Ad Insertion,服务器侧广告插入)实现 hint 重写能力。 为什么值得做:early return 会让已经发布的广告 hint 失效,服务器必须把它改向节目 partial。 怎么开始:在决策引擎发出提前返回信号时,让 packager 生成短广告 parent segment,并把下一条 preload hint 改成节目 URI。
-
做什么:把广告 origin 和节目 origin 的阻塞语义分开配置。 为什么值得做:演讲指出广告为预录内容,ad origin 不需要强制阻塞等待;playlist origin 仍要为广告和节目执行 Blocking Playlist Reload。 怎么开始:把 playlist 生成服务作为低延迟控制点,让它负责 blocking reload 和 hint;广告媒体文件可以由普通静态 origin 或 CDN 提供。
-
做什么:在播放器测试中加入广告段落的 live-edge 延迟曲线。 为什么值得做:广告如果退回完整 segment 发布,用户会在广告处看到延迟跳变。 怎么开始:记录节目 partial、广告 partial、parent segment 和 playlist 返回时间,分别计算广告前、广告中、广告后的 live-edge 距离。
关联 Session
- What’s new in Low-Latency HLS — 理解 Partial Segment、live edge 和 Low-Latency HLS 基础模型。
- Discover HLS Blocking Preload Hints — 深入 preload hint,广告切换中的 MAP 与 PART 提示依赖这套机制。
- Reduce latency with HLS Blocking Playlist Reload — 解释 playlist 请求如何阻塞等待下一次更新,是广告段落保持低延迟的前提。
- Optimize live streams with HLS Playlist Delta Updates — 适合处理大型直播 playlist 的传输成本,与低延迟直播部署相关。
- Improve stream authoring with HLS Tools — 用 HLS 工具验证 playlist、媒体分片和低延迟 authoring 结果。
评论
GitHub Issues · utterances