deriveCurrentBgUrlAtSignal function
按 metadata signal_data 在 anchorMs 时刻累计推算"当前背景图 URL"。
与 SDK Store 的 SWITCHFILE/UPDATE_BG 累计状态对齐:seek prefetch 与 renderHistoryData
命中等待门都用这个推 URL,比"最后一个 offset ≤ anchor 的展示页"启发式准确得多。
注:snapshot 信令的 content 格式与 metadata signal_data 的 {actions:[]} 不同,
但 snapshot 等价于"signal_data 在 0, anchorMs 区间累计后的状态快照",故无需单独
用 snapshot 重放——用 signal_data 重放到 anchorMs 即可得到 SDK 当前/即将渲染的页。
返回 null 表示当前在 #DEFAULT/纯白板页,或所属文件是 H5 PPT 不可按图预热。
Implementation
String? deriveCurrentBgUrlAtSignal(
List<PlayBackSignalData> signals,
int anchorMs,
) {
if (signals.isEmpty || anchorMs < 0) return null;
final actionStreams = <List<dynamic>>[];
final offsets = <int>[];
for (final s in signals) {
final dynamic decoded;
try {
decoded = jsonDecode(s.value);
} catch (_) {
continue;
}
if (decoded is! Map) continue;
final actions = decoded['actions'];
if (actions is! List) continue;
actionStreams.add(actions);
offsets.add(s.offset);
}
return _replayCurrentBgUrl(
actionStreams: actionStreams,
streamOffsetsMs: offsets,
anchorMs: anchorMs,
);
}