deriveCurrentBgUrlAtSignal function

String? deriveCurrentBgUrlAtSignal(
  1. List<PlayBackSignalData> signals,
  2. int anchorMs
)

按 metadata signal_dataanchorMs 时刻累计推算"当前背景图 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,
  );
}