prismcast 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/app.d.ts +88 -6
  2. package/dist/app.js +287 -154
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/cdp.d.ts +6 -17
  5. package/dist/browser/cdp.js +6 -57
  6. package/dist/browser/cdp.js.map +1 -1
  7. package/dist/browser/index.d.ts +106 -23
  8. package/dist/browser/index.js +292 -225
  9. package/dist/browser/index.js.map +1 -1
  10. package/dist/browser/precaching.d.ts +25 -11
  11. package/dist/browser/precaching.js +245 -97
  12. package/dist/browser/precaching.js.map +1 -1
  13. package/dist/browser/tabCapture.js +3 -10
  14. package/dist/browser/tabCapture.js.map +1 -1
  15. package/dist/browser/tuning/comcastPolymer.js +13 -14
  16. package/dist/browser/tuning/comcastPolymer.js.map +1 -1
  17. package/dist/browser/tuning/hbo.js +34 -17
  18. package/dist/browser/tuning/hbo.js.map +1 -1
  19. package/dist/browser/video.d.ts +1 -1
  20. package/dist/browser/video.js +3 -3
  21. package/dist/channels/index.js +5 -5
  22. package/dist/channels/index.js.map +1 -1
  23. package/dist/cliHelp.d.ts +11 -0
  24. package/dist/cliHelp.js +148 -0
  25. package/dist/cliHelp.js.map +1 -0
  26. package/dist/config/channelForm.js +5 -4
  27. package/dist/config/channelForm.js.map +1 -1
  28. package/dist/config/consistencyProbe.d.ts +2 -4
  29. package/dist/config/consistencyProbe.js +8 -51
  30. package/dist/config/consistencyProbe.js.map +1 -1
  31. package/dist/config/index.d.ts +107 -55
  32. package/dist/config/index.js +499 -267
  33. package/dist/config/index.js.map +1 -1
  34. package/dist/config/paths.d.ts +13 -8
  35. package/dist/config/paths.js +21 -25
  36. package/dist/config/paths.js.map +1 -1
  37. package/dist/config/persistence.d.ts +57 -11
  38. package/dist/config/persistence.js +127 -44
  39. package/dist/config/persistence.js.map +1 -1
  40. package/dist/config/reactivity.d.ts +60 -36
  41. package/dist/config/reactivity.js +89 -116
  42. package/dist/config/reactivity.js.map +1 -1
  43. package/dist/config/services.d.ts +61 -26
  44. package/dist/config/services.js +137 -68
  45. package/dist/config/services.js.map +1 -1
  46. package/dist/config/streamSettings.d.ts +24 -0
  47. package/dist/config/streamSettings.js +17 -0
  48. package/dist/config/streamSettings.js.map +1 -0
  49. package/dist/config/userChannels.d.ts +60 -52
  50. package/dist/config/userChannels.js +138 -188
  51. package/dist/config/userChannels.js.map +1 -1
  52. package/dist/config/userConfig.d.ts +224 -61
  53. package/dist/config/userConfig.js +351 -134
  54. package/dist/config/userConfig.js.map +1 -1
  55. package/dist/hdhr/discover.d.ts +7 -1
  56. package/dist/hdhr/discover.js +12 -6
  57. package/dist/hdhr/discover.js.map +1 -1
  58. package/dist/hdhr/index.d.ts +51 -10
  59. package/dist/hdhr/index.js +108 -112
  60. package/dist/hdhr/index.js.map +1 -1
  61. package/dist/hdhr/udp.d.ts +11 -4
  62. package/dist/hdhr/udp.js +25 -20
  63. package/dist/hdhr/udp.js.map +1 -1
  64. package/dist/index.js +16 -143
  65. package/dist/index.js.map +1 -1
  66. package/dist/native/index.d.ts +1 -1
  67. package/dist/native/index.js +4 -3
  68. package/dist/native/index.js.map +1 -1
  69. package/dist/native/proxy.d.ts +1 -1
  70. package/dist/native/proxy.js +36 -28
  71. package/dist/native/proxy.js.map +1 -1
  72. package/dist/routes/cdp.d.ts +7 -6
  73. package/dist/routes/cdp.js +9 -8
  74. package/dist/routes/cdp.js.map +1 -1
  75. package/dist/routes/components.d.ts +23 -5
  76. package/dist/routes/components.js +21 -4
  77. package/dist/routes/components.js.map +1 -1
  78. package/dist/routes/config/channels/endpoints/browse.js +39 -29
  79. package/dist/routes/config/channels/endpoints/browse.js.map +1 -1
  80. package/dist/routes/config/channels/endpoints/bulk.js +2 -6
  81. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
  82. package/dist/routes/config/channels/endpoints/predefined.js +5 -15
  83. package/dist/routes/config/channels/endpoints/predefined.js.map +1 -1
  84. package/dist/routes/config/channels/endpoints/prefs.js +7 -6
  85. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
  86. package/dist/routes/config/channels/endpoints/service.js +6 -5
  87. package/dist/routes/config/channels/endpoints/service.js.map +1 -1
  88. package/dist/routes/config/channels/endpoints/tags.js +4 -16
  89. package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
  90. package/dist/routes/config/channels/table.d.ts +2 -1
  91. package/dist/routes/config/channels/table.js +11 -13
  92. package/dist/routes/config/channels/table.js.map +1 -1
  93. package/dist/routes/config/http/envelope.d.ts +6 -3
  94. package/dist/routes/config/http/envelope.js +18 -5
  95. package/dist/routes/config/http/envelope.js.map +1 -1
  96. package/dist/routes/config/index.d.ts +21 -13
  97. package/dist/routes/config/index.js +47 -34
  98. package/dist/routes/config/index.js.map +1 -1
  99. package/dist/routes/config/settings.d.ts +43 -6
  100. package/dist/routes/config/settings.js +225 -125
  101. package/dist/routes/config/settings.js.map +1 -1
  102. package/dist/routes/config/vocabulary.d.ts +24 -0
  103. package/dist/routes/config/vocabulary.js +33 -0
  104. package/dist/routes/config/vocabulary.js.map +1 -0
  105. package/dist/routes/debug.js +28 -13
  106. package/dist/routes/debug.js.map +1 -1
  107. package/dist/routes/root/content.js +33 -26
  108. package/dist/routes/root/content.js.map +1 -1
  109. package/dist/routes/root/scripts/channels.js +23 -11
  110. package/dist/routes/root/scripts/channels.js.map +1 -1
  111. package/dist/routes/root/scripts/config.d.ts +1 -1
  112. package/dist/routes/root/scripts/config.js +127 -79
  113. package/dist/routes/root/scripts/config.js.map +1 -1
  114. package/dist/routes/root/scripts/shared.js +34 -23
  115. package/dist/routes/root/scripts/shared.js.map +1 -1
  116. package/dist/routes/root/scripts/status.handlers.d.ts +8 -13
  117. package/dist/routes/root/scripts/status.handlers.js +35 -21
  118. package/dist/routes/root/scripts/status.handlers.js.map +1 -1
  119. package/dist/routes/root/styles.js +13 -16
  120. package/dist/routes/root/styles.js.map +1 -1
  121. package/dist/routes/services.js +12 -16
  122. package/dist/routes/services.js.map +1 -1
  123. package/dist/routes/theme.js +12 -12
  124. package/dist/routes/theme.js.map +1 -1
  125. package/dist/routes/ui.d.ts +4 -3
  126. package/dist/routes/ui.js +17 -13
  127. package/dist/routes/ui.js.map +1 -1
  128. package/dist/service/generators.js +12 -9
  129. package/dist/service/generators.js.map +1 -1
  130. package/dist/streaming/captureSession.d.ts +4 -4
  131. package/dist/streaming/captureSession.js +6 -7
  132. package/dist/streaming/captureSession.js.map +1 -1
  133. package/dist/streaming/codec.d.ts +12 -2
  134. package/dist/streaming/codec.js +40 -28
  135. package/dist/streaming/codec.js.map +1 -1
  136. package/dist/streaming/fmp4Segmenter.d.ts +14 -4
  137. package/dist/streaming/fmp4Segmenter.js +99 -79
  138. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  139. package/dist/streaming/hls.d.ts +21 -14
  140. package/dist/streaming/hls.js +148 -122
  141. package/dist/streaming/hls.js.map +1 -1
  142. package/dist/streaming/hlsResume.d.ts +36 -13
  143. package/dist/streaming/hlsResume.js +68 -37
  144. package/dist/streaming/hlsResume.js.map +1 -1
  145. package/dist/streaming/monitor.d.ts +5 -3
  146. package/dist/streaming/monitor.js +47 -37
  147. package/dist/streaming/monitor.js.map +1 -1
  148. package/dist/streaming/mp4Parser.d.ts +29 -4
  149. package/dist/streaming/mp4Parser.js +49 -7
  150. package/dist/streaming/mp4Parser.js.map +1 -1
  151. package/dist/streaming/playlistBuilder.d.ts +1 -2
  152. package/dist/streaming/playlistBuilder.js +2 -3
  153. package/dist/streaming/playlistBuilder.js.map +1 -1
  154. package/dist/streaming/preroll.d.ts +43 -16
  155. package/dist/streaming/preroll.js +112 -62
  156. package/dist/streaming/preroll.js.map +1 -1
  157. package/dist/streaming/pretune.d.ts +2 -2
  158. package/dist/streaming/pretune.js +11 -7
  159. package/dist/streaming/pretune.js.map +1 -1
  160. package/dist/streaming/recovery.d.ts +29 -2
  161. package/dist/streaming/recovery.js +43 -4
  162. package/dist/streaming/recovery.js.map +1 -1
  163. package/dist/streaming/registry.d.ts +13 -10
  164. package/dist/streaming/registry.js +6 -5
  165. package/dist/streaming/registry.js.map +1 -1
  166. package/dist/streaming/setup.d.ts +29 -20
  167. package/dist/streaming/setup.js +181 -170
  168. package/dist/streaming/setup.js.map +1 -1
  169. package/dist/streaming/showInfo.d.ts +24 -12
  170. package/dist/streaming/showInfo.js +120 -113
  171. package/dist/streaming/showInfo.js.map +1 -1
  172. package/dist/streaming/statusEmitter.d.ts +15 -10
  173. package/dist/streaming/statusEmitter.js +24 -20
  174. package/dist/streaming/statusEmitter.js.map +1 -1
  175. package/dist/types/config.d.ts +24 -13
  176. package/dist/types/config.js +5 -1
  177. package/dist/types/config.js.map +1 -1
  178. package/dist/types/index.d.ts +3 -2
  179. package/dist/types/index.js +2 -1
  180. package/dist/types/index.js.map +1 -1
  181. package/dist/types/profiles.d.ts +2 -2
  182. package/dist/types/selection.d.ts +12 -10
  183. package/dist/types/streaming.d.ts +12 -5
  184. package/dist/types/streaming.js +12 -5
  185. package/dist/types/streaming.js.map +1 -1
  186. package/dist/utils/debugFilter.d.ts +3 -2
  187. package/dist/utils/debugFilter.js +7 -5
  188. package/dist/utils/debugFilter.js.map +1 -1
  189. package/dist/{hdhr → utils}/deviceId.d.ts +1 -1
  190. package/dist/{hdhr → utils}/deviceId.js +11 -29
  191. package/dist/utils/deviceId.js.map +1 -0
  192. package/dist/utils/errors.d.ts +7 -0
  193. package/dist/utils/errors.js +12 -3
  194. package/dist/utils/errors.js.map +1 -1
  195. package/dist/utils/fileLogger.d.ts +23 -12
  196. package/dist/utils/fileLogger.js +73 -41
  197. package/dist/utils/fileLogger.js.map +1 -1
  198. package/dist/utils/httpErrors.d.ts +13 -0
  199. package/dist/utils/httpErrors.js +22 -0
  200. package/dist/utils/httpErrors.js.map +1 -0
  201. package/dist/utils/index.d.ts +3 -0
  202. package/dist/utils/index.js +3 -0
  203. package/dist/utils/index.js.map +1 -1
  204. package/dist/utils/logger.d.ts +9 -8
  205. package/dist/utils/logger.js +64 -20
  206. package/dist/utils/logger.js.map +1 -1
  207. package/dist/utils/markup.js +8 -3
  208. package/dist/utils/markup.js.map +1 -1
  209. package/dist/utils/plainObject.d.ts +6 -0
  210. package/dist/utils/plainObject.js +18 -0
  211. package/dist/utils/plainObject.js.map +1 -0
  212. package/dist/utils/runtimeIdentity.context.js +1 -29
  213. package/dist/utils/runtimeIdentity.context.js.map +1 -1
  214. package/dist/utils/runtimeIdentity.d.ts +17 -6
  215. package/dist/utils/runtimeIdentity.js +50 -17
  216. package/dist/utils/runtimeIdentity.js.map +1 -1
  217. package/package.json +5 -5
  218. package/dist/hdhr/deviceId.js.map +0 -1
@@ -2,30 +2,31 @@
2
2
  *
3
3
  * fmp4Segmenter.ts: fMP4 HLS segmentation for PrismCast.
4
4
  */
5
- import { buildPrerollEntries, computePrerollWindow, getPrerollTotalDurationSec } from "./preroll.js";
6
- import { createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovCodecConfig, parseMoovTrackInfo } from "./mp4Parser.js";
5
+ import { LOG, toError } from "../utils/index.js";
6
+ import { buildPrerollEntries, buildPrerollInitUri, computePrerollWindow, getPrerollTotalDurationSec } from "./preroll.js";
7
+ import { computeTimelinePosition, createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovCodecConfig, parseMoovTrackInfo } from "./mp4Parser.js";
7
8
  import { getSegmentCount, storeInitSegment, storeSegment, updatePlaylist } from "./hlsSegments.js";
9
+ import { CAPTURE_BASELINE_CODEC } from "../types/index.js";
8
10
  import { CONFIG } from "../config/index.js";
9
- import { LOG } from "../utils/index.js";
10
11
  import { buildPlaylist } from "./playlistBuilder.js";
11
12
  import { getStream } from "./registry.js";
12
13
  import { systemClock } from "homebridge-plugin-utils";
13
- /* This module transforms a puppeteer-stream MP4 capture into HLS fMP4 segments. The overall flow is: (1) receive MP4 data from puppeteer-stream (the configured
14
- * capture codec, H.264 or HEVC per codec.ts, paired with AAC audio, from either native capture or FFmpeg transcoding), (2) parse MP4 box structure to identify ftyp
15
- * + moov (initialization segment) and moof + mdat pairs (media fragments),
16
- * (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
14
+ /* This module transforms FFmpeg's fMP4 remux of the puppeteer-stream capture into HLS fMP4 segments. The overall flow is: (1) receive fMP4 data from FFmpeg's stdout (the
15
+ * configured capture codec, H.264 or HEVC per codec.ts, paired with AAC audio), (2) parse MP4 box structure to identify ftyp + moov (initialization segment) and
16
+ * moof + mdat pairs (media fragments), (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
17
17
  *
18
18
  * Keyframe detection is available for diagnostics by setting KEYFRAME_DEBUG to true. When enabled, each moof's traf/trun sample flags are parsed (ISO 14496-12) to
19
19
  * determine whether fragments start with sync samples (keyframes). Statistics are logged at stream termination and per-segment warnings are emitted for segments that
20
- * don't start with a keyframe. When disabled, the moof data is passed through without inspection.
20
+ * don't start with a keyframe. When disabled, the keyframe sample-flag parse is skipped; the moof is still read for its per-track durations and its tfdt rewritten
21
+ * by the timestamp offset pass.
21
22
  */
22
23
  // Set to true to enable keyframe detection and statistics. This parses traf/trun sample flags in each moof to track keyframe frequency and log per-segment warnings.
23
24
  // Useful for diagnosing frozen screen issues in downstream HLS consumers.
24
25
  const KEYFRAME_DEBUG = false;
25
26
  // Keyframe Stats Formatting.
26
27
  /**
27
- * Formats keyframe statistics into a human-readable summary for the termination log. Returns an empty string if no moof boxes were processed. The format mirrors the
28
- * recovery metrics summary style used in monitor.ts.
28
+ * Formats keyframe statistics into a human-readable summary for the termination log. Returns an empty string if no moof boxes were processed. The format mirrors
29
+ * formatRecoveryMetricsSummary() in recovery.ts, which the termination log in lifecycle.ts composes alongside it.
29
30
  *
30
31
  * Example output:
31
32
  * - "Keyframes: 2490 of 2490 moofs (100.0%), interval 1.9-2.1s avg 2.0s."
@@ -145,16 +146,17 @@ export function computeDiscontinuitySequence(options) {
145
146
  // Segmenter Implementation.
146
147
  /**
147
148
  * Creates an fMP4 segmenter that transforms MP4 input into HLS segments. The segmenter parses MP4 boxes, extracts the init segment, optionally detects keyframes
148
- * in each moof fragment when KEYFRAME_DEBUG is enabled, and accumulates media fragments into segments based on the configured duration.
149
+ * in each moof fragment when KEYFRAME_DEBUG is enabled, and accumulates media fragments into segments based on the segment duration it is given.
149
150
  * @param options - Segmenter options including stream ID and callbacks.
150
151
  * @returns The segmenter interface with pipe, stop, and keyframe stats methods.
151
152
  */
152
153
  export function createFMP4Segmenter(options) {
153
- const { clock = systemClock, continuity, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollCodec, prerollSegmentCount, streamId } = options;
154
- const { initialTrackTimestamps, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex } = continuity ?? {};
155
- // Initialize state.
154
+ const { clock = systemClock, continuity, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollCodec, prerollSegmentCount, segmentDuration, streamId } = options;
155
+ const { initialTrackTimestamps, previousInitSegment, priorSegmentHistory, priorSessionStats, startingInitVersion, startingSegmentIndex } = continuity ?? {};
156
+ // Initialize state. A continued sequence seeds the collections its playlist and its prune read from the history it carries, so an earlier segment is listed,
157
+ // dated, marked, pruned and counted exactly as one this segmenter produced.
156
158
  const state = {
157
- discontinuityIndices: new Set(),
159
+ discontinuityIndices: new Set(priorSegmentHistory?.discontinuityIndices),
158
160
  firstSegmentEmitted: false,
159
161
  fragmentBuffer: [],
160
162
  hasInit: false,
@@ -172,24 +174,27 @@ export function createFMP4Segmenter(options) {
172
174
  normalizedReferencePositionSec: null,
173
175
  pendingDiscontinuity: pendingDiscontinuity ?? false,
174
176
  prerollBaseUrl: prerollBaseUrl ?? null,
175
- prerollCodec: prerollCodec ?? "h264",
177
+ // The codec is read only while a preroll is active, and every caller that activates one passes its codec, so the baseline stands in only for a segmenter that
178
+ // never reads it.
179
+ prerollCodec: prerollCodec ?? CAPTURE_BASELINE_CODEC,
176
180
  prerollSegmentCount: prerollSegmentCount ?? 0,
177
- prunedDiscontinuityCount: 0,
178
- segmentDurations: new Map(),
181
+ prunedDiscontinuityCount: priorSegmentHistory?.prunedDiscontinuityCount ?? 0,
182
+ segmentDurations: new Map(priorSegmentHistory?.segmentDurations),
179
183
  segmentFirstMoofChecked: false,
180
184
  segmentIndex: startingSegmentIndex ?? 0,
181
185
  segmentStartTime: clock.now(),
182
- segmentTimestamps: new Map(),
186
+ segmentTimestamps: new Map(priorSegmentHistory?.segmentTimestamps),
183
187
  segmentTrackDurations: new Map(),
184
188
  segmentsWithoutLeadingKeyframe: 0,
185
189
  sessionStats: priorSessionStats ? { ...priorSessionStats, tabReplacementCount: priorSessionStats.tabReplacementCount + 1 } :
186
190
  { malformedMoofCount: 0, syncSpreadCount: 0, syncSpreadMaxMs: 0, syncSpreadMinMs: Infinity, syncSpreadSumMs: 0, tabReplacementCount: 0 },
191
+ startingSegmentIndex: startingSegmentIndex ?? 0,
187
192
  stopped: false,
188
193
  totalKeyframeIntervalMs: 0,
189
194
  trackOffsets: new Map(),
190
195
  trackOffsetsInitialized: new Set(),
191
196
  trackTimescales: new Map(),
192
- trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map(),
197
+ trackTimestamps: new Map(initialTrackTimestamps),
193
198
  videoTrackId: null,
194
199
  videoTrafsInCurrentSegment: null
195
200
  };
@@ -199,7 +204,8 @@ export function createFMP4Segmenter(options) {
199
204
  * Generates the m3u8 playlist content. When preroll metadata is present (prerollSegmentCount > 0), the playlist includes both preroll entries (served from global
200
205
  * /preroll/ routes with absolute URLs) and real entries (served from the stream's /hls/:name/ routes with relative URLs) in a single sliding window. The preroll
201
206
  * entries use a separate #EXT-X-MAP for the preroll init segment, and a #EXT-X-DISCONTINUITY tag marks the boundary between preroll and real content. As real
202
- * segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead.
207
+ * segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead. A resumed stream's preroll
208
+ * entry carries the marker its preroll playlist gave it, at the preroll's first index.
203
209
  *
204
210
  * Delegates all m3u8 formatting to the shared buildPlaylist() function. Preroll windowing and entry construction are handled by the compositor functions in
205
211
  * preroll.ts. This function is responsible for constructing real segment entries from the segmenter's state and computing the discontinuity sequence from the
@@ -207,45 +213,59 @@ export function createFMP4Segmenter(options) {
207
213
  */
208
214
  function generatePlaylist() {
209
215
  const realInitMapUri = "init.mp4?v=" + String(state.initVersion);
210
- // Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (starting at prerollSegmentCount) is always
211
- // applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired - indicated by prerollStartTime being set on the
212
- // stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast capture streams (tuning before the
213
- // preroll delay elapses) would include unnecessary preroll entries in their first playlists.
216
+ // Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (real segments starting past the preroll's
217
+ // indices) is always applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired - indicated by
218
+ // prerollStartTime being set on the stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast
219
+ // capture streams (tuning before the preroll delay elapses) would include unnecessary preroll entries in their first playlists.
214
220
  const stream = getStream(streamId);
215
221
  const prerollActive = (state.prerollSegmentCount > 0) && (stream?.hls.prerollStartTime !== null) && (stream?.hls.prerollStartTime !== undefined);
216
222
  // Compute the sliding window start index. When preroll is active, the compositor handles the three-way max (floor, sliding window, preroll cap). Without
217
223
  // preroll (or when the timer hasn't fired), the standard sliding window rule applies.
218
224
  const realSegmentCount = getSegmentCount(streamId);
225
+ // The preroll occupies the preroll count's indices directly below the starting index: from 0 on a fresh stream, and from the persisted index on a resumed one,
226
+ // so the window places the preroll at the media sequence its preroll playlist served.
227
+ const prerollStartIndex = state.startingSegmentIndex - state.prerollSegmentCount;
219
228
  let startIndex;
220
229
  if (prerollActive) {
221
230
  startIndex = computePrerollWindow({
222
231
  currentSegmentIndex: state.segmentIndex,
223
232
  maxSegments: CONFIG.hls.maxSegments,
224
233
  prerollSegmentCount: state.prerollSegmentCount,
234
+ prerollStartIndex,
225
235
  realSegmentCount
226
236
  });
227
237
  }
228
238
  else {
229
239
  startIndex = Math.max(0, state.segmentIndex - Math.min(realSegmentCount, CONFIG.hls.maxSegments));
230
240
  }
231
- // Build preroll entries for preroll indices still in the window. Only included when the deferred preroll timer has fired and the client is watching preroll.
241
+ // Build preroll entries for preroll indices still in the window, from the window start's offset into the preroll. Only included when the deferred preroll timer
242
+ // has fired and the client is watching preroll.
232
243
  let prerollEntries = [];
233
- if (prerollActive && state.prerollBaseUrl && (startIndex < state.prerollSegmentCount)) {
234
- prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, codec: state.prerollCodec, extension: ".m4s", prerollSegmentCount: state.prerollSegmentCount,
235
- startIndex });
244
+ if (prerollActive && state.prerollBaseUrl && (startIndex < state.startingSegmentIndex)) {
245
+ prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, codec: state.prerollCodec, prerollSegmentCount: state.prerollSegmentCount,
246
+ startIndex: startIndex - prerollStartIndex });
247
+ // A preroll entry carries a marker by its index, as a real entry does, its index being the window start plus its position. The only marker a preroll range
248
+ // holds sits at the preroll's first index, which is the window's first entry whenever the window lists it, under the preroll init the playlist's initial map
249
+ // already names, so the entry re-emits no map.
250
+ for (const [offset, entry] of prerollEntries.entries()) {
251
+ if (state.discontinuityIndices.has(startIndex + offset)) {
252
+ entry.discontinuity = true;
253
+ }
254
+ }
236
255
  }
237
256
  // Build real segment entries from the segmenter's state. Each entry carries its duration, optional discontinuity marker with init re-emission, and wall-clock
238
- // timestamp for PROGRAM-DATE-TIME. The real range starts at either the window start (when no preroll) or the preroll segment count (when preroll entries cover
239
- // the earlier indices).
257
+ // timestamp for PROGRAM-DATE-TIME. The starting index floors the real range only while the preroll is listed, because the preroll entries cover the indices
258
+ // below it then; a segmenter with no preroll listed, a tab replacement's successor among them, lists the earlier segments its history carries below its
259
+ // starting index.
240
260
  const realEntries = [];
241
- const realStartIndex = Math.max(startIndex, state.prerollSegmentCount);
261
+ const realStartIndex = prerollActive ? Math.max(startIndex, state.startingSegmentIndex) : startIndex;
242
262
  for (let i = realStartIndex; i < state.segmentIndex; i++) {
243
263
  const entry = {
244
- duration: state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration,
264
+ duration: state.segmentDurations.get(i) ?? segmentDuration,
245
265
  url: "segment" + String(i) + ".m4s"
246
266
  };
247
- // Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is handled
248
- // via the existing pendingDiscontinuity mechanism - outputSegment() adds prerollSegmentCount to discontinuityIndices when the first real segment is output.
267
+ // Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is marked
268
+ // through pendingDiscontinuity - outputSegment() marks the starting segment index, the first real segment's, when it outputs that segment.
249
269
  if (state.discontinuityIndices.has(i)) {
250
270
  entry.discontinuity = true;
251
271
  entry.mapUri = realInitMapUri;
@@ -268,14 +288,13 @@ export function createFMP4Segmenter(options) {
268
288
  });
269
289
  // Determine the initial MAP URI. When the window starts with preroll entries, use the preroll init segment. Otherwise, use the real init segment. The
270
290
  // prerollBaseUrl is guaranteed non-null when prerollEntries is non-empty (guarded by the conditional above).
271
- const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ?
272
- (state.prerollBaseUrl + "/preroll/" + state.prerollCodec + "/init.mp4") : realInitMapUri;
291
+ const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ? buildPrerollInitUri(state.prerollBaseUrl, state.prerollCodec) : realInitMapUri;
273
292
  const entries = [...prerollEntries, ...realEntries];
274
293
  return buildPlaylist({
275
294
  discontinuitySequence,
276
295
  initialMapUri,
277
296
  mediaSequence: startIndex,
278
- targetDuration: CONFIG.hls.segmentDuration,
297
+ targetDuration: segmentDuration,
279
298
  version: 7
280
299
  }, entries);
281
300
  }
@@ -298,7 +317,8 @@ export function createFMP4Segmenter(options) {
298
317
  if (state.fragmentBuffer.length === 0) {
299
318
  return;
300
319
  }
301
- // If this segment follows a tab replacement, record its index for discontinuity marking.
320
+ // If a marker is pending (a continuation, a preroll boundary, or a recovery event through markDiscontinuity), record this segment's index for discontinuity
321
+ // marking.
302
322
  if (state.pendingDiscontinuity) {
303
323
  state.discontinuityIndices.add(state.segmentIndex);
304
324
  state.pendingDiscontinuity = false;
@@ -425,7 +445,7 @@ export function createFMP4Segmenter(options) {
425
445
  if (!state.hasInit) {
426
446
  if ((box.type === "ftyp") || (box.type === "moov")) {
427
447
  state.initBoxes.push(box.data);
428
- // Check if we have both ftyp and moov.
448
+ // The moov completes the init segment (the ftyp, when present, precedes it in initBoxes).
429
449
  if (box.type === "moov") {
430
450
  // Output the init segment.
431
451
  const initData = Buffer.concat(state.initBoxes);
@@ -443,7 +463,7 @@ export function createFMP4Segmenter(options) {
443
463
  LOG.info("Capture parameters changed: the new initialization segment differs from the one this capture continues from.");
444
464
  }
445
465
  // Version the init URI for HLS cache busting. Incrementing the version makes the #EXT-X-MAP URI different from the previous playlist, forcing clients
446
- // to re-fetch the init segment. This prevents timescale mismatches when Chrome's MediaRecorder picks a different timescale between capture sessions.
466
+ // to re-fetch the init segment. This prevents timescale mismatches when the FFmpeg remux's track timescales differ between capture sessions.
447
467
  if (initChanged) {
448
468
  state.initVersion++;
449
469
  }
@@ -490,29 +510,19 @@ export function createFMP4Segmenter(options) {
490
510
  catch {
491
511
  LOG.debug("streaming:segmenter", "Failed to parse codec configuration from moov.");
492
512
  }
493
- // Compute the normalized reference position for tab replacement offset initialization. This converts the old segmenter's per-track timestamp counters
494
- // to seconds via the new moov's timescales (which Chrome keeps consistent across captures), then averages across tracks to produce a single shared position.
513
+ // Compute the normalized reference position the per-track offsets derive from when this segmenter continues earlier counters. computeTimelinePosition,
514
+ // the timeline conversion in the parser module, converts the counters to seconds via the new moov's timescales (which the remux keeps consistent across
515
+ // captures), then averages across tracks to produce a single shared position - the same position the resume line reports from persisted counters.
495
516
  // Deriving all per-track offsets from this shared reference eliminates the inter-track bias that per-track independent offsets would freeze from the old
496
- // segmenter's A-V jitter at the moment of replacement.
497
- if (initialTrackTimestamps && (state.trackTimescales.size > 0)) {
498
- let totalSec = 0;
499
- let count = 0;
500
- for (const [trackId, timestamp] of initialTrackTimestamps) {
501
- const timescale = state.trackTimescales.get(trackId);
502
- if (timescale) {
503
- totalSec += Number(timestamp) / timescale;
504
- count++;
505
- }
506
- }
507
- if (count > 0) {
508
- state.normalizedReferencePositionSec = totalSec / count;
509
- }
517
+ // segmenter's A-V jitter at the moment of replacement. A null result, when no track carries both a counter and a timescale, leaves the reference unset.
518
+ if (initialTrackTimestamps) {
519
+ state.normalizedReferencePositionSec = computeTimelinePosition({ timescales: state.trackTimescales, trackTimestamps: initialTrackTimestamps });
510
520
  }
511
- // When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes Chrome's real content PTS
512
- // continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this, Chrome's MediaRecorder starts at
513
- // PTS 0, causing CDVR's remuxer to detect a PTS reset and apply a sentinel pts_offset (1152921504606840.75) that breaks the Apple TV's timeline display.
514
- // With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the new session's
515
- // preroll PTS timeline takes precedence over the old session's timestamps.
521
+ // When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes the remuxed capture's real
522
+ // content PTS continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this, the remuxed capture
523
+ // starts at PTS 0, causing CDVR's remuxer to detect a PTS reset and apply a sentinel pts_offset (1152921504606840.75) that breaks the Apple TV's timeline
524
+ // display. With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the
525
+ // new session's preroll PTS timeline takes precedence over the old session's timestamps.
516
526
  if (state.prerollSegmentCount > 0) {
517
527
  state.normalizedReferencePositionSec = getPrerollTotalDurationSec(state.prerollCodec);
518
528
  }
@@ -534,21 +544,23 @@ export function createFMP4Segmenter(options) {
534
544
  }
535
545
  else {
536
546
  const elapsedMs = clock.now() - state.segmentStartTime;
537
- const targetMs = CONFIG.hls.segmentDuration * 1000;
547
+ const targetMs = segmentDuration * 1000;
538
548
  if (elapsedMs >= targetMs) {
539
549
  outputSegment();
540
550
  }
541
551
  }
542
552
  }
543
- // Rewrite tfdt.baseMediaDecodeTime in each traf by adding a constant per-track offset to Chrome's original values. This preserves Chrome's wall-clock-based
544
- // inter-track sync rather than regenerating timestamps from trun durations (which accumulates drift). The offset is 0 during normal playback (pure pass-through).
545
- // During tab replacement, offsets are derived from a normalized reference position (mean of all tracks' old positions in seconds) to eliminate inter-track
546
- // bias - see normalizedReferencePositionSec. Wrapped in try/catch so a malformed moof never crashes the segmenter - the segment passes through with Chrome's
547
- // original timestamps, which is better than dropping it entirely.
553
+ // Rewrite tfdt.baseMediaDecodeTime in each traf by adding a constant per-track offset to the remux's original values. This preserves the remux's
554
+ // wall-clock-based inter-track sync rather than regenerating timestamps from trun durations (which accumulates drift). The offset is 0 when the segmenter
555
+ // continues no counters and has no preroll (pure pass-through). When it continues earlier counters (a tab replacement or a resume) or follows a preroll,
556
+ // offsets are derived from a normalized reference position (the shared position in seconds every track anchors to) to eliminate inter-track bias - see
557
+ // normalizedReferencePositionSec.
558
+ // Wrapped in try/catch so a malformed moof never crashes the segmenter - the segment passes through with the remux's original timestamps, which is better
559
+ // than dropping it entirely.
548
560
  try {
549
561
  const trackResults = offsetMoofTimestamps(box.data, state.trackOffsets);
550
562
  // Two-pass offset handling. The first call above applied every already-known track's stored offset in place, leaving any track first seen in this moof at
551
- // Chrome's original tfdt (an absent trackId is a 0n no-op write). This loop computes and stores each newly seen track's offset and records it in newOffsets -
563
+ // the remux's original tfdt (an absent trackId is a 0n no-op write). This loop computes and stores each newly seen track's offset and records it in newOffsets -
552
564
  // the offsets finalized this moof, and only those. The corrective call below applies exactly newOffsets, so a track the first call already offset stays
553
565
  // untouched (absent from newOffsets, a 0n no-op) while a track initialized here is offset exactly once. No track's offset can be applied twice regardless of
554
566
  // how tracks stagger their first trafs across moofs.
@@ -559,8 +571,8 @@ export function createFMP4Segmenter(options) {
559
571
  const initialValue = initialTrackTimestamps?.get(trackId);
560
572
  const timescale = state.trackTimescales.get(trackId);
561
573
  let offset = 0n;
562
- // Compute the per-track offset. When a normalized reference position is available (tab replacement with valid timescales), derive the offset from
563
- // the shared reference to eliminate inter-track bias. Otherwise fall back to per-track independent offsets (fresh stream or moov parse failure).
574
+ // Compute the per-track offset. When a normalized reference position is available (continued counters or a preroll, with valid timescales), derive
575
+ // the offset from the shared reference to eliminate inter-track bias. Otherwise fall back to the track's own continued counter, or to 0 when it has none.
564
576
  if ((state.normalizedReferencePositionSec !== null) && timescale) {
565
577
  offset = BigInt(Math.round(state.normalizedReferencePositionSec * timescale)) - result.originalTfdt;
566
578
  }
@@ -573,11 +585,11 @@ export function createFMP4Segmenter(options) {
573
585
  if (offset !== 0n) {
574
586
  needsRewrite = true;
575
587
  }
576
- LOG.debug("streaming:segmenter", "Initialized offset for track %d: %s (initial=%s, chrome=%s).", trackId, String(offset), String(initialValue ?? 0n), String(result.originalTfdt));
588
+ LOG.debug("streaming:segmenter", "Initialized offset for track %d: %s (initial=%s, remux=%s).", trackId, String(offset), String(initialValue ?? 0n), String(result.originalTfdt));
577
589
  }
578
590
  }
579
- // Corrective rewrite, scoped to the tracks initialized this moof. Those tracks still hold Chrome's original tfdt (the first call left them at 0n), so this
580
- // single re-call with newOffsets applies each of their offsets exactly once. Already-known tracks are absent from newOffsets and pass through as 0n no-op
591
+ // Corrective rewrite, scoped to the tracks initialized this moof. Those tracks still hold the remux's original tfdt (the first call left them at 0n), so
592
+ // this single re-call with newOffsets applies each of their offsets exactly once. Already-known tracks are absent from newOffsets and pass through as 0n no-op
581
593
  // writes, so they cannot be offset a second time. Skipped entirely when no newly initialized track carries a nonzero offset.
582
594
  if (needsRewrite) {
583
595
  offsetMoofTimestamps(box.data, newOffsets);
@@ -587,11 +599,11 @@ export function createFMP4Segmenter(options) {
587
599
  if ((state.videoTrackId !== null) && trackResults.has(state.videoTrackId)) {
588
600
  state.videoTrafsInCurrentSegment = true;
589
601
  }
590
- // Track "next expected" for future tab replacement handoff and accumulate durations for EXTINF.
602
+ // Track "next expected" for the continuity snapshot a successor reads and the resume state getTrackTimestamps() persists, and accumulate durations for EXTINF.
591
603
  for (const [trackId, result] of trackResults) {
592
604
  const trackOffset = state.trackOffsets.get(trackId) ?? 0n;
593
605
  state.trackTimestamps.set(trackId, result.originalTfdt + trackOffset + result.duration);
594
- // Accumulate duration for media-time EXTINF computation. No sanity check needed - Chrome's timestamps are trusted.
606
+ // Accumulate duration for media-time EXTINF computation. No sanity check needed - the remux's trun durations are trusted.
595
607
  if (result.duration > 0n) {
596
608
  const prev = state.segmentTrackDurations.get(trackId) ?? 0n;
597
609
  state.segmentTrackDurations.set(trackId, prev + result.duration);
@@ -641,7 +653,7 @@ export function createFMP4Segmenter(options) {
641
653
  parser.push(chunk);
642
654
  }
643
655
  catch (error) {
644
- onError(error instanceof Error ? error : new Error(String(error)));
656
+ onError(toError(error));
645
657
  }
646
658
  }
647
659
  /**
@@ -670,9 +682,15 @@ export function createFMP4Segmenter(options) {
670
682
  parser.flush();
671
683
  onError(error);
672
684
  }
673
- // The four live continuity reads, named once so the individual getters and the snapshot below are the same reads rather than two sets that could drift. Each
674
- // copies what it returns, so a caller holding a snapshot is unaffected by the segments this segmenter goes on to produce.
685
+ // The live continuity reads, named once so the individual getters and the snapshot below are the same reads rather than two sets that could drift. Each copies
686
+ // what it returns, so a caller holding a snapshot is unaffected by the segments this segmenter goes on to produce.
675
687
  const readInitVersion = () => state.initVersion;
688
+ const readSegmentHistory = () => ({
689
+ discontinuityIndices: new Set(state.discontinuityIndices),
690
+ prunedDiscontinuityCount: state.prunedDiscontinuityCount,
691
+ segmentDurations: new Map(state.segmentDurations),
692
+ segmentTimestamps: new Map(state.segmentTimestamps)
693
+ });
676
694
  const readSegmentIndex = () => state.segmentIndex;
677
695
  const readSessionStats = () => ({ ...state.sessionStats });
678
696
  const readTrackTimestamps = () => new Map(state.trackTimestamps);
@@ -680,10 +698,12 @@ export function createFMP4Segmenter(options) {
680
698
  getContinuitySnapshot: () => ({
681
699
  initialTrackTimestamps: readTrackTimestamps(),
682
700
  previousInitSegment: state.initSegment,
701
+ priorSegmentHistory: readSegmentHistory(),
683
702
  priorSessionStats: readSessionStats(),
684
703
  startingInitVersion: readInitVersion(),
685
704
  startingSegmentIndex: readSegmentIndex()
686
705
  }),
706
+ getDiscontinuityCount: () => state.prunedDiscontinuityCount + state.discontinuityIndices.size,
687
707
  getInitSegment: () => state.initSegment,
688
708
  getInitVersion: readInitVersion,
689
709
  getKeyframeStats: () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { SetupFailureStatus } from "./registry.ts";
2
2
  import type { Nullable, ResolvedChannel, ResolvedSiteProfile } from "../types/index.ts";
3
3
  import type { Request, Response } from "express";
4
+ import type { ResumeData, ResumePosition } from "./hlsResume.ts";
4
5
  import { createPageWithCapture } from "./setup.ts";
5
6
  import { unregisterManagedPage } from "../browser/index.ts";
6
- import type { ResumeData } from "./hlsResume.ts";
7
7
  import type { SegmenterContinuity } from "./fmp4Segmenter.ts";
8
8
  import type { TabReplacementResult } from "./recovery.ts";
9
9
  /**
@@ -97,7 +97,8 @@ export declare function ensureChannelStream(channelName: string, req: Request, r
97
97
  export declare function handleHLSPlaylist(req: Request, res: Response): Promise<void>;
98
98
  /**
99
99
  * Handles HLS segment requests. Returns the requested segment from memory. Supports the fMP4 initialization segment (init.mp4), capture-mode media segments
100
- * (.m4s), native-mode video segments (.ts), and audio segments for streams with separate audio renditions.
100
+ * (.m4s), native-mode media segments (.ts for an MPEG-TS source, .m4s for an fMP4 one) and the named initialization segments an fMP4 relay serves, and audio
101
+ * segments for streams with separate audio renditions.
101
102
  *
102
103
  * Route: GET /hls/:name/:segment
103
104
  *
@@ -151,16 +152,16 @@ export interface TabReplacementDeps {
151
152
  *
152
153
  * @param numericStreamId - The stream's numeric ID for registry lookups.
153
154
  * @param streamId - The stream's string ID for logging.
154
- * @param channelName - The channel name (or synthetic ad-hoc key like "play-a1b2c3d4") used as the store key for error callbacks and termination.
155
155
  * @param url - The URL to navigate to.
156
156
  * @param profile - The site profile for video handling.
157
157
  * @param metadataComment - Optional comment to embed in FFmpeg output metadata.
158
- * @param onCircuitBreak - Callback for circuit breaker trips during replacement.
158
+ * @param onCircuitBreak - The stream's circuit-breaker callback, which the replacement pipeline's FFmpeg error handler reaches only after the swap has committed.
159
159
  * @param deps - The injected establishment collaborators; defaults to defaultTabReplacementDeps. Threaded so a test drives the real handler - its phase tracking,
160
160
  * its discard path, and the swap itself - against a substituted establishment rather than a live Chrome.
161
- * @returns A handler function that performs tab replacement, or null if the stream no longer exists.
161
+ * @returns A handler that performs the replacement and resolves to the new page and context, or to null when the stream is gone or the attempt was abandoned
162
+ * before the swap.
162
163
  */
163
- export declare function createTabReplacementHandler(numericStreamId: number, streamId: string, channelName: string, url: string, profile: ResolvedSiteProfile, metadataComment: string | undefined, onCircuitBreak: () => void, deps?: TabReplacementDeps): () => Promise<Nullable<TabReplacementResult>>;
164
+ export declare function createTabReplacementHandler(numericStreamId: number, streamId: string, url: string, profile: ResolvedSiteProfile, metadataComment: string | undefined, onCircuitBreak: () => void, deps?: TabReplacementDeps): () => Promise<Nullable<TabReplacementResult>>;
164
165
  /**
165
166
  * Options for initializing a stream.
166
167
  */
@@ -177,7 +178,7 @@ interface InitializeStreamOptions {
177
178
  url: string;
178
179
  }
179
180
  /**
180
- * Initializes a new HLS stream. This is the blocking wrapper used by callers that need to wait for the full setup to complete (pretune, MPEG-TS, ad-hoc play).
181
+ * Initializes a new HLS stream. This is the blocking wrapper used by callers that must wait for setup to finish.
181
182
  * Registers a pending stream entry with the channel-to-stream mapping, then awaits the full async setup.
182
183
  *
183
184
  * For the non-blocking path used by HLS playlist requests, see registerPendingStream() + completeStreamSetup() called from ensureChannelStream().
@@ -204,21 +205,27 @@ export declare function handleSetupFailure(numericStreamId: number, channelName:
204
205
  * What a resuming segmenter is told to continue from.
205
206
  */
206
207
  export interface BuildResumeContinuityOptions {
207
- readonly baseSegmentIndex: number;
208
208
  readonly prerollSegmentCount: number;
209
+ readonly registeredPosition: Nullable<ResumePosition>;
209
210
  readonly resumeData: Nullable<ResumeData>;
210
211
  }
211
212
  /**
212
- * Derives what a segmenter continues from, which on a fresh stream is nothing at all. A resume carries the prior session's timestamps and init version, and its
213
- * init segment only when no preroll window precedes it - the preroll init differs from the real one, so a byte match there would suppress a discontinuity the
214
- * boundary genuinely needs. Session statistics are deliberately absent: a resume from disk has none, and inventing an empty set would tell the segmenter a live
215
- * prior session is continuing and count a tab replacement that never happened. The starting index accounts for both the resume offset and the preroll segment
216
- * range whenever either contributes one.
213
+ * Derives what a segmenter continues from, which on a fresh stream is nothing at all. The position it continues from is the registration's when a preroll
214
+ * precedes it, because the preroll playlist served from that position, and the creation's own peek otherwise, there being no preroll playlist to agree with. A
215
+ * resume carries the prior session's timestamps and init version, and its init segment only when no preroll window precedes it - the preroll init differs from
216
+ * the real one, so a byte match there would suppress a discontinuity the boundary genuinely needs. Session statistics are deliberately absent: a resume from disk
217
+ * has none, and inventing an empty set would tell the segmenter a live prior session is continuing and count a tab replacement that never happened. The
218
+ * starting index accounts for both the resume position and the preroll segment range whenever either contributes one.
219
+ *
220
+ * A resume also carries a segment history that lists no segment and holds the persisted discontinuity count as pruned, because every earlier marker is already
221
+ * off the front of a window that starts empty. Behind a preroll the history also holds the marker the preroll playlist put on the preroll's first index, which is
222
+ * the persisted index, because the preroll opens a new timeline there whether or not its playlist was served. A resume with neither a preroll nor a count above
223
+ * zero carries no history.
217
224
  *
218
225
  * Each member is present only when this resume genuinely carries it, because the segmenter reads presence rather than value: an absent member and a member set
219
226
  * to an empty or zero stand-in mean different things to it.
220
227
  *
221
- * @param options - The resume record and the preroll accounting to derive from.
228
+ * @param options - The resume record, the registered position, and the preroll accounting to derive from.
222
229
  * @returns The continuity the segmenter is constructed with.
223
230
  */
224
231
  export declare function buildResumeContinuity(options: BuildResumeContinuityOptions): SegmenterContinuity;