在新一批观众接入前,控制器看到了三条路径。A 成本低,QoE 数据也不错,但检查发现,交付片段与独立参考样本不一致。B 同样有吸引力,可当前上下文中缺少足够的确认依据。C 更贵,但现有检查结果支持先限量发放指向 C 的起始播放链接,再观察实际接入和播放结果,决定是否继续。
应该选哪条路径?答案取决于决策顺序。如果一开始就把成本、起播、卡顿和内容正确性压进一个总分,低成本就可能抵消一项原本不允许被补偿的违规。如果先检查动作是否满足准入条件,A 和 B 就不会进入偏好比较。同时,它们被排除的原因仍然不同。
先检查动作是否满足准入条件,再比较合格选项,单独授权一个受限步骤,并用它的实际结果支持下一次决策。 这里的一个策略引擎,意味着一致的决策契约,不要求把所有内容放进一个公式或一个进程。
1. 先明确动作的规模
来看一个例子:新观众正在接入同一个直播频道。我们把观察群体限定在同一地区、同一互联网服务商和同一类浏览器客户端。所有人接收同一个编码版本(rendition),其编码参数相同。
这次决策只涉及声明时段内的新会话。修改新会话的路径选择规则,不会让已经播放的客户端自动迁移。
我们自己的会话准入服务发放起始 HLS 媒体播放列表 URL。应用通过 Hls.loadSource 把它交给 hls.js。这个 API 的文档语义是设置初始 URL。权限检查、发放上限和结果评估,则属于我们自己的应用契约。
本文的一次“分配”,是指准入服务选定一条交付路径,并返回对应的起始播放列表 URL。每次分配按唯一标识去重计数。同一标识的重试,不增加分配次数,也不会产生新授权或延长访问期限。
本例只使用所选编码版本的一个 HLS 播放列表。视频和音频一起封装在 MPEG-TS 中,不使用 DRM,也不使用独立音频轨。播放开始后,应用不会自动更换源。分片链接必须对应分配的路径。没有隐藏回退、加载器行为符合要求,这些都是所选客户端的前提,仍需在具体构建版本上确认。
动作可以这样描述:在限定时段内,以受限速率,为不超过指定数量的新请求分配路径 C,按唯一分配标识计数。 如果使用比例,分母是该时段内所有符合条件、去重后的新准入请求。这还不是字节、活跃播放或源站(origin)请求所占的比例。
| 路径 | 当前决策中已经确定的情况 | 后果 |
|---|---|---|
| A | 完整且适用的比较发现音视频(A/V)与参考样本存在差异 | MISMATCH:禁止新增分配 |
| B | 现有依据的整体不足以完成所需评估 | UNKNOWN:按本例策略,不准入新的分配 |
| C | 预检得到 MATCH;访问和最低 QoE 满足要求;资源预测允许这一步的规模 | 可以单独授权受限发放 |
在新步骤前要求正面的内容依据,是本例的策略。B 的 UNKNOWN 不代表已经确认内容被替换。相同的“不分配”动作,并不会让 A、B 的评估状态变成同一个状态。这延续了关于可用性与可验证性的文章中对评估和策略的区分:缺少确认仍然保留自己的含义。
2. 分清要求、评估与授权
通常,要求由负责视频服务的团队制定:什么质量是最低可接受的,如何检查内容正确性,以及给新连接分配多少资源和费用。团队也会规定,在满足这些要求的选项中如何选择。
独立的预期内容来源决定交付内容应当与什么比较。观测和评估提供有限范围的依据。控制器决定是否授权这一步,会话准入服务执行授权。
这把第 15 篇关于控制平面、数据平面和验证平面的职责划分应用到了一次具体操作中。多个角色可以处于同一进程;仅仅画出不同角色,并不能证明它们的故障相互独立。
在本例中,由一个负责组件统一管理源站和共享缓存层(shield)的公共资源预算。它记录已经承担的负载,以及为后续步骤预留的资源,避免不同控制器把同一份空闲余量分配多次。也可以采用其他方案,让多个参与者协商分配资源。我们会在后续的一篇独立文章中讨论这些方案。

每项依据都保留检查对象、路径、编码版本、区间、实际观测时间和预期内容的版本。适用性检查要回答:这些数据能否用于这次提出的动作?观测的有效期限从实际观测时刻开始计算。即使尚未达到规定的最长有效期限,节目或路径变化也可能使其不再适用。重新发送旧报告不会重置这个起点。
检查结果与授权承担不同职责。MATCH 不会赋予执行器权限,资源计算通过也不能代替授权。控制器还必须检查当前的控制意图和策略、自己的权限范围,以及整个步骤的条件。
3. 先检查强制条件,再谈偏好
准入要求包括:访问方式兼容、内容依据充分、达到最低 QoE、有支撑这一步规模的资源依据,以及符合费用预算。必要数据必须适用,并且足够新。已经确认的违规会排除该动作;缺少必要依据也不能准入,但原因仍然保留为 UNKNOWN。
内容检查到底比较什么
把我们的检查配置命名为 Exact-AV v1。独立于 CDN 的参考内容提供方,在内容进入 CDN 前,保存同一编码版本已经编码后的副本。它把参考副本与频道、节目分配关系的版本,以及预先选定的区间 I 绑定。有损编码之前的原始采集数据,不适合直接作为这种精确比较的参考。
本例使用 H.264 8-bit 4:2:0 和 AAC-LC 48 kHz 立体声,所选编码版本的参数固定。检查区间连续,不跨媒体时间轴或参数的不连续边界(discontinuity)。
解码边界已知,并提供必要的编解码配置和前置媒体数据(pre-roll)。前置媒体数据位于检查区间之前,用于建立正确解码所需的状态,不扩大实际比较区间 I。AAC 起始延迟(priming)的样本处理方式,以及裁剪规则,都事先确定。时间对应关系独立于比较过程建立,不允许搜索“最相似”的时间偏移。
参考媒体单元与经普通 CDN 路径实际取得的媒体单元,使用同一个固定软件解码配置 DecodeProfile,在彼此独立的解码上下文中解码。它的版本、构建、平台、设置和输出格式都在检查前确定。比较对象包括:
- 视频:帧数、帧顺序、相对呈现时间戳,以及 YUV420p8 中 Y/U/V 的有效像素,不把行存储步长(stride,相邻行起点在内存中的间距)和对齐填充(padding)作为图像内容比较;
- 音频:采样数量、顺序、时间对应关系,以及 PCM f32le 的值,即 IEEE-754 binary32 小端、L/R 交错排列;不额外舍入,也不做音量归一化。
视频帧按呈现顺序比较。允许传输封装变化,以及事先确定的时间轴映射,但必须保持所选 A/V 和相对时间结构。转码、缩放、叠加内容、改变颜色或音量、重采样、声道混音,都不在该配置范围内。
| 评估结果 | Exact-AV v1 的条件 |
|---|---|
| MATCH | 适用性已确认,区间 I 内两条轨道均被完整观测,所有规定的比较都一致 |
| MISMATCH | 适用性已确认,且对区间 I 的完整观测已足够支持判定时,确认视频、音频、顺序或时间结构存在具体差异 |
| UNKNOWN | 缺少参考样本、观测覆盖或映射;配置不兼容;解码或检查尚未完成,或结果存在歧义 |
只有在完整观测区间内确认某帧实际缺失,才能把缺帧判为差异。检查数据丢失和解码失败,本身不会变成节目 MISMATCH;它们可能另外违反交付或 QoE 条件。无效的解码结果不能产生 MATCH。
来自同一份 CDN 响应的“参考”,不能建立独立预期。例如,RFC 9530 §6.1说明了摘要字段的保护边界;在我们的检查中,响应自己的摘要字段不能代替独立的节目与参考样本绑定关系。
检查对象是交付后、验证客户端处的 A/V。对参考绑定和 DecodeProfile 的信任、解码结果的可重复性,以及样本的代表性,仍然是模型前提。这里没有把 DecodeProfile 认定为 hls.js 所用的浏览器解码器。一个片段一致,不能证明所有用户的屏幕、后续区间、整个节目的唯一身份,或画面中事件的真实性。
在通过 C 执行第一步之前,先使用具有独立授权和资源记账的预检会话。它走普通访问和交付路径。按服务策略,这次 MATCH 提供开始受限步骤的有限依据。完成分配之后,还需要来自该步骤中选定会话的新观测;预检并不预言它们的结果。

怎样判断资源依据是否足够
CDN C 是我们选定的交付路径。在通过它接入新观众之前,先估计 CDN C、公共源站和共享缓存层能否承担新增负载。
要考虑当前负载、已经发出的连接分配,以及准备授权的新连接。预测可能出错,所以需要留出余量。
检查一个简单条件:这一步之后的预期负载,加上余量,不超过设定上限。计算时采用所声明预测区间的上端值,而不只是平均预期消耗。
检查覆盖选定时段,以及其中各个计算窗口,以考虑预期的短时峰值。对公共源站和共享缓存层,分别估计每秒请求数和传输数据量;对 CDN C,估计传输数据量。每种量都使用各自的上限和余量。
把这条规则命名为 P_forecast v1:带余量的预测准入。它帮助规划负载,但本身不会限制实际资源消耗。
已经发出的 URL 可能晚些才使用,也可能被重复或并行使用;已经开始的播放也会继续消耗资源。这些尚未结束的负载来源,需要继续计入预算,并保留相应的计划预留。下文把这类需要持续记账的资源负担称为“资源承诺”。
预测上端值由互不重叠的部分相加:其他消耗形成的背景负载、现有资源承诺,以及这次新步骤。已经计入的消耗,不能又在总实测流量中重复相加。预测区间的上端值是规划场景中的估计,不是已证明的最大值,也不是统计置信界限。
输入包括缓存与回填假设、URL 的延迟首次使用、播放时长,以及仍可使用的分配被重复或并行使用的可能性。这里不假设“一个 URL 只对应一次播放”。如果必要输入过期、无法给出适用的预测范围,或模型已不再描述当前运行状态,资源依据就是 UNKNOWN。如果不等式不成立,则拒绝该步骤。这两种情况都不能授权发放。
计算通过后,预算负责人可以安排计划预留,并把依据交给控制器。此时仍没有执行授权。这延续了关于故障切换与保护源站的文章中的问题:迁移会改变公共资源的负载。如果服务要求严格的物理负载硬上限,这个配置还不够。

4. 只比较满足准入条件的选项
在主场景中,只剩 CDN C:它通过了为新观众提供受限接入所需的强制检查。选择它,意味着可以有限度地继续。这里不能声称已经完成 A/B/C 之间的优化,因为 A 和 B 不参加合格动作的比较。
为了说明偏好,另取一个独立的 C/D 比较场景。两个候选都针对相同群体、相同步骤规模和预测时段,通过相同的强制条件。D 只存在于这个比较中,不会成为主场景的备用路径。
服务规则是:先选择预测增量费用更低的选项。如果按预先确定的判据,费用无法区分,再比较最低要求之上的可比 QoE。如果仍无法区分,就按事先固定的标识符顺序选择。在这个示例比较中,即使 D 的起播更好,也可以因 C 的预测费用更低而选择 C。这是所选优先级的结果,不是对“最佳 CDN”的通用定义。
对于相同步骤,使用同一币种和同一预测时段比较费用增量:
ΔCost = F(U_baseline + ΔU_step) − F(U_baseline)。
F 是当前计费合同,U 是互不重叠的计费类别。计算包含与该步骤相关的交付请求、出口流量,以及回填、源站与共享缓存层费用。同一次传输不能在模型中换个名称重复计费。公式保留阶梯计费和合同条件;仅看每 GB 单价,不能描述迁移成本。如果预测范围不足以支持某个选项的费用优势,就不把优势当成已确定的结论。
对于 QoE,先定义测量方法。《HTTP 200 不等于 QoE》中对交付与用户结果的区分,在这里成为具体契约:
| 指标 | 本例定义 |
|---|---|
startup_callback_proxy,毫秒 | 从客户端产生播放意图,到执行第一次 requestVideoFrameCallback;起点在发出初始准入请求之前,使用同一条单调时间轴 |
| 起播失败 | 起播前已经确认的终止性故障,或在观测充分时错过声明的起播截止时间 |
| 起播后卡顿比例 | 卡顿时长 /(符合统计条件的播放时长 + 符合统计条件的卡顿时长),均按实际经过时间计;排除起播、暂停和播放跳转 |
| 终止性播放失败 | 起播后已经确认且未恢复的错误 |
视频帧回调(RVFC)与帧交给合成器有关,回调也可能延迟。因此,这个 API 的说明不足以把我们的代理指标称为画面准确出现的时刻,也不能确认音频播放。丢失的遥测仍归为结果未知;用户退出、自动播放被拒绝和策略拒绝,使用预先确定的分类。
比较必须保持相同的频道、地区、互联网服务商、客户端、构建版本和编码版本,以及可比的窗口、定义和数据充分性。对于已观测到的成功起播尝试,给出起播代理指标分布;同时给出失败与结果未知的尝试次数,以及数据完整性。未使用的分配单独记账。不完整的卡顿观测区间不能补成零。缺少必要指标不算成功;可选指标缺失则按事先规定的规则处理。
即使如此,比较仍然只是观察性的。变更前的指标不保证变更后的质量,C/D 之间的差异本身也不能证明迁移带来了因果改善。

5. 授权新增分配,并确认实际覆盖范围
检查完成后,控制器向准入服务单独授权,明确群体、路径 C、控制意图和策略的版本、有效期、新分配的数量和速率上限、计划预留,以及关闭发放和重新评估的条件。服务在每次新分配时检查授权是否仍然有效。版本变化、权限撤销、期限届满或额度用尽,都终止该授权下的新发放。
使用同一标识符重试初始准入请求,不会产生额外权限、第二份预留或凭据续期。响应前记录分配,以及这种重试处理方式,都是自建服务的职责。第 16 篇关于组件契约的文章把这一原则用于平台组合;这里用它定义一次发放操作的含义。
本例中,CDN C 这条路径由 Amazon CloudFront 实现。准入服务向播放器发放起始播放列表的签名 URL。后续分片请求同样需要适用的签名 URL。我们为所需对象使用 CloudFront 自定义策略签名 URL。客户端权限、主机名与路径范围,以及播放列表和媒体对象的覆盖,都必须符合契约。正如关于 Multi-CDN 与 403 的文章所讨论的,访问兼容性是路径的强制条件。

分片签名链接由我们自己的集成逻辑准备;播放列表的签名不会自动覆盖这些链接。
起始播放列表 URL 的签名,不会自行给相对分片 URI 签名。解析路径分量非空的相对 URI 时,不会继承基准 URI 的查询分量(RFC 3986 §5.2.2)。集成逻辑必须为每个实际请求的对象提供可用 URL。对于直播,活跃会话的访问有效期和续期,需要各自的授权与资源记账。
| 事件 | 它能确认什么 |
|---|---|
| 执行器确认授权 | 已接受执行权限 |
| 已返回起始 URL、完成分配 | 形成了资源承诺,播放可能尚未开始 |
| 首次请求已关联到分配 | 访问已在观测范围内发生 |
| 收到 QoE 和 A/V 观测 | 可以分别评估交付与内容 |
URL 已发出,用户稍后才开始,相关资源承诺仍然存在。第一次使用也不会消除再次使用的可能。文档中的 自定义策略结构没有确立一次性使用或播放次数上限。因此,发放上限不能证明负载上限。
CloudFront 在 HTTP 请求到来时检查到期时间。已经开始的传输可能在到期之后完成,后续请求则单独检查。因此,控制器授权的期限、URL 的访问有效期和播放时长,是三个不同的量。
关闭发放,不会撤销所有旧 URL,也不会瞬间停止正在播放的视频。资源记账继续包含活跃消耗,以及仍可使用的分配以后可能产生的剩余消耗,包括重复使用。预测时段结束,也不会自动释放预留:需要延续或重新计算,直到确认相应资源承诺已经终止。
最后,分配到 C,并不意味着实际完整交付路径已经确认。反馈需要关联分配、实际使用的媒体 URI、重定向、编码版本、区间和观测完整性。若意外进入其他上下文,就必须重新检查适用性。CloudFront 标准日志可能延迟最多 24 小时,因此不能保证成为快速反馈。具备规定延迟和完整性的观测通道,是模型的另一项前提。
6. 用新的决策闭合这一步
把主场景跟踪到结束。这里假定必要输入可用,并满足已经声明的契约。这是工程示例的操作顺序,不是一次已完成实验的记录。
| 阶段 | 发生了什么 | 可以得出什么结论 |
|---|---|---|
| T0 | 固定控制意图与策略、群体、步骤参数、参考样本/DecodeProfile/检查区间,以及资源规则 | 明确正在评估哪个动作 |
| T1 | A 得到适用的 MISMATCH,B 为 UNKNOWN,C 获得预检 MATCH | 内容条件允许进一步考虑 C |
| T2 | 预测适用;所有资源窗口都满足带余量的条件;资源承诺未重复计算;费用符合预算 | 具备资源依据和计划预留 |
| T3 | 控制器单独授权受限发放 | 执行器获得当前权限 |
| T4 | 服务完成分配,并记录其原始有效期 | 知道实际发放量,还不是播放次数 |
| T5 | 使用记录关联到分配,收到新的路径/QoE/A/V/资源观测 | 可以评估实际覆盖和完整性 |
| T6 | Exact-AV 检查该步骤中选定的会话;QoE 和资源在各自范围内评估 | 获得下一次决策的新依据 |
| T7+ | 条件满足;下一步重新通过计算和权限检查 | 单独授权新的受限步骤 |
| T7− | 条件被违反,或必要依据不足 | 关闭发放,不允许扩大;旧资源承诺保留 |
每次新的 A/V 检查,都事先确定自己的区间 I、对应参考样本和版本;实际观测覆盖相对于这个区间评估。重复发送旧预检报告不能代替 T6。如果新的范围不同,就重新确认适用性。
正向分支。 选定的被检查会话中,两条轨道均被完整观测,并按 Exact-AV 得到 MATCH。必要的 QoE 数据和资源反馈充分且足够新;没有确认违反保护阈值的情况;行为仍在预测模型的适用范围内。控制器按当前资源承诺重新计算下一步,检查其他条件与权限。完成之后,才单独授权下一批受限发放。
至此完成了一个步骤的评估。结果只对应已观测范围和所采用的预测策略。它不会把 MATCH 延伸到未来帧,也不会把“未确认超限”变成已证明的最坏情况上限。
负向分支。 完整且适用的观测确认了 A/V 差异;最低 QoE 或资源保护阈值被违反;行为超出了模型;或者必要观测不足。关闭该授权下的发放,不允许扩大规模。原因仍然保留:数据不足还是 UNKNOWN。已经确认违反强制条件时,等待观测窗口并不能成为继续发放的理由。
如何处理先前发出的访问权限和活跃会话,由服务负责方的另一份契约规定。资源承诺继续记账。不允许自动回到 A/B,因为这些路径也必须重新通过当前准入检查。如果没有任何合格选项,新请求得到预先规定的拒绝响应;是否改变运行模式,由指定负责人决定。独立比较场景中的 D 不会被带进这里。

观测窗口、速率限制和偏好切换的滞回机制,有助于减少合格选项之间的频繁调整。具体取值由服务决定。它们不会延长权限,也不会取消强制条件。
把这个闭环应用到自己的观察群体时,可以依次回答七个问题:
- 正在评估哪个受限动作,谁规定它的强制条件?
- 哪些依据当前适用,候选为什么被排除?
- 在 QoE 和费用可比的前提下,用什么规则比较剩余动作?
- 谁分配公共资源,并计入所有尚未解除的资源承诺?
- 执行器具体被授权做什么,发放受哪些限制?
- 哪些新观测能够确定这一步的覆盖范围和结果?
- 面对正向结果、违规或 UNKNOWN,分别需要作出什么新的决策?
决策记录保留范围和版本、使用的依据及其原始时间、排除与选择原因、权限和限额、预留、实际分配、新观测,以及下一次决策。把“没有合格选项”“延迟起播”“旧报告”代入检查时,也应保持相同语义。详细的故障注入与重放留给第 18 篇;它们将要检查的契约,已经在这里明确。
本文提出一种分阶段Multi-CDN路径选择策略引擎,强调先强制准入检查(内容正确性、QoE下限、资源可用性、成本预算),再对合格选项进行偏好排序。核心机制包括:独立验证平面保障内容一致性(Exact-AV v1)、带余量的负载预测(P_forecast v1)、受限授权与实际观测反馈闭环。避免将不可补偿项(如内容错误)与可权衡项(如成本)混入统一打分,确保安全、QoE、成本与内容正确性在统一契约下协同决策。

451

被折叠的 条评论
为什么被折叠?



